【发布时间】:2014-03-27 15:01:12
【问题描述】:
我知道使用 FFmpeg 命令更改视频文件的帧速率会更容易。 但无论如何,如果我想用 C++ 代码来做,并使用 FFmpeg 库,我该怎么做呢?
我想我应该能够在源代码中找到线索。 在继续之前,我希望有一些好的介绍或例子。
【问题讨论】:
我知道使用 FFmpeg 命令更改视频文件的帧速率会更容易。 但无论如何,如果我想用 C++ 代码来做,并使用 FFmpeg 库,我该怎么做呢?
我想我应该能够在源代码中找到线索。 在继续之前,我希望有一些好的介绍或例子。
【问题讨论】:
这很简单,您只需修改视频流的 time_base 即可。对于简单的容器格式,例如 AVI,您只需要在标题中执行此操作。如果您坚持通过 ffmpeg API 执行此操作,则需要遍历输入流中的所有帧,并将它们复制到输出流。
以上假设您只想更改 FPS(即减慢或加快视频速度)而不丢帧。但是,如果您想在更改 FPS 的同时保持视频播放的原始速度,则需要重新编码视频,即解码和编码每一帧,同时插入额外的帧或删除一些帧。您不能简单地从视频中删除帧 - 例如,当从 30FPS 转换为 15FPS 时,您不能简单地删除每个第 2 帧,因为它可能是一个关键帧,它会破坏之后的所有帧,直到遇到下一个关键帧。同样,您不能在提高 FPS 时简单地复制一帧,因为 P 帧仅适用于它之前的帧,因此复制它会破坏您的视频。为此,我建议查看我的卡拉 OK 歌词编辑器源代码,特别是 video decoding 和 video encoding。
【讨论】: