シェルループを使用してmkvから任意の字幕形式を削除する方法

シェルループを使用してmkvから任意の字幕形式を削除する方法

与えられたパスのすべてのmkvファイルからすべてのサブファイルを削除するためにこのスクリプトを作成しました。うまくいきます。しかし、今はPGS字幕を削除し、言語に関係なくすべてのSRTファイルを維持したいと思います。

for file in "$@"*mkv; do
    mkvmerge -o "${file%.mkv}".nosubs.mkv --no-subtitles "$file"
done

ボーナス:すべての言語のすべてのSRTファイルを保存する方法。

ベストアンサー1

出力を解析して必要なトラックIDを取得し、mkvmerge -I()オプションを使用して結果をカンマ区切りリストに渡します。--subtitle-tracks-s

SRT字幕のみを選択するには、以下を使用してくださいsed

for file in "$@"*.mkv; do
    subs=$(mkvmerge -I "$file" | sed -ne '/^Track ID [0-9]*: subtitles (SubRip\/SRT).*/ { s/^[^0-9]*\([0-9]*\):.*/\1/;H }; $ { g;s/[^0-9]/,/g;s/^,//;p }')
    if [[ -n $subs ]]; then subs="-s $subs"; else subs=-S; fi
    mkvmerge $subs -o "${file%.mkv}".srt-only.mkv "$file"
done

同様に、英語のSRTのみを選択するには:

for file in "$@"*.mkv; do
    subs=$(mkvmerge -I "$file" | sed -ne '/^Track ID [0-9]*: subtitles (SubRip\/SRT).* language:eng.*/ { s/^[^0-9]*\([0-9]*\):.*/\1/;H }; $ { g;s/[^0-9]/,/g;s/^,//;p }')
    if [[ -n $subs ]]; then subs="-s $subs"; else subs=-S; fi
    mkvmerge $subs -o "${file%.mkv}".eng-srt-only.mkv "$file"
done

language:eng他の言語を選択するには変更してください。

おすすめ記事