Dump last frame of video file using ffmpeg/mencoder/transcode et. al

筅森魡賤 提交于 2019-12-18 14:18:15

问题


I'd like to grab the last frame in a video (.mpg, .avi, whatever) and dump it into an image file (.jpg, .png, whatever). Toolchain is a modern Linux command-line, so things like mencoder, transcode, ffmpeg &c.

Cheers, Bob.


回答1:


This isn't a complete solution, but it'll point you along the right path.

Use ffprobe -show_streams IN.AVI to get the number of frames in the video input. Then

ffmpeg -i IN.AVI -vf "select='eq(n,LAST_FRAME_INDEX)'" -vframes 1 LAST_FRAME.PNG

where LAST_FRAME_INDEX is the number of frames less one (frames are zero-indexed), will output the last frame.




回答2:


I couldn't get Nelson's solution to work. This worked for me. https://gist.github.com/samelie/32ecbdd99e07b9d8806f

EDIT (just in case the link disappears, here is the 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 $of



回答3:


I have a mp4 / h264 matroska input video file. And none of the above solutions worked for me. (Although I sure they work for other file formats).

Combining samrad's answer above and also this great answer and came up with this working code:

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



回答4:


One thing I have not seen mentioned is that the expected frame count can be off if the file contains dupes. If your method of counting frames is causing your image extraction command to come back empty, this might be what is mucking it up.

I have developed a short script to work around this problem. It is posted here.



来源:https://stackoverflow.com/questions/5248283/dump-last-frame-of-video-file-using-ffmpeg-mencoder-transcode-et-al

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!