假如我有一个100秒的视频,想生成一个10秒预览视频,我对ffmpeg不熟悉,首先想到的是,把100秒分成10段,每段取前面一秒,也就是
0~1
10~11
20~21
....
90~91
得到10个1秒的片段,再合并一个10秒视频
但是这样要执行 11 次命令,如果换个视频,每次都要计算片段时间,
有没有像 select='not(mod(n\,x))'
这样每多少秒或者每多少帧,就截取1秒视频,最后合并到一个视频的命令
@zxdposter
的回答已经解决了问题,后来我又想了下,还可以用 select='lt(mod(t, X),Y)
的方式
假设源视频长度为 1420
秒,要平均10个1秒视频,把视频平均分为10段,每段是142秒
取每一段开头那秒,也注是 select='lte(mod(t, 142),1)'
,如果要到每段中间,可结合 lt
,gt
做比较
生成预览视频完整命令
./ffmpeg.exe -i 'input.mp4' -vf "select='lte(mod(t, 142),1)',scale=-1:240,setpts=N/FRAME_RATE/TB" -an -y preview.ts
scale=-1:240
是把预览视频高设为 240 宽度为-1
自适应-an
删除声音
你可以这样做,来自于stackoverflow。
参数什么的,你可以自己写一小段命令拼就行了。