如何提取第一帧并使用ffmpeg还原为图像?

lex*_*lex 30 flv ffmpeg

谁知道诀窍?

以及如何安装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
Run Code Online (Sandbox Code Playgroud)

jco*_*ctx 54

它位于联机帮助页:

* You can extract images from a video, or create a video from many
       images:

       For extracting images from a video:

               ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

       This will extract one video frame per second from the video and will
       output them in files named foo-001.jpeg, foo-002.jpeg, etc. Images
       will be rescaled to fit the new WxH values.

       If you want to extract just a limited number of frames, you can use
       the above command in combination with the -vframes or -t option, or in
       combination with -ss to start extracting from a certain point in time.

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

[更新其他问题]


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

经过测试和工作.

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


for flv in *.flv; do
 ffmpeg -i $flv -vframes 1 -f image2 ${flv%%.flv}.jpg
done
Run Code Online (Sandbox Code Playgroud)

  • 如何只提取.flv文件列表的第一帧? (3认同)
  • 可能,但你必须*作为一个问题*而不是作为评论来问它。 (2认同)

Dhi*_*pta 32

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

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

说明:

选择滤波器 -vf "select=eq(n\,0)"是只选择帧#0.

-q:v允许您将输出jpeg的质量设置在1到31之间.降低数量,提高质量.2 - 5效果很好,我使用3.

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

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

上面的命令将为您提供一个缩放jpeg,它将被缩放以匹配 320的宽度,并且将计算高度以匹配宽高比.

  • 这种方法不是最佳的,因为即使在转储第一帧之后它也会解码整个视频。@jcomeau_ictx 的答案是最佳答案。 (2认同)

hen*_*nry 26

一个对我有用的易于理解的解决方案是

ffmpeg -i <input> -vframes 1 <output>.jpeg
Run Code Online (Sandbox Code Playgroud)

请注意,我确实收到错误消息“[swscaler @ 0x111652000] 已弃用像素格式,请确保您正确设置了范围”,但根据一些阅读(参见例如/sf/answers/3012693631/)可以安全地忽略。


小智 8

这对我有用

ffmpeg -i sample-mp4-file.mp4 -ss 1 -vframes 1 output.jpg
Run Code Online (Sandbox Code Playgroud)

  • -ss 1 在这里是错误的,因为它会寻找第一秒而不是第一帧。 (7认同)