为啥 FFMPEG 报告错误的持续时间?
Posted
技术标签:
【中文标题】为啥 FFMPEG 报告错误的持续时间?【英文标题】:Why does FFMPEG report the wrong duration?为什么 FFMPEG 报告错误的持续时间? 【发布时间】:2010-11-03 17:19:34 【问题描述】:我有一个旧版本的 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% 的时间都正确?
【问题讨论】:
如果您还有该文件,请在此处报告:ffmpeg.org/bugreports.html 我也注意到 aac 文件 superuser.com/questions/121298/… 你有没有深究这件事 - 我看到了同样的事情。和你一样,我发现其他应用程序(例如 Quicktime)可以正确读取持续时间。 我有一个相关问题:superuser.com/questions/728687/… FFmpeg 在我的目标文件中添加了不正确的元数据(持续时间和开始时间)。 ***.com/questions/10640088/… 我在这里找到answer .. 因为我也找到了这个.. 【参考方案1】:用较新版本的 ffmpeg 检查它(您不必替换您的构建),如果它给出相同的持续时间,您可以可能责备该文件。
【讨论】:
好主意,我会试试看的。【参考方案2】:你不应该依赖标准错误。
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
【讨论】:
【参考方案3】:你可以试试 tcprobe,transcode 包的一部分。
【讨论】:
感谢推荐,我会尽快看看这个。【参考方案4】:我猜是文件有问题。长度可能错误地写在标题中。不幸的是,没有验证器之类的东西(如网络标准),因此您无法确定文件是否正确。
【讨论】:
嗯嗯嗯嗯,也许吧。不过 VLC 和 Quicktime 报告的长度是正确的。【参考方案5】:确保您定义了文件已知的频道和频率。还要确保使用 -f 定义格式。检查ffmpeg -formats
以查看所有可用的。
使用-ac
定义频道。使用-ar
定义音频的速率。如果它默认比特率或频率,那么持续时间将与实际不同。
【讨论】:
以上是关于为啥 FFMPEG 报告错误的持续时间?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 FFMPEG 错误地将 .M4A 猜测为 WAV pcm_s16le 文件?