You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用FFmpeg批量一对一合并两个文件夹中的音视频文件

解决Windows批处理中按顺序配对合并视频和音频文件的问题

你的问题核心在于两个文件夹内的文件名不匹配,没法直接用同一个循环变量关联视频和音频文件。要实现按字母顺序一对一合并,我们需要先分别收集两个文件夹的文件列表,再通过索引一一配对处理。下面是完整的解决方案:

批处理脚本实现步骤

1. 启用延迟扩展

批处理中在循环内读取动态变量需要开启延迟扩展,否则无法正确获取数组中的值。

2. 收集按字母排序的文件列表

分别遍历Video和Audio文件夹,将文件名按顺序存入"数组"变量中(批处理没有真正的数组,用带索引的变量模拟)。

3. 检查文件数量一致性

确保两个文件夹的文件数量相同,避免出现配对错误。

4. 循环配对合并

通过索引循环,取出对应位置的视频和音频文件,执行FFmpeg合并命令。


完整批处理代码

@echo off
setlocal enabledelayedexpansion

:: 创建Merged文件夹(如果不存在)
if not exist ".\Merged" mkdir ".\Merged"

:: 收集Video文件夹中按字母排序的.mkv文件
set "vid_count=0"
for /f "delims=" %%f in ('dir /b /on .\Video\*.mkv') do (
    set "vid_files[!vid_count!]=%%f"
    set /a vid_count+=1
)

:: 收集Audio文件夹中按字母排序的.avi文件
set "aud_count=0"
for /f "delims=" %%f in ('dir /b /on .\Audio\*.avi') do (
    set "aud_files[!aud_count!]=%%f"
    set /a aud_count+=1
)

:: 检查文件数量是否匹配
if !vid_count! neq !aud_count! (
    echo 错误:Video和Audio文件夹中的文件数量不一致!
    echo Video文件夹有 !vid_count! 个文件,Audio文件夹有 !aud_count! 个文件
    pause
    exit /b 1
)

:: 循环合并对应文件
echo 开始合并文件,共 !vid_count! 对...
for /l %%i in (0,1,!vid_count!-1) do (
    set "current_vid=!vid_files[%%i]!"
    set "current_aud=!aud_files[%%i]!"
    echo 正在合并:!current_vid! + !current_aud!
    ffmpeg -i ".\Video\!current_vid!" -i ".\Audio\!current_aud!" ^
        -map 0 -map 1 -map -1:v -c copy ".\Merged\!current_vid!"
)

echo 所有文件合并完成!
pause
endlocal

代码说明

  • dir /b /on/b表示只输出文件名,/on表示按名称排序,确保文件按字母顺序排列。
  • setlocal enabledelayedexpansion:启用延迟扩展后,用!变量名!代替%变量名%来读取循环内的动态变量。
  • ^:批处理中用于换行,让FFmpeg命令更易读。
  • 自动创建Merged文件夹:避免因文件夹不存在导致合并失败。

内容的提问来源于stack exchange,提问作者Marco Pagonia

火山引擎 最新活动