如何将两个30fps视频合并为60fps视频并交替取帧?
用FFmpeg快速实现双30fps视频交错生成60fps视频
不需要导出所有帧浪费空间,直接用FFmpeg的滤镜就能高效完成,核心是利用interleave滤镜实现帧交替,再强制输出60fps。
基础命令(仅处理视频)
如果不需要保留音频,或者两个视频都没有音频,用这条命令:
ffmpeg -i inputA.mp4 -i inputB.mp4 -filter_complex "[0:v][1:v] interleave, fps=60" -c:v libx264 -crf 23 output.mp4
[0:v][1:v] interleave:把两个输入视频的帧按顺序交错合并(A1→B1→A2→B2...)fps=60:将输出视频的帧率锁定为60fps,刚好匹配交错后的帧密度-c:v libx264 -crf 23:用H.264编码输出,CRF23是兼顾画质和体积的默认参数,数值越小画质越好(范围0-51)
带音频的处理方案
保留其中一个视频的音频
比如只保留视频A的音频:
ffmpeg -i inputA.mp4 -i inputB.mp4 -filter_complex "[0:v][1:v] interleave, fps=60" -c:a copy -map 0:a output.mp4
-c:a copy:直接复制音频流,避免重新编码损耗-map 0:a:指定取第一个输入(视频A)的音频
混合两个视频的音频
如果需要同时保留两个视频的音频并混合:
ffmpeg -i inputA.mp4 -i inputB.mp4 -filter_complex "[0:v][1:v] interleave, fps=60; [0:a][1:a] amix=inputs=2:duration=longest" -c:v libx264 -crf 23 output.mp4
amix=inputs=2:duration=longest:混合两个音频流,以较长的音频时长为准
注意事项
- 确保两个输入视频的分辨率、帧率一致,否则FFmpeg会自动调整,但如果分辨率差异大,建议先统一分辨率,比如把视频B缩放到和A一样的尺寸:
把ffmpeg -i inputA.mp4 -i inputB.mp4 -filter_complex "[1:v] scale=1920:1080 [b]; [0:v][b] interleave, fps=60" -c:v libx264 -crf 23 output.mp41920:1080替换成视频A的实际分辨率即可。 - 如果两个视频长度不一致,最终输出视频的长度会以较短的那个为准,或者可以用
trim滤镜裁剪较长的视频,保持同步。
内容的提问来源于stack exchange,提问作者Levi_OP
相关产品推荐
相关产品推荐

