Fastest way to extract frames using ffmpeg?

前端 未结 7 1457
礼貌的吻别
礼貌的吻别 2020-12-07 07:20

Hi I need to extract frames from videos using ffmpeg.. Is there a faster way to do it than this:

ffmpeg -i file.mpg -r 1/1 $filename%03d.jpg
<
7条回答
  •  北海茫月
    2020-12-07 07:43

    Came across this question, so here's a quick comparison. Compare these two different ways to extract one frame per minute from a video 38m07s long:

    time ffmpeg -i input.mp4 -filter:v fps=fps=1/60 ffmpeg_%0d.bmp
    

    1m36.029s

    This takes long because ffmpeg parses the entire video file to get the desired frames.

    time for i in {0..39} ; do ffmpeg -accurate_seek -ss `echo $i*60.0 | bc` -i input.mp4   -frames:v 1 period_down_$i.bmp ; done
    

    0m4.689s

    This is about 20 times faster. We use fast seeking to go to the desired time index and extract a frame, then call ffmpeg several times for every time index. Note that -accurate_seek is the default , and make sure you add -ss before the input video -i option.

    Note that it's better to use -filter:v -fps=fps=... instead of -r as the latter may be inaccurate. Although the ticket is marked as fixed, I still did experience some issues, so better play it safe.

提交回复
热议问题