我想抓取视频中的最后一帧(.mpg,.avi,什么的),并将其转储到一个图像文件中(.jpg,.png,随便什么)。工具链是一个现代的Linux命令行,因此类似于mencoder、transcode、ffmpeg &c。
干杯,鲍勃。
发布于 2011-11-03 23:53:04
这不是一个完整的解决方案,但它将为您指明正确的道路。
使用ffprobe -show_streams IN.AVI获取视频输入中的帧数。然后
ffmpeg -i IN.AVI -vf "select='eq(n,LAST_FRAME_INDEX)'" -vframes 1 LAST_FRAME.PNG其中LAST_FRAME_INDEX是帧数减去1(帧为零索引),将输出最后一个帧。
发布于 2019-02-21 08:44:49
我有一个mp4 / h264 matroska输入视频文件。上面的解决方案对我都没有用。(虽然我确信它们适用于其他文件格式)。
将桑拉德以上的回答与这个伟大的答案相结合,并提出了这个工作代码
input_fn='output.mp4'
image_fn='output.png'
rm -f $image_fn
frame_count=`ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 $input_fn`
ffmpeg -i $input_fn -vf "select='eq(n,$frame_count-1)'" -vframes 1 "$image_fn" 2> /dev/null发布于 2015-02-18 09:51:09
我无法找到纳尔逊的解决方案。这对我有用。https://gist.github.com/samelie/32ecbdd99e07b9d8806f
编辑(万一链接消失,下面是shellscript脚本-bobbogo):
#!/bin/bash
fn="$1"
of=`echo $1 | sed s/mp4/jpg/`
lf=`ffprobe -show_streams "$fn" 2> /dev/null | grep nb_frames | head -1 | cut -d \= -f 2`
rm -f "$of"
let "lf = $lf - 1"
ffmpeg -i $fn -vf select=\'eq\(n,$lf\) -vframes 1 $ofhttps://stackoverflow.com/questions/5248283
复制相似问题