Windows批处理脚本自动合并当前目录下由You-get下载的未合并的音视频文件
以下是一个Windows批处理脚本,可以自动合并当前目录下由You-get下载的未合并的音视频文件(video.m4s和audio.m4s):
:
@echo off
setlocal enabledelayedexpansion:: 创建合并目录
if not exist "Merged" mkdir "Merged":: 显示进度
echo 正在扫描当前目录...
echo.:: 主处理流程
for /f "delims=" %%v in ('dir /b /a-d "*[00].mp4" 2^>nul') do (:: 使用字符串替换确保精确匹配set "video=%%v"set "audio=!video:[00]=[01]!"echo 视频文件: !video!echo 尝试匹配: !audio!if exist "!audio!" (:: 生成输出文件名(移除[00]标记)set "output=!video:[00]=!":: 处理ffmpeg的元数据问题echo 正在合并: !output!...ffmpeg -i "!video!" -i "!audio!" -map 0:v -map 1:a -c copy -movflags +faststart "Merged\!output!"if !errorlevel! equ 0 (echo [√] 合并成功: !output!:: 成功后可选的清理(取消注释启用):: del "!video!" "!audio!") else (echo [×] 合并失败,尝试第二种方案...ffmpeg -i "!video!" -i "!audio!" -c:v copy -c:a aac -b:a 192k "Merged\!output!")) else (echo [!] 未找到匹配的音频文件echo 可能存在的音频文件:dir /b "!video:[00]=[*].mp4")echo.
):: 后处理
echo 操作完成!合并文件保存在 Merged 文件夹
echo 按任意键查看结果...
pause
start "" "Merged"
改进亮点:
智能文件名匹配:
使用
!var:str1=str2!
字符串替换,确保精确转换[00]
→[01]
示例:
视频[00].mp4
→ 精准匹配视频[01].mp4
双重合并方案:
首选方案:
-map 0:v -map 1:a
确保流选择正确备用方案:当直接拷贝失败时自动转码音频为AAC格式
中文路径支持:
完整保留所有特殊字符(中文、日文、符号等)
正确处理包含【】、《》等特殊符号的文件名
诊断功能增强:
显示实时匹配过程
失败时自动列出相似文件辅助排查
完成后自动打开结果文件夹
使用说明:
将脚本保存为
merge.bat
放入包含
[00].mp4
和[01].mp4
的文件夹直接运行,无需任何参数
合并结果保存在自动创建的
Merged
子文件夹
常见问题应对:
如果仍提示找不到文件:
检查文件是否被其他程序锁定(如播放器正在使用)
如果合并后音画不同步:
尝试改用以下命令:
ffmpeg -i "!video!" -i "!audio!" -c:v copy -c:a aac -af "aresample=async=1000" "Merged\!output!"
如需处理其他编号格式:
修改脚本中的
[00]
和[01]
为您实际使用的编号
这个版本应该能完美处理您提到的所有复杂文件名情况。如果遇到特殊情况,建议提供具体的文件名示例以便进一步优化。