【问题标题】:Why does ffmpeg report different durations?为什么 ffmpeg 报告不同的持续时间?
【发布时间】:2012-05-25 06:54:17
【问题描述】:

来源视频:http://www.artworknotavailable.com/tmp/ffmpegtest

Quicktime Pro 7.7.1 Inspector (Win 7) 报告文件 2398.mov 的以下内容

4.19MB
H.264
电影 FPS:23.98
数据速率:2.35 mb/秒
时长 14:97

ffmpeg 报告以下内容(请参阅帖子底部的完整 ffmpeg 版本信息)

ffmpeg -i 2398.mov

似乎流 1 编解码器帧速率与容器帧速率不同:47952.00 (47952/1) -> >23.98 (2997/125)
输入#0, mov,mp4,m4a,3gp,3g2,mj2, from '2398.mov':
元数据:
主要品牌:qt

次要版本:537199360 兼容品牌:qt
时长:00:00:15.97,开始:0.-963005,比特率:2210 kb/s
流 #0.0(eng):音频:aac、48000 Hz、立体声、s16、152 kb/s
流 #0.1(eng):视频:h264、yuv420p、848x480、2060 kb/s、23.98 fps、23.98 tbr、23976 tbn、47952 tbc

比 Quicktime 报告的时间长一秒。

作为一项实验,我使用以下设置从 Quicktime Pro 导出了这个文件:

帧速率:当前
关键帧:每 24 帧
帧重新排序开启
质量:高
最佳编码
数据速率:自动
优化下载
输出文件:qtime-export-2398.mov

Quicktime Inspector 报告:

5.62 MB
H.264
电影 FPS:23.98
数据速率:3.15 mb/秒
时长 14:97

ffmpeg 现在报告:

ffmpeg -i qtime-export-2398.mov

似乎流 1 编解码器帧速率与容器帧速率不同:1200.00 (1200/1) -> 23.98 (24000/1001)
输入 #0, mov,mp4,m4a,3gp,3g2,mj2, from 'qtime-export-2398.mov':
元数据:
主要品牌:qt
次要版本:537199360 兼容品牌:qt
时长:00:00:14.96,开始:0.000000,比特率:3153 kb/s
流 #0.0(eng):音频:pcm_s16le,44100 Hz,2 通道,s16,1411 kb/s
流 #0.1(英文):视频:h264、yuv420p、678x384、1738 kb/s、23.98 fps、23.98 tbr、600 tbn、1200 tbc

ffmpeg 的持续时间报告从 15.97 变为 14.96(我可以忍受 .1)

这个时长是根据比特率计算的吗?

我需要准确报告上传视频的时长并将其转换为 FLV。谁能告诉我这里发生了什么以及如何解决这个问题?

ffmpeg 信息如下。我已经在 2 个完全不同的 ffmpeg 安装/版本上进行了尝试。结果一样。

FFmpeg 版本 0.6.5,版权所有 (c) 2000-2010 FFmpeg 开发者 使用 gcc 4.1.2 20080704 (Red Hat 4.1.2-51) 于 2012 年 1 月 29 日 23:55:02 构建 配置: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --incdir=/usr/include --disable-avisynth --extra -cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --enable-avfilter --enable-avfilter-lavf --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore- amrwb --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-vdpau --enable-version3 --enable- x11grab libavutil 50.15。 1 / 50.15。 1 libavcodec 52.72。 2 / 52.72。 2 libav 格式 52.64。 2 / 52.64。 2 libavdevice 52. 2. 0 / 52. 2. 0 libavfilter 1.19. 0 / 1.19。 0 libswscale 0.11。 0 / 0.11。 0 libpostproc 51. 2. 0 / 51. 2. 0 FFmpeg 0.6.5 libavutil 50.15。 1 / 50.15。 1 libavcodec 52.72。 2 / 52.72。 2 libav 格式 52.64。 2 / 52.64。 2 libavdevice 52. 2. 0 / 52. 2. 0 libavfilter 1.19. 0 / 1.19。 0 libswscale 0.11。 0 / 0.11。 0 libpostproc 51. 2. 0 / 51. 2. 0

【问题讨论】:

  • 刚刚测试了 Quicktime 导出的更多变体。似乎如果只是选择任何帧速率或比特率来导出,ffmpeg 仍然有更好的机会报告更准确的持续时间。 Quicktime 是在“修复”什么吗?容器?

标签: video ffmpeg


【解决方案1】:

我刚刚查看了第一个文件,这就是他们报告不同持续时间的原因。

Quicktime 正在从“电影标题”中收集时长值。这里的值是 8981 / 600 = 14.97 秒。

FFmpeg 正在从“媒体标头”中收集持续时间值,视频为 383000 / 23976 = 15.97 秒,音频为 719872 / 48000 = 15.00 秒。

编辑:...并回答您的其他问题:有人可以告诉我如何解决这个问题吗?我想您正在使用 ffmpeg 将文件转换为 .FLV?如果是这样,我会坚持 ffmpeg 报告的内容。

【讨论】:

  • 感谢您的信息。检查 QT 文件的电影标题的最佳方法是什么?
  • 我还发现,如果我使用“-ss”参数并应用 ffmpeg 报告的负开始时间,我的文件更接近我认为正确的持续时间,以及任何音频一直不同步似乎已解决。例如:ffmpeg 报告视频 input.mov 开始:0.-963005 持续时间:00:00:15.97 ffmpeg -i input.mov -ar 22050 -ab 65536 -s 320x240 -b 524288 -r 12 -ss 00:00:00.963005 output.flv 结果:持续时间:00:00:15.00 抱歉,stackoverflow 评论框让我发疯了。
  • 不确定最好的方法是什么。我使用从头开始构建的自定义专有库。关于同步问题,您还可以查看 -async 参数,看看是否有帮助。我认为 ffmpeg 报告的持续时间对于这个文件可能是正确的。如果您将文件放在不基于 Quicktime 组件(例如 Adob​​e Premiere Pro)的时间线上,则报告的持续时间为 15 秒和 23 帧。
  • 谢谢。你几乎回答了我最初的问题。我会尽快标记它。我认为如果您的时间线与源视频的帧速率不匹配,编辑工具中的时间可能会有所不同,不是吗?在我看来,Quicktime .mov 播放的实际时间应该是视频的持续时间。此外,VLC 媒体播放器显示 00:14。所以我被实时实际发生的事情或软件所说的内容所困扰。我愿意相信实际发生的事情。但这在这里似乎是不可能的。
  • 我知道这是将近 5 年前的事了,但我想补充一点,我遇到了几个电影预告片 mp4 文件,只有视频在 ffmpeg 报告的时间之后继续播放。然而,实际的“视频”在 ffmpeg 的时间结束,继续的是一个 mp4 文件上的海报和另一个 mp4 上的黑屏。
【解决方案2】:

FFmpeg 在这里显示“Duration: 00:00:14.96”,请理解您的 FFmpeg 版本很古老(并且有许多已知的错误和回归),请参阅http://ffmpeg.org/download.html 获取有关如何获取当前 git head 的信息,总是推荐的。

【讨论】:

  • 感谢 cehoyos 的信息。不幸的是,像很多人一样,升级并不像人们希望的那样简单,使用当前的基础设施。我们在生产中的当前版本甚至没有版本号。我在这里用来测试的示例来自我通过 site5.com 拥有的个人共享主机帐户。
猜你喜欢
  • 2010-11-03
  • 2016-06-10
  • 2018-08-26
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
相关资源
最近更新 更多