I'm using this Python library to programmatically generate a short video using an image (.png) as input. The video needs to match the specifications of another video created by someone else.
The key differences between my output and the other are the following (these are the media attributes I desire to have):
How would I achieve VBR? It was my understanding ProRes 422 HQ natively used unconstrained VBR yet my output specifies CBR.
Secondly, as can be seen from my code, I'm attempting to conform to BT.709. However, my media information output does not specify this. What am I doing incorrectly?
Here's my code:
image = ffmpeg.input(input_image, t='00:00:10', framerate='24000/1001', loop='1', probesize='42M') output = ffmpeg.output(image, output_video, f='mov', vcodec='prores_ks', vprofile='3', pix_fmt='yuv422p10le', g='48', video_track_timescale='24000', movflags='use_metadata_tags', timecode='00:00:00:00', color_primaries='bt709', color_trc='bt709', colorspace='bt709', qcomp='1', # BT.709 issue solved by adding the bsf option as seen via the line below bsf='prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709', vf='scale=in_range=full:in_color_matrix=bt709:out_range=full:out_color_matrix=bt709') output.run()
Here's the media information produced by my output:
{ "media":{ "@ref":"Redacted", "track":[ { "@type":"General", "VideoCount":"1", "OtherCount":"1", "FileExtension":"mov", "Format":"MPEG-4", "Format_Profile":"QuickTime", "CodecID":"qt ", "CodecID_Version":"0000.02", "CodecID_Compatible":"qt ", "FileSize":"196366623", "Duration":"10.010", "OverallBitRate":"156936362", "FrameRate":"23.976", "FrameCount":"240", "StreamSize":"2463", "HeaderSize":"28", "DataSize":"196364172", "FooterSize":"2423", "IsStreamable":"No", "File_Created_Date":"UTC 2019-12-13 19:26:37.150", "File_Created_Date_Local":"2019-12-13 19:26:37.150", "File_Modified_Date":"UTC 2019-12-13 19:27:20.303", "File_Modified_Date_Local":"2019-12-13 19:27:20.303" }, { "@type":"Video", "StreamOrder":"0", "ID":"1", "Format":"ProRes", "Format_Version":"0", "Format_Profile":"422 HQ", "CodecID":"apch", "Duration":"10.010", "BitRate_Mode":"CBR", "BitRate":"156934237", "Width":"1920", "Height":"1080", "Sampled_Width":"1920", "Sampled_Height":"1080", "PixelAspectRatio":"1.000", "DisplayAspectRatio":"1.778", "Rotation":"0.000", "FrameRate_Mode":"CFR", "FrameRate":"23.976", "FrameCount":"240", "ColorSpace":"YUV", "ChromaSubsampling":"4:2:2", "ScanType":"Progressive", "Delay":"0.000", "StreamSize":"196364160", "Encoded_Library":"Lavc", "colour_description_present":"Yes", "colour_description_present_Source":"Stream", "colour_primaries_Source":"Stream", "transfer_characteristics_Source":"Stream", "matrix_coefficients_Source":"Stream" }, { "@type":"Other", "StreamOrder":"1", "ID":"2", "Type":"Time code", "Format":"QuickTime TC", "Duration":"10.010", "FrameRate":"23.976", "TimeCode_FirstFrame":"00:00:00:00", "TimeCode_Striped":"Yes", "Language":"en", "Default":"No" } ] }
}
Here's the media information spec I'm trying to match:
{ "media":{ "@ref":"Redacted", "track":[ { "@type":"General", "VideoCount":"1", "OtherCount":"1", "FileExtension":"mov", "Format":"MPEG-4", "Format_Profile":"QuickTime", "CodecID":"qt ", "CodecID_Version":"2005.03", "CodecID_Compatible":"qt ", "FileSize":"1397430682", "Duration":"70.737", "OverallBitRate_Mode":"VBR", "OverallBitRate":"158042403", "FrameRate":"23.976", "FrameCount":"1696", "StreamSize":"9898", "HeaderSize":"28", "DataSize":"1397420796", "FooterSize":"9858", "IsStreamable":"No", "Encoded_Date":"UTC 2019-04-29 22:26:32", "Tagged_Date":"UTC 2019-04-29 22:26:32", "File_Created_Date":"UTC 2019-12-12 16:52:57.215", "File_Created_Date_Local":"2019-12-12 16:52:57.215", "File_Modified_Date":"UTC 2019-12-12 17:25:58.903", "File_Modified_Date_Local":"2019-12-12 17:25:58.903", "Encoded_Application":"DVP Factory r561 (2019-04-25), Host: dvp07" }, { "@type":"Video", "StreamOrder":"0", "ID":"1", "Format":"ProRes", "Format_Version":"0", "Format_Profile":"422 HQ", "CodecID":"apch", "Duration":"70.737", "Duration_LastFrame":"-0.000", "BitRate_Mode":"VBR", "BitRate":"158040381", "Width":"1920", "Height":"1080", "Sampled_Width":"1920", "Sampled_Height":"1080", "PixelAspectRatio":"1.000", "DisplayAspectRatio":"1.778", "Rotation":"0.000", "FrameRate_Mode":"CFR", "FrameRate":"23.976", "FrameCount":"1696", "ColorSpace":"YUV", "ChromaSubsampling":"4:2:2", "ScanType":"Progressive", "Delay":"0.000", "StreamSize":"1397420784", "Encoded_Library":"agi0", "Language":"en", "Encoded_Date":"UTC 2019-04-29 22:26:32", "Tagged_Date":"UTC 2019-04-29 22:26:32", "colour_description_present":"Yes", "colour_description_present_Source":"Container / Stream", "colour_primaries":"BT.709", "colour_primaries_Source":"Container", "colour_primaries_Original_Source":"Stream", "transfer_characteristics":"BT.709", "transfer_characteristics_Source":"Container", "transfer_characteristics_Original_Source":"Stream", "matrix_coefficients":"BT.709", "matrix_coefficients_Source":"Container / Stream" }, { "@type":"Other", "StreamOrder":"1", "ID":"2", "Type":"Time code", "Format":"QuickTime TC", "Duration":"70.737", "FrameRate":"23.976", "TimeCode_FirstFrame":"00:00:00:00", "TimeCode_Striped":"Yes", "Language":"en", "extra":{ "Encoded_Date":"UTC 2019-04-29 22:26:32", "Tagged_Date":"UTC 2019-04-29 22:26:32" } } ] }
}
--
using this Python library