Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does FFMPEG report the wrong duration?

Tags:

video

ffmpeg

I have an oldish build of FFmpeg that I can't easily change.

We use FFmpeg to find the duration of video and sound files. So far it has been working wonderfully.

Recently on an uploaded file, FFmpeg has reported a 30 second file as being 5 minutes 30 seconds in length.

Could it be something wrong with the file rather than FFmpeg?

If I use FFmpeg to convert to another file, the duration is restored.

In case it matters, ffmpeg -i 'path to the file' produces:

FFmpeg version Sherpya-r15618, Copyright (c) 2000-2008 Fabrice Bellard, et al.
  libavutil     49.11. 0 / 49.11. 0
  libavcodec    52. 0. 0 / 52. 0. 0
  libavformat   52.22. 1 / 52.22. 1
  libavdevice   52. 1. 0 / 52. 1. 0
  libswscale     0. 6. 1 /  0. 6. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Oct 14 2008 23:43:47, gcc: 4.2.5 20080919 (prerelease) [Sherpya]
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'H:\path\to\file.mov':
  Duration: 00:05:35.00, start: 0.000000, bitrate: 1223 kb/s
    Stream #0.0(eng): Audio: aac, 44100 Hz, stereo, s16
    Stream #0.1(eng): Video: h264, yuv420p, 720x576, 25.00 tb(r)
Must supply at least one output file

It's that very command I use to then extract the duration with RegEx.

Does anyone have a nice application that can do what I'm trying above but get it right 100% of the time?

like image 995
Adrian Lynch Avatar asked Jun 17 '09 15:06

Adrian Lynch


People also ask

How do I set video duration in FFMpeg?

Use the -t option to specify a time limit: `-t duration' Restrict the transcoded/captured video sequence to the duration specified in seconds. hh:mm:ss[.

Is FFMpeg powerful?

FFmpeg is a powerful tool that can do almost anything you can imagine with multimedia files.


3 Answers

Check it with a newer version of ffmpeg (you don't have to replace your build), and if it gives the same duration you can probably blame the file.

like image 84
Malfist Avatar answered Oct 19 '22 21:10

Malfist


You should not rely on the stderr.

The stderr output is not intended to be machine parsed: it is for informational purposes only and prone to breakage.

Parse it with

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
30.024000

You can also use ffmpeg to get the duration by fully decoding the file.

ffmpeg -i input.webm -f null -
...
frame=206723 fps=1390 q=-0.0 Lsize=N/A time=00:57:28.87 bitrate=N/A speed=23.2x

For detail refer to Format (container) duration

like image 26
LF00 Avatar answered Oct 19 '22 21:10

LF00


You can try tcprobe, part of transcode pack.

like image 36
Sunny Milenov Avatar answered Oct 19 '22 23:10

Sunny Milenov