ffmpeg 是否合并行车记录仪 mp4 视频并修剪最后一秒?

ffmpeg 是否合并行车记录仪 mp4 视频并修剪最后一秒?

我有一个行车记录仪(台湾制造),它生成的视频正好是 5 分 1 秒,最后 1 秒是下一个视频前 1 秒的重复。

我想剪切每个视频的最后一秒,然后将它们全部合并,并使用优化压缩将 1080p 下采样到 720p。

我如何使用 ffmpeg 来实现这一点?提前致谢!

答案1

步骤1

从长度恰好为 5 分 1 秒的文件中截掉最后一秒。

ffmpeg -i "input.mp4" -t 300 -c copy "input-5m.mp4"

第2步

合并文件并缩小至 720p

1)创建一个文本文件,按顺序包含所有修剪文件的列表,如下所示

file 'input1-5m.mp4'
file 'input2-5m.mp4'
file 'input3-5m.mp4'
...
file 'inputn-5m.mp4'

2)合并压缩

ffmpeg -f concat -i "list.txt" -vf scale=1280x720,setsar=1 -sws_flags lanczos -c:v libx264 -crf 23 -c:a aac "merged-720p.mp4"

如果您使用的是旧版本的 ffmpeg,则可能必须插入-strict -2以跳过较旧的 VisualOn AAC 编码器。


如果你想跳过步骤1,然后您可以使用下面的命令执行第2步

ffmpeg -f concat -i "list.txt" -vf "select='(gte(mod((t\),301),0)*lt(mod((t\),301),300))',scale=1280x720,setsar=1,setpts=N/TB/FRAME_RATE" -af "aselect='(gte(mod((t\),301),0)*lt(mod((t\),301),300))',asetpts=N/SR/TB" -sws_flags lanczos -c:v libx264 -crf 23 -c:a aac "merged-720p.mp4"

但是如果任何输入文件的时间戳具有不规则模式,则此方法将无法正常工作。


使用新concatdec_select标志,也可以按如下方式执行此操作

1)生成文本文件,如上所述,但指定输入/输出点:

file 'input1.mp4'
outpoint 300
file 'input2.mp4'
outpoint 300
file 'input3.mp4'
outpoint 300
...
file 'inputn.mp4'
outpoint 300   

2)合并压缩

ffmpeg -f concat -i "list.txt" -vf "select=concatdec_select,scale=1280x720,setsar=1,setpts=N/TB/FRAME_RATE" -af "aselect=concatdec_select,asetpts=N/SR/TB" -sws_flags lanczos -c:v libx264 -crf 23 -c:a aac "merged-720p.mp4"

此方法的缺点是选择截止可能不精确,除非在帧内编码流中。

答案2

Jeff Geerling 的脚本自动执行 Mulvya 的大部分回答。通过设置 禁用脚本的时间压缩SPEEDUP="1.0",并通过设置 跳过剪辑之间恰好 1 秒的重叠。在最后一行的命令中添加TRIM_AMOUNT="01.00"类似选项。-vf scale=1280x720ffmpeg

相关内容