FFmpeg如何控制帧率(fps)、tbr、tbn、tbc参数

10

我有两个avi文件,

A.avi: fps 30 tbr 30 tbn 30 tbc 30.
B.avi: fps 2 tbr 2 tbn 2 tbc 2.

问题是如何在B.avi上设置相同的值30?

非常感谢,我正在使用cmd工具 :) - kaka_ace
1
这些问题属于http://video.stackexchange.com/questions/tagged/ffmpeg。 - Alex Cohn
1
使用 -r 设置帧率,使用 -video_track_timescale 设置 tbn,请参考 ffmpeg concat compressed video result in wrong time span - LF00
3个回答

10

您可以通过使用 -video_track_timescale 命令来更改时间基准或 tbntbc 的值。例如,要将 tbntbc 更改为30:

ffmpeg -i 1.avi -c:v copy -video_track_timescale 30 1.avi

1
这对我很有帮助。我想在视频前面添加几秒钟的黑色。连接后的视频播放速度慢得多,有效帧率只有期望帧率的四分之一。我能够使用 ffmpeg -f lavfi -i color=size=1920x1080:rate=60:color=black -t 10 -video_track_timescale 60k black.mp4 生成一个与实际视频匹配的 tbn 视频。在这种情况下,tbc 似乎并不重要。 - Hermann

7
您可以使用指定的帧率进行重新编码:
ffmpeg -i B.avi -codec:v mpeg4 -r 30 -qscale:v 2 -codec:a copy C.avi

这些选项的含义:

  • -codec:v mpeg4 - 使用名为 mpeg4 的编码器进行 MPEG-4 Part 2 视频编码。
  • -r 30 - 设置输出帧率为 30。
  • -qscale:v 2 - 使用恒定量化参数设置视频输出质量。建议范围是 2-5,适用于 mpeg4
  • -codec:a copy - 将音频从输入复制到输出,以避免重新编码。

请注意,ffmpeg 会简单地复制帧以实现所需的输出帧率。如果您要降低帧率,则 ffmpeg 会删除帧。


3
如果您想要更精确的控制,不仅控制fps,还要控制tbr、tbn和tbc。假设您已经理解了它们的含义。tbc、tbn、tbr 请检查。
ffmpeg -x264opts timebase=???

或者

ffmpeg -time_base

或者使用格式工厂,它默认会给你相同的tbr、tbn、tbc。

3
我所使用的命令是:ffmpeg -i input.mp4 -time_base 1/30 -c:a copy -c:v copy output.mp4。成功地通过 time_base 参数将 'tbn' 值修改为相同,而不需要重新编码视频。如果在合并视频之前需要设置其他参数保持一致,则可能需要应用其他参数。 - TheKarateKid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接