快速从多个视频中提取多个帧

时间:2019-05-11 09:27:59

标签: bash performance video ffmpeg

我有一个包含视频文件的文件夹,并且需要使用Linux上的bash脚本从每个文件中提取2个以上的帧。目前,我正在循环处理每个视频文件:

ffmpeg -nostdin -loglevel fatal -ss 15 -i "${filename}" -frames:v 1 "${out1}"
ffmpeg -nostdin -loglevel fatal -sseof -15 -i "${filename}" -frames:v 1 "${out2}"

这将提取帧15s并从末尾提取另一个帧15s。对于N个视频文件,我需要2N个ffmpeg调用。我按照here的要求进行了-vf select的实验,但这要慢得多,尤其是要求从头到尾选择帧时。另外,我已经在使用GNU parallel,这有很大的不同。

性能实际上还不错。但是我的问题是,这可以进一步改善吗?我希望找到一种方法

  • 在一个ffmpeg调用中提取两个帧(比两个单独的调用快),或者
  • 每个调用要向ffmpeg提供多个文件(以减少进程启动开销)

1 个答案:

答案 0 :(得分:2)

您可以多次提取同一输入,也可以在同一命令中提取多个输入。

基本命令结构是

ffmpeg -nostdin -loglevel fatal
       -ss 15     -i "${filename}"
       -sseof -15 -i "${filename}"
       -ss 15     -i "${filename2}"
       -sseof -15 -i "${filename2}"
       -map 0:v:0 -frames:v 1 "${file1-head}"
       -map 1:v:0 -frames:v 1 "${file1-tail}"
       -map 2:v:0 -frames:v 1 "${file2-head}"
       -map 3:v:0 -frames:v 1 "${file2-tail}"
...

我怀疑这会导致一小部分文件的大改进。