创建一个批处理文件来合并两个具有*相似名称*和相同扩展名的文件

创建一个批处理文件来合并两个具有*相似名称*和相同扩展名的文件

我目前正在尝试获取文件:

example.mkv           // This is the source with audio/subs
example-Encoded.mkv   // This is video only/encoded source

并设置一个脚本。我已经编写了一个成功的脚本,但在提取前两个文件后,它会尝试提取更多文件,虽然它确实完成了 remux,但它会抛出一个错误,因为它正在寻找名为的文件的版本example-Encoded-Encode.mkv

这是我正在使用的脚本:

mkdir MUXED

FOR %%a IN ("*.mkv") DO ffmpeg -i "%%a" -i "%%~na-Encoded.mkv" ^
-map 1:v:0 c:v:0 copy -disposition:v:0 default -metadata:s:v:0 title="Example" ^
-map 0:a:0 -c:a:0 copy -disposition:a:0 default -metadata:s:a:0 title="DD 2.0" ^
-map 0:a:1 -c:a:1 copy -metadata:s:s:0 title="Commentary" ^
-map 0:s:0 -c:s:0 copy -metadata:s:s:0 title="English (SRT)" ^
-map 0:s:1 -c:s:1 copy -metadata:s:s:1 title="English (VobSub)" ^
"MUXED\%%~na.mkv"

pause

我可以通过将编码文件转换为 mp4 容器来实现相同的文件名,因为它们只是编码的视频。但是,我觉得有一种方法可以正确地做到这一点,而不必先更改容器!

答案1

*-Encoded.mkv尝试在 for 循环中仅列出文件:

@echo off && setlocal enabledelayedexpansion

cd/d "%~dp0" & set "_x=-Encoded" && 2>nul mkdir .\MUXED

for /f tokens^=* %%i in ('dir /b /on /a:-d "*!_x!.mkv"
')do set "_i=%%~nxi!" && cmd.exe /v:on /c ffmpeg.exe -i "!_i:%_x%=!" -i "%%~nxi" ^
-map 1:v:0 -c:v:0 copy -disposition:v:0 default -metadata:s:v:0 title="Example" ^
-map 0:a:0 -c:a:0 copy -disposition:a:0 default -metadata:s:a:0 title="DD 2.0" ^
-map 0:s:1 -c:s:1 copy -metadata:s:s:1 title="English (VobSub)" ^
-map 0:s:0 -c:s:0 copy -metadata:s:s:0 title="English (SRT)" ^
-map 0:a:1 -c:a:1 copy -metadata:s:s:0 title="Commentary" ^
".\MUXED\%%~ni.mkv" -hide_banner -v error -stats 

%__APPDIR__%timeout.exe -1 & endlocal

相关内容