ffmpeg批量合并视频音频出现问题
ffmpeg吧
全部回复
仅看楼主
level 1
ndswjº 楼主
如图,想把文件夹内每个视频和文件夹内的mp3合并在一起,并且需要切割mp3时长跟每个视频时长相同后再合并。
用deepseek给生成的代码。
但是那个获取视频持续时间t一直报错,报错代码反馈给deepseek重新生成的新代码也不行。
有大神知道问题出在哪吗?
2025年02月20日 11点02分 1
level 7
批处理属于难度超级加倍。用MKVToolNix GUI 简单些。
要是高级语言,用调试功能,跟踪字符串分割后存入变量的数据,走一遍。
或者用正则表达式匹配准确些,过滤掉很多意外情况,提高容错能力。例如视频标题内含有Duration字符串,触发分割异常。
2025年02月20日 14点02分 2
level 1
可以一个一个手工搞吗?批量的话极大可能欲速则不达……就比如你用Duration关键字去查询视频时长,你可以随便打开一个视频文件头看看,连在一起的duration信息都有四五个,用不同方式精度描述时长……另外手动的话,音频去匹配视频 ,那么你可能需要剪接音频先将音视频开头对齐,然后音频文件“-i”加载后使用音频滤镜调整音频长度匹配视频:-af "atempo=音频时长/视频时长",注意这个改变范围从0.5倍到2倍,超过会报错。比如视频2秒钟,音频1秒钟,那么:-af "atempo=1/2"。再比如视频1秒钟,音频2秒钟,那么:-af "atempo=2/1"。两个例子,前者就是下限,后者就是上限。
2025年02月20日 17点02分 3
level 1
ndswjº 楼主
已解决,代码如下,需要的可改为自己的路径或者名称
REM 指定MP3音频文件
set "audio_file=E:\3hour audio.mp3"
REM 遍历当前文件夹中的所有mp4文件
for %%f in (*.mp4) do (
REM 提取文件名(不带扩展名)
set filename=%%~nf
REM 输出合并后的文件名
set output_file=!filename!_00.00.00merged.mp4
REM 调用ffmpeg进行合并,并以视频时长输出
ffmpeg -i "%%f" -i "%audio_file%" -c:v copy -c:a aac -shortest "!output_file!"
)
echo 合并完成!
pause
2025年02月20日 23点02分 4
1