我也遇到了同样的问题,使用选择过滤器对我不起作用,而且大型视频的使用速度非常慢,所以我在 python 中使用了这个脚本
它的作用是以秒为单位获取持续时间,根据屏幕截图的数量计算间隔,最后在输入文件之前使用 seek 在每个间隔截取屏幕截图
#!/usr/bin/python3
import re
from os import makedirs
from os.path import basename, join, dirname, isdir
from sys import argv, exit
from subprocess import call, run, Popen, PIPE, STDOUT, CalledProcessError
from ffmpy3 import FFmpeg, FFRuntimeError, FFExecutableNotFoundError
argv.pop(0)
for ifile in argv:
#Get video info
duration = run(['ffprobe', '-hide_banner', '-i', ifile], stderr=PIPE, universal_newlines=True)
#Extract duration in format hh:mm:ss
duration = re.search(r'Duration: (\d{2}:\d{2}:\d{2}\.\d{2})', duration.stderr)
#Convert duration to seconds
duration = sum([a*b for a,b in zip([3600, 60, 1],
[float(i) for i in duration.group(1).split(':')])])
#Get time interval to take screenshots
interval = int (duration / 20)
fname = basename(ifile)[:-4]
odir = join(dirname(ifile),fname)
if not isdir(odir):
makedirs(odir, mode=0o750)
ofile = join(odir,fname)
#Take screenshots at every interval
for i in range (20):
run([])
ff = FFmpeg(
global_options='-hide_banner -y -v error',
inputs={ifile: f'-ss {i * interval}'},
outputs={f'{ofile}_{i:05}.jpg': f'-frames:v 1 -f image2'}
)
ff.run()