7

我有一个旧版本的 FFmpeg,我无法轻易更改。

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

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

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

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

万一这很重要, ffmpeg -i 'path to the file' 会产生:

FFmpeg 版本 Sherpya-r15618,版权所有 (c) 2000-2008 Fabrice Bellard 等人。
  libavutil 49.11。0 / 49.11。0
  libavcodec 52.0.0 / 52.0.0
  libav 格式 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
  建于 2008 年 10 月 14 日 23:43:47,gcc:4.2.5 20080919(预发布)[Sherpya]
输入 #0, mov,mp4,m4a,3gp,3g2,mj2,来自 'H:\path\to\file.mov':
  持续时间:00:05:35.00,开始:0.000000,比特率:1223 kb/s
    流 #0.0(eng):音频:aac,44100 Hz,立体声,s16
    流 #0.1(eng):视频:h264、yuv420p、720x576、25.00 tb(r)
必须提供至少一个输出文件

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

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

4

5 回答 5

3

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

于 2009-06-17T16:01:00.533 回答
3

你不应该依赖标准错误。

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

有关详细信息,请参阅格式(容器)持续时间

于 2019-08-06T08:17:53.440 回答
2

估计是文件有问题。长度可能错误地写在标题中。不幸的是,没有验证器之类的东西(如网络标准),因此您无法确定文件是否正确。

于 2009-06-17T16:14:29.097 回答
2

你可以试试 tcprobe,它是转码包的一部分。

于 2009-06-17T15:53:10.020 回答
0

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

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

于 2018-06-07T18:00:56.477 回答