私は現在ファイルを取得しようとしています:
example.mkv // This is the source with audio/subs
example-Encoded.mkv // This is video only/encoded source
そして、スクリプトを設定します。私は成功したスクリプトを作成しましたが、最初の2つをプルした後、さらにプルしようとしますが、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コンテナに変換することで同じファイル名を作成できます。ただし、最初にコンテナを変更しなくても、これを適切に行う方法があるように感じます。
このリストは、forループ内の*-Encoded.mkv
ファイルに対してのみ試してください。
@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