Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does ffmpeg report different durations?

Tags:

video

ffmpeg

Source videos: http://www.artworknotavailable.com/tmp/ffmpegtest

Quicktime Pro 7.7.1 Inspector (Win 7) reports the following for the file 2398.mov

4.19MB
H.264
Movie FPS: 23.98
Data Rate: 2.35 mbits/Sec
Duration 14:97

ffmpeg reports the following (see full ffmpeg version info at bottom of post)

ffmpeg -i 2398.mov

Seems stream 1 codec frame rate differs from container frame rate: 47952.00 (47952/1) -> >23.98 (2997/125)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2398.mov':
Metadata:
major_brand : qt

minor_version : 537199360
compatible_brands: qt
Duration: 00:00:15.97, start: 0.-963005, bitrate: 2210 kb/s
Stream #0.0(eng): Audio: aac, 48000 Hz, stereo, s16, 152 kb/s
Stream #0.1(eng): Video: h264, yuv420p, 848x480, 2060 kb/s, 23.98 fps, 23.98 tbr, 23976 tbn, 47952 tbc

One second longer than what Quicktime reports.

As an experiment I exported this file from Quicktime Pro using the following settings:

Frame Rate: Current
Key Frames: Every 24 frames
Frame Reordering On
Quality: High
Encoding Best
Data Rate: Automatic
Optimized for Download
Output file: qtime-export-2398.mov

Quicktime Inspector reports:

5.62 MB
H.264
Movie FPS: 23.98
Data Rate: 3.15 mbits/Sec
Duration 14:97

ffmpeg now reports:

ffmpeg -i qtime-export-2398.mov

Seems stream 1 codec frame rate differs from container frame rate: 1200.00 (1200/1) -> 23.98 (24000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'qtime-export-2398.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
Duration: 00:00:14.96, start: 0.000000, bitrate: 3153 kb/s
Stream #0.0(eng): Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
Stream #0.1(eng): Video: h264, yuv420p, 678x384, 1738 kb/s, 23.98 fps, 23.98 tbr, 600 tbn, 1200 tbc

ffmpeg's report on duration went from 15.97 to 14.96 (I can live with .1)

Is this duration calculated from the bitrate?

I need to accurately report the duration of uploaded videos as well as convert them to FLV. Can somebody tell me what is going on here and how I might get around this?

ffmpeg info below. I've tried this on 2 completely different installs/versions of ffmpeg. Same result.

FFmpeg version 0.6.5, Copyright (c) 2000-2010 the FFmpeg developers built on Jan 29 2012 23:55:02 with gcc 4.1.2 20080704 (Red Hat 4.1.2-51) configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --incdir=/usr/include --disable-avisynth --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --enable-avfilter --enable-avfilter-lavf --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-vdpau --enable-version3 --enable-x11grab libavutil 50.15. 1 / 50.15. 1 libavcodec 52.72. 2 / 52.72. 2 libavformat 52.64. 2 / 52.64. 2 libavdevice 52. 2. 0 / 52. 2. 0 libavfilter 1.19. 0 / 1.19. 0 libswscale 0.11. 0 / 0.11. 0 libpostproc 51. 2. 0 / 51. 2. 0 FFmpeg 0.6.5 libavutil 50.15. 1 / 50.15. 1 libavcodec 52.72. 2 / 52.72. 2 libavformat 52.64. 2 / 52.64. 2 libavdevice 52. 2. 0 / 52. 2. 0 libavfilter 1.19. 0 / 1.19. 0 libswscale 0.11. 0 / 0.11. 0 libpostproc 51. 2. 0 / 51. 2. 0

like image 411
kenitech Avatar asked May 17 '12 16:05

kenitech


People also ask

What is Vsync FFmpeg?

In the documentation ffmpeg of vsync says that: -vsync parameter Video sync method. For compatibility reasons old values can be specified as numbers. Newly added values will have to be specified as strings always. With -map you can select from which stream the timestamps should be taken.

What is FFmpeg and how it works?

Ffmpeg stands for Fast Forward MPEG. It's an opensource software project for working with audio and video. It is command-line based and lets you handle video, audio, multimedia files, and streams. You'll find it used for transcoding, simple editing, video scaling, video post-production effects and standards compliance.

What is FFmpeg video format?

ffmpeg is a command-line tool that converts audio or video formats. It can also capture and encode in real-time from various hardware and software sources such as a TV capture card. ffplay is a simple media player utilizing SDL and the FFmpeg libraries.


1 Answers

I just had a look at the first file and here is why they report a different duration.

Quicktime is collecting the duration value from the "movie header". The values here are 8981 / 600 = 14.97 seconds.

FFmpeg is collecting the duration value from the "media header" which is 383000 / 23976 = 15.97 seconds for the video and 719872 / 48000 = 15.00s for the audio.

Edit: ...and to also answer your other question: Can somebody tell me how I might get around this? I imagine you are using ffmpeg to convert the files to .FLV? If so, I would stick to what ffmpeg reports.

like image 69
BlueVoodoo Avatar answered Sep 19 '22 13:09

BlueVoodoo