如何合并两条FFmpeg命令实现视频循环并匹配音频循环时长
如何合并两条FFmpeg命令实现视频循环并匹配音频循环时长
嘿,我来帮你搞定这个FFmpeg的问题!你原来的两条命令完全可以合并成单条操作,而且还能扔掉那个麻烦的.txt文件,让音频自动循环匹配你想要的视频时长,不用手动写循环列表。
一、直接合并原有两条命令(保留.txt音频循环方式)
你原来的流程是先生成循环3小时的视频,再给它加循环音频。其实可以跳过中间文件output3h.m4v,直接在一条命令里完成所有操作:
ffmpeg -y -stream_loop -1 -i input.m4v -f concat -i text.txt -map 0:v -map 1:a -c:v copy -preset ultrafast -async 1 -t 10800 complete3h.m4v
简单解释下改动:
- 把第一条命令里的
-t 10800移到整个命令的末尾,用来指定最终输出的总时长(3小时) - 直接将循环的视频流和
.txt里的音频流合并,省去了生成中间文件的步骤,速度更快也更省磁盘空间
二、更优方案:不用.txt,让音频自动循环匹配视频时长
如果你的音频是单个文件(比如audio.mp3),完全不用写.txt列表,直接用FFmpeg的-stream_loop参数让音频无限循环,再用-t指定总时长,FFmpeg会自动让音视频都循环到3小时后停止:
ffmpeg -y -stream_loop -1 -i input.m4v -stream_loop -1 -i audio.mp3 -map 0:v -map 1:a -c:v copy -c:a copy -t 10800 complete3h.m4v
补充说明:
-stream_loop -1分别给视频和音频加上,代表无限循环输入源-c:v copy和-c:a copy是直接复制音视频流,全程不重新编码,速度超快- 如果你的音频格式和
m4v容器不兼容(比如用了MP3但输出容器要求AAC),可以把-c:a copy改成-c:a aac,让FFmpeg自动转码成兼容的音频格式 - 如果遇到音视频不同步的问题,可以加上
-async 1参数来强制同步
备注:内容来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

