私は例の形で質問をします...メイン フォルダー ==)Got、Vikings など、いくつかのサブフォルダーを含むフォルダーがあります。それぞれに、対応する srt ファイルを含むビデオがあります。Windows 環境では、メイン フォルダーでこのコマンドを実行すると、mkvmerge がこのディレクトリ内のビデオ全体と対応する srt ファイルを mux します。
For /R %%A IN (*.mkv *.mp4) Do (
"C:/Program Files/MKVToolNix\mkvmerge.exe" -o "%%~dpnxAtemp" "%%~fA" "%%~dpnA.srt" && if errorlevel 2 (
echo errors generated during remuxing, original file not deleted
) else if errorlevel 1 (
del /f "%%~fA" "%%~dpnA.srt" echo Warnings generated during remuxing to "%%~A", original file deleted
) else (
del /f "%%~fA" "%%~dpnA.srt" echo Successfully remuxed to "%%~A", original file deleted
) && for /R %%A IN (*.mkvtemp *.mp4temp) do ren "%%~fA" "%**.mkv"
)
Pause
答え1
コードにはいくつかエラーがありますが、私は次のように理解しています: 1
すべてに対して以下を再帰的に実行し
*.mkv
、*.mp4
見つけます。
mkvmerge
各ファイルとそれに対応する を実行します*.srt
。- 成功した場合(警告または正常終了):
- 入力ファイルを削除します。
- 作成したファイルの名前を に変更します
<original_name>.mkv
。
これは、Ubuntu で次のスクリプトを使用して実行できます。
完全にテストしていないので、自己責任で使用してください。
#!/bin/bash
find . -name \*.mp4 -o -name \*.mkv | while read orig_filename
do
filename="${orig_filename::-4}" # crop the extension
mkvmerge -o "$orig_filename.tmp" "$orig_filename" "$filename.srt"
if [ $? -le 1 ] # warning or clean exit
then
rm "$orig_filename" "$filename.srt"
mv "$orig_filename.tmp" "$filename.mkv"
fi
done
このスクリプトを実行する前に、mkvmerge
Ubuntu用のプログラム:
sudo apt install mkvtoolnix
1簡潔にするためにエラー メッセージは省略しました。コメントによると、エラー メッセージはスクリプトにとって必須ではないようです。