ffmpeg吧 关注:1,277贴子:4,575
  • 3回复贴,共1

ffmpeg批量合并视频音频出现问题

只看楼主收藏回复

如图,想把文件夹内每个视频和文件夹内的mp3合并在一起,并且需要切割mp3时长跟每个视频时长相同后再合并。
用deepseek给生成的代码。
但是那个获取视频持续时间t一直报错,报错代码反馈给deepseek重新生成的新代码也不行。
有大神知道问题出在哪吗?



IP属地:陕西1楼2025-02-20 19:18回复
    批处理属于难度超级加倍。用MKVToolNix GUI 简单些。
    要是高级语言,用调试功能,跟踪字符串分割后存入变量的数据,走一遍。
    或者用正则表达式匹配准确些,过滤掉很多意外情况,提高容错能力。例如视频标题内含有Duration字符串,触发分割异常。


    IP属地:浙江2楼2025-02-20 22:13
    回复
      可以一个一个手工搞吗?批量的话极大可能欲速则不达……就比如你用Duration关键字去查询视频时长,你可以随便打开一个视频文件头看看,连在一起的duration信息都有四五个,用不同方式精度描述时长……另外手动的话,音频去匹配视频 ,那么你可能需要剪接音频先将音视频开头对齐,然后音频文件“-i”加载后使用音频滤镜调整音频长度匹配视频:-af "atempo=音频时长/视频时长",注意这个改变范围从0.5倍到2倍,超过会报错。比如视频2秒钟,音频1秒钟,那么:-af "atempo=1/2"。再比如视频1秒钟,音频2秒钟,那么:-af "atempo=2/1"。两个例子,前者就是下限,后者就是上限。


      IP属地:云南3楼2025-02-21 01:54
      回复
        已解决,代码如下,需要的可改为自己的路径或者名称
        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


        IP属地:陕西4楼2025-02-21 07:21
        回复