如何用FFmpeg将裁剪视频与原未裁剪视频重新合并?
解决方案
直接使用ffmpeg的视频叠加滤镜,将处理后的裁剪视频放回原视频的对应位置,并指定使用裁剪视频的音频,具体命令如下:
ffmpeg -i file.mp4 -i smaller.mp4 -filter_complex "[0:v][1:v]overlay=580:0[v]" -map "[v]" -map 1:a -c:v libx264 -crf 20 -preset slow output.mp4
关键参数解释:
-filter_complex "[0:v][1:v]overlay=580:0[v]":把裁剪后的视频(第二个输入的视频流)叠加到原视频(第一个输入的视频流)的x=580、y=0位置——这和你当初裁剪时的起始坐标完全对应,确保位置准确,最终合成新的视频流标记为[v]-map "[v]":输出时采用合成后的完整画面-map 1:a:输出时直接使用裁剪后视频的音频流-c:v libx264 -crf 20 -preset slow:和你裁剪时的编码参数保持一致,保证输出画质和编码效率
特殊情况处理(若裁剪视频时长与原视频不匹配):
如果你之前对裁剪后的视频做了加速处理,导致其时长和原视频对应片段不一致,需要先调整裁剪视频的时长匹配原视频:
# 示例:假设原裁剪片段时长是10秒,加速后变成5秒,需要减速2倍匹配原时长 ffmpeg -i smaller.mp4 -filter:v "setpts=2*PTS" -c:a atempo=0.5 slowed_smaller.mp4
之后将上述主命令中的smaller.mp4替换为slowed_smaller.mp4即可。
内容的提问来源于stack exchange,提问作者Skyler
相关产品推荐
相关产品推荐

