【问题标题】:How to extract the 1st frame and restore as an image with ffmpeg?如何提取第一帧并使用ffmpeg恢复为图像?
【发布时间】:2010-12-13 02:38:16
【问题描述】:

有人知道诀窍吗?

以及如何安装 ffmpeg ? yum install mpeg 只返回这个:

======================================================================================== Matched: mpeg ========================================================================================
libiec61883.i386 : Streaming library for IEEE1394
libiec61883.x86_64 : Streaming library for IEEE1394
qffmpeg-devel.i386 : Development package for qffmpeg
qffmpeg-devel.x86_64 : Development package for qffmpeg
qffmpeg-libs.i386 : Libraries for qffmpeg
qffmpeg-libs.x86_64 : Libraries for qffmpeg

【问题讨论】:

    标签: ffmpeg flv


    【解决方案1】:

    我从各种答案中拼凑出这个命令行,这对我从视频中获得绝对第一帧非常有用。我用它来保存视频的缩略图。

    ffmpeg -i inputfile.mkv -vf "select=eq(n\,0)" -q:v 3 output_image.jpg
    

    解释:

    select filter-vf "select=eq(n\,0)" 是只选择帧#0。

    -q:v 允许您在 1 到 31 之间设置输出 jpeg 的质量。数字越小,质量越高。 2 - 5 好用,我用 3。

    注意:这将为您提供与视频大小相同的图像。要获得缩略图,您可以使用缩放过滤器来获得适合您所需宽度的缩略图,如下所示:

    ffmpeg -i inputfile.mkv -vf "select=eq(n\,0)" -vf scale=320:-2 -q:v 3 output_image.jpg
    

    上面的命令会给你一个缩略图 jpeg,它将被缩放到 match 宽度为 320,并且高度将被计算以匹配纵横比。

    【讨论】:

    • 不过,有趣的是,它总是返回一个错误,指出它无法将图像取出,而退出代码反映了这一点。但是,图像就在那里......你也有这个问题吗?
    • 其实不。实际上,我正在使用此命令通过 Node 和/或 PHP 运行,并且在这两种情况下,命令都成功完成,据我所知,因为(至少在 Node 中)退出代码用于表示成功运行或不是。
    • 对我来说,它没有保持视频的纵横比并输出方形图像
    • @DhirajGupta 我收到缩放命令错误“无法从模式'output_image2.jpg'获取帧文件名编号2(设置updatefirst或在文件名模式中使用%03d之类的模式)av_interleaved_write_frame (): 无效参数”
    • 这种方法并不理想,因为即使在转储第一帧后它也会解码整个视频。 @jcomeau_ictx 的答案是最佳答案。
    【解决方案2】:

    一个适合我的易于理解的解决方案是

    ffmpeg -i <input> -vframes 1 <output>.jpeg
    

    请注意,我确实收到了一个错误“[swscaler @ 0x111652000] 已弃用像素格式,请确保您确实设置了正确的范围”,但根据一些可以安全忽略的读数(例如,参见 https://stackoverflow.com/a/43038480/1241736)。

    【讨论】:

    • 接受的答案对我不起作用,得到了Error initializing filter 'select' with args 'eq(n',但可能是我的格式问题。你的回答很好!
    • 工作速度比这里提出的其他解决方案快很多
    【解决方案3】:

    它在手册页上:

    * 您可以从视频中提取图像,或从多个视频中创建视频 图片: 从视频中提取图像: ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg 这将从视频中每秒提取一个视频帧,并将 将它们输出到名为 foo-001.jpeg、foo-002.jpeg 等的文件中。 将重新调整以适应新的 WxH 值。 如果您只想提取有限数量的帧,您可以使用 上述命令结合 -vframes 或 -t 选项,或在 结合 -ss 从某个时间点开始提取。

    当然你必须先安装它。我在 Debian 上,不使用 yum。

    [更新另一个问题]

    
    i=1
    for avi in *.avi; do
     ffmpeg -i $avi -vframes 1 -f image2 /tmp/$i.jpg; i=$((i+1))
    done
    

    经过测试并且有效。

    [更新另一个问题...]

    
    for flv in *.flv; do
     ffmpeg -i $flv -vframes 1 -f image2 ${flv%%.flv}.jpg
    done
    

    【讨论】:

    • 如何只提取 .flv 文件列表的第一帧?
    • 对不起,我的 .flv 文件列表是由 a.flv,b.flv... 之类的东西指定的,我想保存与 flv 文件同名的图像..
    • 从这里开始。是否可以从第一帧开始以 1fps 的速度将视频转换为图像?设置 fps = 1 从 1s 开始
    • 可能,但您必须作为问题提出,而不是作为评论。
    【解决方案4】:

    对我有用

    ffmpeg -i sample-mp4-file.mp4 -ss 1 -vframes 1 output.jpg
    

    【讨论】:

    • 这里的 -ss 1 是错误的,因为它会寻找第一帧而不是第一帧。
    猜你喜欢
    • 1970-01-01
    • 2020-05-18
    • 2012-08-07
    • 2016-04-19
    • 2020-08-31
    • 2013-02-06
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多