【问题标题】:libavfilter thumbnail seems to only process first set of N frameslibavfilter 缩略图似乎只处理第一组 N 帧
【发布时间】:2012-08-16 20:54:55
【问题描述】:

根据文档(见下文),“-vf 缩略图”应处理 N 帧的批次并从每批次中选择 1 帧,但事实并非如此。难道我做错了什么?我还尝试了使用“-vframes 5”和“out%d.png”的各种选项,但同一帧重复了很多次,但它确实处理了多批 N 帧。

8.37 缩略图

在给定的连续帧序列中选择最具代表性的帧。

它接受要分析的帧批量大小作为参数(默认 N=100);在一组 N 帧中,过滤器会选择其中一个,然后处理下一批 N 帧,直到结束。

由于过滤器会跟踪整个帧序列,因此较大的 N 值会导致较高的内存使用率,因此不建议使用较高的值。

以下示例每 50 帧提取一张图片:

缩略图=50

使用 ffmpeg 创建缩略图的完整示例:

ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    你需要再设置一个参数-vsync(设置为0或2),否则muxer得到错误的帧,因为默认-vsync=1

    例如,正确的命令是

    ffmpeg -i INPUT_FILE -vsync 0 -vf thumbnail,scale=300:200 -frames:v 20 -f image2 img-%04d.jpg
    

    就我而言,我使用 I-frame 选择器而不是缩略图过滤器 - 它会生成更多文件,但它更适合我的目的。 这是带有时间戳的示例,首先我们必须从文件中找出正确的 fps(这是 Mac OS X grep 方言)来设置 r= 的值

    ffmpeg -i INPUT_FILE 2>&1 | grep -Po "[^\s]+\sfps"
    

    另外你需要选择你自己的字体文件,我使用 Mac OS X 文件

    现在一切就绪(例如保存前 20 个 I 帧)

    ffmpeg -i INPUT_FILE -someq -vsync 0 -vf \
    drawtext="fontfile=/Library/Fonts/Courier\ New.ttf: \
    timecode='00\:00\:00\:00':r=23.98: fontcolor=0xFFFFFFFF:fontsize=18:\
    shadowcolor=0x000000EE:shadowx=1:shadowy=1",select='eq(pict_type\,I)'\
    -vframes:v 20 -f image2 img-%04d.jpg
    

    (奇怪,\-spitted 行出现错误,但都在一行中运行)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-19
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多