如何在保持原始宽高比的同时连接多个视频?我认为有两种方法可以做到这一点。要么按比例缩放视频,要么用一个命令将它们连接在一起。目前,我正在使用以下命令
ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "[0]scale=iw*sar:ih,setsar=1[ref];[1][ref]scale2ref=w=oh*mdar:h=ih[s][v0];[s]pad=1024:576:(ow-iw)/2:(oh-ih)/2,setsar=1[v1];[v0][0:a:0][v1][1:a:0]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" out.mp4
在上面的示例中,参考视频(1.mp4)为720x576 [SAR 64:45 DAR 16:9]。这对于连接2个视频非常有用,但我不知道如何使其更加动态。
那么我如何使以上命令适用于3个视频?缩放和1或1串联在一起。
答案 0 :(得分:-1)
即使可以直接使用ffmpeg这样做,但我还是建议不要这样做,因为它变得非常复杂,并且很难通过多个输入进行维护。
您可以分别使用相关填充将每个视频缩放到所需的分辨率,然后将视频连接到一个文件。
像TransportStream(ts
)这样的容器可以使用简单的cat
命令进行连接,如下所示:
input_dir="${1:-.}"
target_width=720
target_height=576
for input in $(ls "$input_dir" | grep '\.mp4'); do
# use your ffmpeg command to normalize to $target_width $target_height
ffmpeg \
-i "$input" \
-vf "scale=w=${target_width}:h=${target_height}:force_original_aspect_ratio=1,pad=${target_width}:${target_height}:(ow-iw)/2:(oh-ih)/2" \
"out_${input%\.*}.ts"
done
# concatenate the files to one big .ts - ORDER MATTERS!
cat out_1.ts out_2.ts > combined.ts
# convert to a different container if needed
ffmpeg -i combined.ts -c copy combined.mp4
您应该得到combined.mp4
,所有视频都依次播放并缩放到正确的分辨率