我有一个老式的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%的时间都正确?
答案 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