使用终端通过 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

相关内容