【问题标题】:C++/C extract specific frame from video fileC++/C 从视频文件中提取特定帧
【发布时间】:2022-03-16 22:42:12
【问题描述】:

正如标题所说,我想从视频文件中提取某些帧。现在我可以使用 FFmpeg 命令行工具来做到这一点。

ffmpeg -i in_video.avi -vf "select=gte(n\,100)" -vframes 1 out_img.png

但是我不能直接使用 FFmpeg 命令行工具。 那么我可以在 C/C++ 中提取特定帧吗?

【问题讨论】:

    标签: video ffmpeg


    【解决方案1】:

    Here 是来自 FFmpeg 的用于解码视频的样本。只需修改它,这样您就无需将所有帧都写入输出视频文件,而只需寻找所需帧的位置,然后解码该单个帧并将其写入文件。如需寻求,请查看av_seek_frame。查找的技巧是它需要 pts,但您可以通过获取流的时间基并乘以帧索引来从帧索引中获取 pts。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,我做了很多工作,但我现在已经直接使用 ffmpeg 库在 C++ 中实现了一个帧提取功能(在 QT 框架内,但它仍然应该对普通 C++ 有所帮助)。

      在我的项目 Video simili duplicate clean Video.cpp 文件中查看函数QImage Video::ffmpegLib_captureAt(const int percent, const int ofDuration),它应该是一个不言自明的例子:https://github.com/theophanemayaud/video-simili-duplicate-cleaner/blob/master/QtProject/app/video.cpp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-29
        • 2013-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多