【问题标题】:ffmpeg keyframe extractionffmpeg关键帧提取
【发布时间】:2012-09-27 02:08:38
【问题描述】:

我一直在尝试使用 ffmpeg 0.11.1 从视频中提取关键帧。到目前为止,我尝试过的所有命令都没有提取关键帧,而是返回所有帧,即 25fps* 输出中帧的总时间数。 我尝试将 keyint_min 设置为 25,以确保每秒最多 1 个关键帧。

ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -g 250 -keyint_min 25 -i C:\test.mp4 -vsync 2 -f image2 C:\testTemp\thumbnails-%02d.jpeg

但仍然返回所有帧。

然后我尝试将关键帧分开 20 秒。

ffmpeg -i C:\test.mp4 -vf select='eq(pict_type\,I)*(isnan(prev_selected_t)+gte(t-prev_selected_t\,20))' -vsync 0 -f image2 C:\testTemp\%09d.jpg

同样的结果,返回所有的帧。

我该怎么办?

【问题讨论】:

    标签: ffmpeg keyframe


    【解决方案1】:

    在您的第一个命令中,您使用过滤器作为输入选项。我不知道 ffmpeg 会如何解释。

    试试这个:

    ffmpeg -i C:\test.mp4 -vf select='eq(pict_type\,I)',setpts='N/(25*TB)' C:\testTemp\%09d.jpg
    

    25 更改为源的帧速率:NTSC 视频为 30000/1001,NTSC 电影为 24000/1001,PAL 为 25,等等。

    使用-q:v-qscale:v 选项(在旧的ffmpeg 中称为-qscale)控制输出质量。 mpeg* 的范围是 1-31,其中 31 是最差的质量。

    下次记得在 superuser.com 上询问 ffmpeg 使用问题,因为 stackoverflow 专门用于编程。

    【讨论】:

    • 您好,谢谢,但我收到错误使用 args 初始化过滤器选择时出错。打开和关闭 ' 的数量不相等,所以我尝试将选择部分更改为 select='eq(pict_type\,I),setpts=N/(25*TB)' & 然后 select='eq(pict_type\,I ),setpts='N/(25*TB)'' 但是都返回了同样的错误
    • 对不起。糟糕的粘贴工作。我更新了命令,但目前无法测试。
    • 我得到:缺少 ')' 或 'eq(pict_type\,I)' 中的 args 太多,然后在解析表达式 'eq(pict_type\,I)' 时出现另一个错误作为错误跨度>
    • 作为记录,该命令适用于我在 0.11.1 的 OS X 上。 /cc @shi
    • 我使用的是 Windows 8 RP。我查了ffmpeg.org/pipermail/ffmpeg-user/2011-November/003266.html 并意识到如果我不在 eq(pict_type\,I) 中写 '\' ,即我写 eq(pict_type,I) 它就像一个魅力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    相关资源
    最近更新 更多