为什么FFMPEG报告错误的持续时间?

时间:2009-06-17 15:45:55

标签: ffmpeg

我有一个老式的FFmpeg,我无法轻易改变。

我们使用FFmpeg查找视频和声音文件的持续时间。到目前为止,它一直运作良好。

最近在一个上传的文件中,FFmpeg报告了一个30秒的文件,长度为5分30秒。

文件而不是FFmpeg可能有问题吗?

如果我使用FFmpeg转换为另一个文件,则会恢复持续时间。

如果重要,ffmpeg -i'文件路径'会产生:

    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

这是我用来用RegEx提取持续时间的命令。

有没有人有一个很好的应用程序可以做我上面尝试的但是100%的时间都正确?

5 个答案:

答案 0 :(得分:2)

您可以尝试tcprobe,transcode打包的一部分。

答案 1 :(得分:2)

使用较新版本的ffmpeg进行检查(您不必更换构建版本),如果它的持续时间相同,则可能指责该文件。

答案 2 :(得分:2)

我猜这是文件的问题。长度可能写错了标题。不幸的是,没有验证器(比如Web标准),所以你无法确定文件是否正确。

答案 3 :(得分:0)

确保您定义了文件已知的频道和频率。还要确保使用-f定义格式。检查ffmpeg -formats以查看所有可用的内容。

使用-ac定义频道。使用-ar定义音频的速率。如果它默认比特率或频率,则持续时间将与实际不同。

答案 4 :(得分:0)

您不应该依赖stderr。

stderr输出不用于机器解析:仅用于提供信息,容易损坏。

使用

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

您还可以使用ffmpeg通过完全解码文件来获取持续时间。

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

有关详细信息,请参见Format (container) duration