[FFmpeg-user] Question about -noauto_conversion_filters

Gyan Doshi ffmpeg at gyani.pro
Mon Sep 14 14:57:30 EEST 2020



On 14-09-2020 04:54 pm, Gyan Doshi wrote:
>
>
> On 14-09-2020 03:41 pm, Michael Koch wrote:
>> Am 14.09.2020 um 11:26 schrieb Gyan Doshi:
>>>
>>>
>>> On 14-09-2020 02:47 pm, Michael Koch wrote:
>>>> ffmpeg -v verbose -f lavfi -i 
>>>> testsrc2=s=svga:d=5,format=yuv422p10le -vf 
>>>> format=rgb48le,lut3d="VLog_to_V709.cube",format=yuv422p10le 
>>>> -noauto_conversion_filters -pix_fmt yuv422p10le -c:v h264 -y out.mov 
>>>
>>> Format conversion is carried out by libswscale and auto conversion 
>>> inserts the scale filter.
>>>
>>> So,
>>>
>>>     ffmpeg -v verbose -f lavfi -i 
>>> testsrc2=s=svga:d=5,format=yuv422p10le -vf 
>>> scale,format=rgb48le,lut3d="VLog_to_V709.cube",scale 
>>> -noauto_conversion_filters -pix_fmt yuv422p10le -c:v h264 -y out.mov
>>>
>>> The final format filter is redundant with -pix_fmt, so I removed one 
>>> of them.
>>
>> Thank you, with "scale" it works fine. Although it's hard to 
>> understand what "scale" (without any options) is actually doing.
>>
>> I have another question. Is this the correct and easiest way to make 
>> a 10-bit test video?
>> -f lavfi -i testsrc2=s=svga:d=5,format=yuv422p10le
>>
>> In the documentation is written
>> "The |testsrc2|source is similar to testsrc, but supports more pixel 
>> formats instead of just |rgb24|. This allows using it as an input for 
>> other tests without requiring a format conversion."
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>
>> But in my above command, I think "format=yuv422p10le" is a format 
>> conversion.
>
> Each filter presents a list of input formats they can work with and a 
> list of output formats they can directly generate. The framework 
> inspects adjacent filters and sets a compatible common format for the 
> outputs and inputs when possible. If not, it sets one of the available 
> output formats for the preceding filter and one from input formats for 
> the following filter and inserts a scale filter to convert  between 
> those. This process is format negotiation. The format filter doesn't 
> carry out the conversion itself - it inserts scale which in turn 
> invokes libswscale. scale without any args defaults to the source W 
> and H. But for pixel formats, its output format is constrained by the 
> following format filter. That triggers a format conversion by libswscale.

In case of testsrc2, no conversion is required since the filter can 
generate output in yuv422p10le.


More information about the ffmpeg-user mailing list