web-dev-qa-db-ja.com

*類似の名前*と同じ拡張子を持つ2つのファイルを結合するバッチファイルを作成する[Windows]

私は現在ファイルを取得しようとしています:

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コンテナに変換することで同じファイル名を作成できます。ただし、最初にコンテナを変更しなくても、これを適切に行う方法があるように感じます。

1
Jessie Wilson

このリストは、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

0
It Wasn't Me