[FFmpeg-devel] FFV1.3

Dave Rice daverice at mac.com
Wed May 23 03:22:14 CEST 2012

Hi Michael,

On May 16, 2012, at 4:11 PM, Michael Niedermayer wrote:

> sOn Wed, May 16, 2012 at 09:01:46PM +0200, Peter B. wrote:
>> On 05/16/2012 08:43 PM, Michael Bradshaw wrote:
>>> On Wed, May 16, 2012 at 12:35 PM, Peter B. <pb at das-werkstatt.com> wrote:
>>>> Maybe a stupid question, but what is the right commandline call for
>>>> selecting the FFv1 version to use for encoding?
>>> ffmpeg -i input.mov -vcodec ffv1 -acodec copy output.mp4
>>> ?
>>> Or do you mean something else?
>> Yes, I'd like to validate/test FFv1's new versions 2 and 3. When v2 had
>> been developed, I had to modify a variable in the source to enable it,
>> but I've seen a commit-msg by Michael [1], which sounded to me like
>> selecting the version was now possible as parameter?
>>> FYI, this mailing list is primarily for the development of ffmpeg
>>> itself. For help using ffmpeg, ffmpeg-user mailing list is probably
>>> better.
>> I know, I'm sorry - I just thought that it might make sense to connect
>> it to the "FFv1.3" thread...
> -level 3
> and thanks for validating testing
> if you need help have questions ask me ...

I tested using an random v210 output to encode the results with ffv1 at different levels. For this I used these commands:

Produce a source file of random noise:
ffmpeg -y -f rawvideo -c:v v210 -s 720x486 -r 29.97 -t 5 -i /dev/random -c:v v210 source1.mov

Encode the source file to ffv1 using the defaults, level 2 and level 3:
ffmpeg -y -i source1.mov -c:v ffv1 -coder 1 result1_v1.mov
ffmpeg -y -i source1.mov -c:v ffv1 -coder 1 -level 2 result1_v2.mov
ffmpeg -y -i source1.mov -c:v ffv1 -coder 1 -level 3 -strict experimental -slices 4 result1_v3.mov

Framemd5 the source and results:
ffmpeg -y -i source1.mov -f framemd5 source1.framemd5
ffmpeg -y -i result1_v1.mov -f framemd5 result1_v1.framemd5
ffmpeg -y -i result1_v2.mov -f framemd5 result1_v2.framemd5
ffmpeg -y -i result1_v3.mov -f framemd5 result1_v3.framemd5

Compare outputs:
md5 *.mov
md5 *.framemd5

The results were:

MD5 (result1_v1.mov) = 9dccccd30802d5e6dd83b12257fa5364
MD5 (result1_v2.mov) = 9dccccd30802d5e6dd83b12257fa5364
MD5 (result1_v3.mov) = fb0c4f23043b6b55d0d12bcd352fbb4f
MD5 (source1.mov) = 3ba8b3a7abe5a12a979cef931661ee53

MD5 (result1_v1.framemd5) = 36e8dc9c3a112980ce3f0ed78e325007
MD5 (result1_v2.framemd5) = 36e8dc9c3a112980ce3f0ed78e325007
MD5 (result1_v3.framemd5) = 8ff40e924f8867c835d122581e2be2e4
MD5 (source1.framemd5) = 8ff40e924f8867c835d122581e2be2e4

The files result1_v1.mov and result1_v2.mov were identical. The '-level 2' had no effect. But also, both of these output files also did not look like the source file, instead of noise, they should diagonal lines, gradients, and patterns.

>From the framemd5 comparison, the only accurate lossless encoding of the random noise of the source file was using -level 3. This is not what I expected, so do these test conditions make sense? I realized later that interpreting random data as v210 is not right since v210 should have 2 padding bits every 32, but changing the way I produced a random v210 source file still yielded the same results, when encoding it with ffv1 at different levels.

Dave Rice

More information about the ffmpeg-devel mailing list