FFmpeg:如何使用C ++代码来改变视频文件的帧速率?

时间:2014-03-25 18:53:12

标签: video ffmpeg

我知道使用FFmpeg命令更改视频文件的帧速率会更容易。 但无论如何,如果我想在C ++代码中使用FFmpeg库,我该怎么办呢?

我想我应该能够找到源代码中的线索。 在继续之前,我希望会有一些很好的介绍或例子。

1 个答案:

答案 0 :(得分:2)

这很简单,您只需修改视频流的time_base即可。对于简单的容器格式,例如AVI,您只需要在标题中执行此操作。如果您坚持通过ffmpeg API执行此操作,则需要遍历输入流中的所有帧,并将它们复制到输出流。

以上假设您只想更改FPS(即减慢或加速视频)而不丢帧。但是,如果您希望在更改FPS时以原始速度保持视频播放,则需要重新编码视频,即对每个帧进行解码和编码,同时插入额外的帧或删除一些帧。您不能简单地从视频中删除帧 - 例如,当从30FPS转换为15FPS时,您不能简单地删除每个第2帧,因为它可能是一个关键帧,并且会在它之后中断所有帧,直到遇到下一个关键帧。同样地,你不能简单地在提升FPS时复制一帧,因为P帧只适用于它之前的帧,因此重复它会破坏你的视频。为此,我建议您查看我的卡拉OK歌词编辑器源代码,特别是video decodingvideo encoding