使用終端透過 MKVmerge 為多個 mkv 檔案添加字幕

使用終端透過 MKVmerge 為多個 mkv 檔案添加字幕

我正在嘗試為多個 mkv 檔案添加字幕。我使用這個腳本來執行此操作:

for file in *.mkv; do "/Applications/Mkvtoolnix-7.0.0.app/Contents/MacOS/mkvmerge" -o "${file%\.*}(1).mkv"   "(" "$file" ")"  "(" "${file%\.*}.srt" ")" ; rm $file

它僅適用於根目錄。但它不適用於子資料夾中的所有文件,請幫助我使其適用於子資料夾中的所有文件。

答案1

你可以這樣做:

# make bash function to do conversion and deletion
conv() {
 /Applications/Mkvtoolnix-7.0.0.app/Contents/MacOS/mkvmerge -o "${1%\.*}(1).mkv"   "(" "$1" ")"  "(" "${1%\.*}.srt" ")"
 rm "${1}"
}
# make conv function available to xargs
export -f conv
# recursively convert every .mkv file in current directory
find . -name "*.mkv" -type f -print0 | xargs -0 -n1 -I% bash -c 'conv "$@"' _ %

答案2

如果您正在使用bash,請執行

shopt -s globstar
對於 **/*.mkv 中的文件
    (您的 MKVmerge 等指令)
完畢

設定globstarshell 選項告訴bash展開**/所有目錄和子目錄。

PS 始終引用所有 shell 變數引用(除非您有充分的理由不這樣做,並且您確定您知道自己在做什麼)。特別是說rm "$file"代替rm $file.

相關內容