Opened 12 years ago

Closed 12 years ago

Last modified 11 years ago

#1534 closed enhancement (fixed)

report on ffv1 version and slices

Reported by: dave rice Owned by:
Priority: normal Component: avcodec
Version: unspecified Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:

Since ffv1 version 3 may someday become the default there should be a way to identify whether an ffv1 encoding is version 1, or 3 (or 0). Currently the version isn't reported either during encoding or with ffprobe -show_streams.

How to reproduce:

Produce ffv1 encodings with version 1 and version 3.
Version 1:

ffmpeg started on 2012-07-14 at 07:46:55
Report written to "ffmpeg-20120714-074655.log"
Command line:
ffmpeg -report -f lavfi -t 1 -i testsrc -c:v ffv1 ffv1_v1.mov
ffmpeg version 0.11.1.git Copyright (c) 2000-2012 the FFmpeg developers
  built on Jul 13 2012 22:09:29 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/gcc-4.2 --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --enable-libopenjpeg
  libavutil      51. 64.100 / 51. 64.100
  libavcodec     54. 37.100 / 54. 37.100
  libavformat    54. 16.104 / 54. 16.104
  libavdevice    54.  1.100 / 54.  1.100
  libavfilter     3.  2.100 /  3.  2.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
[Parsed_testsrc_0 @ 0x7f8893c184a0] size:320x240 rate:25/1 duration:-1.000000 sar:1/1
[lavfi @ 0x7f889404e200] All info found
[lavfi @ 0x7f889404e200] Estimating duration from bitrate, this may be inaccurate
Input #0, lavfi, from 'testsrc':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0, 1, 1/25: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
-t is not an input option, keeping it for the next output; consider fixing your command line.
[buffer @ 0x7f8893c19aa0] Setting entry with key 'video_size' to value '320x240'
[buffer @ 0x7f8893c19aa0] Setting entry with key 'pix_fmt' to value '2'
[buffer @ 0x7f8893c19aa0] Setting entry with key 'time_base' to value '1/25'
[buffer @ 0x7f8893c19aa0] Setting entry with key 'pixel_aspect' to value '1/1'
[buffer @ 0x7f8893c19aa0] Setting entry with key 'sws_param' to value 'flags=2'
[buffer @ 0x7f8893c19aa0] Setting entry with key 'frame_rate' to value '25/1'
[graph 0 input from stream 0:0 @ 0x7f8893c19b60] w:320 h:240 pixfmt:rgb24 tb:1/25 fr:25/1 sar:1/1 sws_param:flags=2
[format @ 0x7f8893c1a1e0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
[auto-inserted scaler 0 @ 0x7f8893c1a540] w:320 h:240 fmt:rgb24 sar:1/1 -> w:320 h:240 fmt:bgr0 sar:1/1 flags:0x4
[ffv1 @ 0x7f8894054400] detected 2 logical cores
[mov @ 0x7f8894055000] Using MS style video codec tag, the file may be unplayable!
Output #0, mov, to 'ffv1_v1.mov':
  Metadata:
    encoder         : Lavf54.16.104
    Stream #0:0, 0, 1/25: Video: ffv1, bgr0, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo -> ffv1)
Press [q] to stop, [?] for help
No more output streams to write to, finishing.
frame=   25 fps=0.0 q=0.0 Lsize=     106kB time=00:00:01.00 bitrate= 870.9kbits/s    
video:105kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.781373%

Version 3:

ffmpeg started on 2012-07-14 at 07:46:42
Report written to "ffmpeg-20120714-074642.log"
Command line:
ffmpeg -report -f lavfi -t 1 -i testsrc -c:v ffv1 -level 3 -strict experimental ffv1_v3.mov
ffmpeg version 0.11.1.git Copyright (c) 2000-2012 the FFmpeg developers
  built on Jul 13 2012 22:09:29 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/gcc-4.2 --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --enable-libopenjpeg
  libavutil      51. 64.100 / 51. 64.100
  libavcodec     54. 37.100 / 54. 37.100
  libavformat    54. 16.104 / 54. 16.104
  libavdevice    54.  1.100 / 54.  1.100
  libavfilter     3.  2.100 /  3.  2.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
[Parsed_testsrc_0 @ 0x7fcf41c18520] size:320x240 rate:25/1 duration:-1.000000 sar:1/1
[lavfi @ 0x7fcf4204e200] All info found
[lavfi @ 0x7fcf4204e200] Estimating duration from bitrate, this may be inaccurate
Input #0, lavfi, from 'testsrc':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0, 1, 1/25: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
-t is not an input option, keeping it for the next output; consider fixing your command line.
[buffer @ 0x7fcf41c19c00] Setting entry with key 'video_size' to value '320x240'
[buffer @ 0x7fcf41c19c00] Setting entry with key 'pix_fmt' to value '2'
[buffer @ 0x7fcf41c19c00] Setting entry with key 'time_base' to value '1/25'
[buffer @ 0x7fcf41c19c00] Setting entry with key 'pixel_aspect' to value '1/1'
[buffer @ 0x7fcf41c19c00] Setting entry with key 'sws_param' to value 'flags=2'
[buffer @ 0x7fcf41c19c00] Setting entry with key 'frame_rate' to value '25/1'
[graph 0 input from stream 0:0 @ 0x7fcf41c19cc0] w:320 h:240 pixfmt:rgb24 tb:1/25 fr:25/1 sar:1/1 sws_param:flags=2
[format @ 0x7fcf41c1a360] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
[auto-inserted scaler 0 @ 0x7fcf41c1a6a0] w:320 h:240 fmt:rgb24 sar:1/1 -> w:320 h:240 fmt:bgr0 sar:1/1 flags:0x4
[ffv1 @ 0x7fcf42054400] detected 2 logical cores
[mov @ 0x7fcf42055000] Using MS style video codec tag, the file may be unplayable!
Output #0, mov, to 'ffv1_v3.mov':
  Metadata:
    encoder         : Lavf54.16.104
    Stream #0:0, 0, 1/25: Video: ffv1, bgr0, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo -> ffv1)
Press [q] to stop, [?] for help
No more output streams to write to, finishing.
frame=   25 fps=0.0 q=0.0 Lsize=     123kB time=00:00:01.00 bitrate=1006.9kbits/s    
video:122kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.681518%

FFprobe -show_streams on version 1:

ffprobe ffv1_v1.mov -show_streams
ffprobe version 0.11.1.git Copyright (c) 2007-2012 the FFmpeg developers
  built on Jul 13 2012 22:09:29 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/gcc-4.2 --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --enable-libopenjpeg
  libavutil      51. 64.100 / 51. 64.100
  libavcodec     54. 37.100 / 54. 37.100
  libavformat    54. 16.104 / 54. 16.104
  libavdevice    54.  1.100 / 54.  1.100
  libavfilter     3.  2.100 /  3.  2.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ffv1_v1.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    encoder         : Lavf54.16.104
  Duration: 00:00:01.00, start: 0.000000, bitrate: 870 kb/s
    Stream #0:0(eng): Video: ffv1 (FFV1 / 0x31564646), bgr0, 320x240, 864 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
    Metadata:
      handler_name    : DataHandler
[STREAM]
index=0
codec_name=ffv1
codec_long_name=FFmpeg video codec #1
profile=unknown
codec_type=video
codec_time_base=1/25
codec_tag_string=FFV1
codec_tag=0x31564646
width=320
height=240
has_b_frames=0
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=bgr0
level=-99
timecode=N/A
id=N/A
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/25
start_time=0.000000
duration=1.000000
bit_rate=864120
nb_frames=25
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=eng
TAG:handler_name=DataHandler
[/STREAM]

FFprobe -show_streams on version 3:

ffprobe ffv1_v3.mov -show_streams
ffprobe version 0.11.1.git Copyright (c) 2007-2012 the FFmpeg developers
  built on Jul 13 2012 22:09:29 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/gcc-4.2 --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --enable-libopenjpeg
  libavutil      51. 64.100 / 51. 64.100
  libavcodec     54. 37.100 / 54. 37.100
  libavformat    54. 16.104 / 54. 16.104
  libavdevice    54.  1.100 / 54.  1.100
  libavfilter     3.  2.100 /  3.  2.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ffv1_v3.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    encoder         : Lavf54.16.104
  Duration: 00:00:01.00, start: 0.000000, bitrate: 1006 kb/s
    Stream #0:0(eng): Video: ffv1 (FFV1 / 0x31564646), bgr0, 320x240, 999 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
    Metadata:
      handler_name    : DataHandler
[STREAM]
index=0
codec_name=ffv1
codec_long_name=FFmpeg video codec #1
profile=unknown
codec_type=video
codec_time_base=1/25
codec_tag_string=FFV1
codec_tag=0x31564646
width=320
height=240
has_b_frames=0
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=bgr0
level=-99
timecode=N/A
id=N/A
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/25
start_time=0.000000
duration=1.000000
bit_rate=999800
nb_frames=25
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=eng
TAG:handler_name=DataHandler
[/STREAM]

There's no method to identify what version a given ffv1 encoding was made with.

The specifications for the ffv1 header are here: http://ffmpeg.org/~michael/ffv1.html#toc-Subsection-4.3.

If version >1 it may be useful to report the minor_version as well. At the moment I can't think of a reason to need to report things like coder_type and number of slices but it may be nice.

Change History (5)

comment:1 by Michael Niedermayer, 12 years ago

Component: undeterminedavcodec
Resolution: fixed
Status: newclosed

ffplay -debug 1 <ffvfile>
will show the version

comment:2 by dave rice, 11 years ago

Using ffplay to determine the version is a bit awkward to handle programmatically. Is it feasible to grab this data through ffmpeg or ffprobe?

comment:3 by Elon Musk, 11 years ago

ffmpeg -v debug ... ?

comment:4 by dave rice, 11 years ago

Not sure why I didn't try that.

If anyone else needs it here is what I'm using to get a version number of the ffv1 codec:

ffmpeg -debug 1 -i ffv1_file.mov -t 0.1 -f null - 2>&1 | grep -o "ver:[0-9]*" | head -n1 | cut -d: -f2

in reply to:  4 comment:5 by Carl Eugen Hoyos, 11 years ago

Replying to dericed:

If anyone else needs it here is what I'm using to get a version number of the ffv1 codec:

ffmpeg -debug 1 -i ffv1_file.mov -t 0.1 -f null -

-vframes 1 may be more appropriate than -t 0.1

Note: See TracTickets for help on using tickets.