输出由输入视频的多个视频块组成的视频

输出由输入视频的多个视频块组成的视频

我想知道是否可以输出由输入视频的多个片段组成的视频。例如,输出由输入的每一分钟的前 10 秒组成的视频。

我知道您可以通过编程方式执行此操作,ffmpeg使用 -ss 和 -t 调用多次来创建块然后合并它们,但是是否可以使用视频过滤器在一个命令中执行此操作?

答案1

解决了!这是最终的解决方案:

每分钟的前 2 秒,音频和视频。

ffmpeg -i fullmovie.mp4 
-vf "select='gte(mod(t\,60),0)*lte(mod(t\,60),2)',setpts='N/(FRAME_RATE*TB)'" 
-vcodec libx264  -crf 23 -acodec libfaac -ac 1 -ab 56k 
-af "aselect='gte(mod(t\,60),0)*lte(mod(t\,60),2)',asetpts='N/(SAMPLE_RATE*TB)'" trailer.mp4
  • 选择过滤器评估每个输入帧的表达式,如果结果为 0,则丢弃它,如果结果为 1,则保留它
  • 我的表达式在每分钟的前 2 秒返回 1
  • setpts 根据帧/样本的数量和帧率/采样率修改每个帧/样本的 PTS

答案2

不,目前这还不可能。您必须编写一个脚本,使用给定的和选项ffmpeg多次调用- 至少这是最直接的方法。-ss-t

不要忘记位置很-ss重要:

当用作输入选项(在 -i 之前)时,在此输入文件中搜索位置。当用作输出选项(在输出文件名之前)时,解码但丢弃输入,直到时间戳到达位置。这较慢,但更准确。

我本来想说你可以使用select过滤器,它允许你评估诸如“仅选择 10 到 20 秒之间的帧”之类的表达式,但如果不复制帧并产生正确(即剪切)的输出,我就无法让它工作。

相关内容