我目前正在尝试获取文件:
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