FFmpeg循环播放视频序列直至音频结束的命令修复请求
FFmpeg循环视频并匹配音频时长的修复方案
问题
需要实现视频按0.mp4→1.mp4→2.mp4顺序循环播放,直到音频文件结束;原命令播放完3个视频后停留在第3个视频,无法继续循环。
修复后的完整命令
ffmpeg -y -i "video\0.mp4" -i "video\1.mp4" -i "video\2.mp4" -i audio.m4a \ -filter_complex " # 让每个视频源无限循环 [0:v]loop=loop=-1:size=1[v0]; [1:v]loop=loop=-1:size=1[v1]; [2:v]loop=loop=-1:size=1[v2]; # 0→1的转场(保留原命令参数) [v0][v1]xfade=transition=wipeleft:duration=1:offset=9[v01]; # 1→2的转场(保留原命令参数) [v01][v2]xfade=transition=wipeleft:duration=1:offset=18[v012]; # 2→0的转场,形成循环链路(offset按原命令节奏设置,若视频时长不同需调整) [v012][v0]xfade=transition=wipeleft:duration=1:offset=27[vloop]; # 截取与音频时长完全匹配的视频片段 [vloop]trim=duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 audio.m4a)[v]; " \ -map "[v]" -map 3:a -c:v libx264 -r 30 -pix_fmt yuv420p -c:a aac ./out_fade_loop.mp4
关键调整说明
- 循环视频源:通过
loop=-1:size=1让每个视频无限重复,保证循环时能重新调用原视频文件 - 补全循环转场:新增
2.mp4→0.mp4的转场逻辑,形成完整的循环播放链,offset=27是按原命令的9秒视频+1秒转场节奏计算的,若你的视频时长不同,需对应修改这个值 - 同步音频时长:用
ffprobe自动读取音频时长,再通过trim滤镜截取对应长度的循环视频,确保视频和音频完全同步
内容的提问来源于stack exchange,提问作者Khuê Bùi
相关产品推荐
相关产品推荐

