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

标签 video ffmpeg

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

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

最佳答案

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

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

关于video - FFmpeg:如何使用 C++ 代码更改视频文件的帧速率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22643769/

相关文章:

javascript - 如何停止透​​明的 iframe 覆盖覆盖视频

javascript - HTML5 视频自定义附加搜索栏

android - 如何在 Android Studio 中使用预构建的 FFmpeg

ffmpeg concat 在输出流中给出非单调 DTS

java - 用Java和ffmpeg查找视频的长度

opencv - C++ 中的 h264 到 MP4 文件容器

video - 如何在使用 ffmpeg libavformat 将 VP8 RTP 流复用到 webm 时从 RTP 时间戳设置 AVPacket 的 pts 和 dts?

android - 如何使用Intent捕获视频并设置录制路径和限制录制时间

javascript - 如何在HTML页面中播放视频

numpy - FFmpeg 正在减慢输出视频的速度,我不知道为什么