回答:
字幕を削除する:
mkvmerge -o output.mkv input.mkv -S # remove all subtitle tracks
mkvmerge -o output.mkv input.mkv -s 3,4 # remove tracks 3 and 4
mkvmerge -o output.mkv input.mkv -s '!3' # remove all subtitle tracks except 3
mkvmerge -i input.mkv # show track numbers
字幕を追加する:
mkvmerge -o output.mkv input.mkv subs.srt
mkvmerge -o output.mkv input.mkv --language 0:ger --track-name 0:German subs.srt
字幕の抽出:
mkvextract tracks input.mkv 3:subs.srt
for f in *.mkv; do
sub=$(mkvmerge -i "$f" | awk '$4=="subtitles"{print;exit}')
[[ $sub ]] || continue
[[ $sub =~ S_TEXT/ASS ]] && ext=ass || ext=srt
track=$(awk -F '[ :]' '{print $3}' <<< "$sub")
mkvextract tracks "$f" "$track:${f%mkv}$ext"
done
mkvmergeとmkvextractはでインストールできますbrew install mkvtoolnix
。
--default-track '0:0'
。
字幕を表示するには、2つの基本的な方法があります。ピクセルをビデオ自体にエンコードできます。これは「ハードサビング」と呼ばれます。ここでの利点は、ビデオプレーヤーのシンプルさであり、単なるビデオストリームです。欠点は、ビデオを再エンコードする必要があり、時間がかかり、忠実度がいくらか失われることです。より良い翻訳が得られれば、それはビデオのピクセルです。また、使用できる言語は1つだけです。
やや良いのは、ビデオストリームとは別の場所にテキストファイルを配置する「ソフトサブッシング」です。字幕ファイルにはさまざまな形式がありますが、それらの基本部分にはすべて、コアに「テキスト、開始時刻、削除時刻」があります。一部には、画面上の色や向きなどの追加機能があります。これの利点は、複数の言語(DVDのように、複数の言語が利用可能)を持つことができ、ファイル内のタイプミスなどを修正できることです。また、字幕が必要ない場合は、字幕をオフにしてください。
Softsubsは別々のファイルにすることができます-ほとんどのプレーヤーは、メインビデオと同じ名前(異なる拡張子)の字幕を自動的に探します。または、特定のコンテナファイル形式(MKVなど)で内部に埋め込むことができます。MKVファイルツールについては、MKVtoolnix(Macポートがあります)をご覧ください。これにより、再エンコードせずにソフトサブを埋め込むことができます。
すべてのプレーヤーがすべての形式をサポートできるわけではないことに注意してください。私の経験では、XBMCにはSSAファイルに関する問題がありますが、はるかに単純なSRTファイルで十分です。VLCは、プラットフォームでサポートされている場合は何でも再生します。
これは古い質問でありuser495470
、2013年の時点での回答は受け入れられていますが、質問の一部は字幕をファイルに追加することに関するものなので、この新しい追加を追加したいと考えました。
基本的に、私は何十もの.ass
字幕を同様の名前のMKVファイルにマージする必要があったので、一度に1つのコマンドを実行するだけではカットされませんでした。そこで、実行元の現在のディレクトリで.ass
ファイルを検索し、期待どおりにそれらをマージするこの単純なBashスクリプトを作成しました。
find -E . -maxdepth 1 -type f -iregex '.*\.(ASS|SRT)$' |\
while read FILEPATH
do
DIRNAME=$(dirname "${FILEPATH}");
BASENAME=$(basename "${FILEPATH}");
FILENAME="${BASENAME%.*}";
EXTENSION="${BASENAME##*.}"
mkvmerge -o "/Users/jake/${FILENAME}"-NEW.mkv "${FILENAME}".mp4 --language 0:eng --track-name 0:English "${FILENAME}"."${EXTENSION}"
done
もちろん、この単純なスクリプトは、字幕が英語であると想定し、それらをそのままマージしますが、使用のニーズごとに手動で調整できます。字幕とMKVを自動的にマージするという大きな問題は、このような簡単なスクリプトによって解決されます。