字幕オプションがいくつかある良質のMKVファイルがあります。リストに字幕ファイルを追加したい。 OSXを使用しています。
オンラインで検索した結果、ビデオコンバーターを使用するようになり、基本的に映画を新しいファイルに再エンコードしました。それは本当に私にはやり過ぎのようです。加えて、以前の字幕や途中で画質が失われる可能性があります。
字幕を削除する:
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
を使用してインストールできます。
字幕を表示するには、2つの基本的な方法があります。ピクセルをビデオ自体にエンコードできます。これは「ハードサブ」と呼ばれます。ここでの利点は、ビデオプレーヤーのシンプルさです。これは単なるビデオストリームです。欠点は、ビデオを再エンコードする必要があり、時間がかかり、忠実度がいくらか失われることです。あなたがより良い翻訳を得れば、まあ、それはビデオのピクセルです。また、使用できる言語は1つだけです。
やや優れているのは、ビデオストリームとは別の場所にテキストファイルを置く「ソフトサブビング」です。字幕ファイルにはさまざまな形式がありますが、基本的にはすべて「テキスト、開始時刻、削除時刻」がコアにあります。一部には、画面上の色や向きなどの追加機能があります。これの利点は、複数の言語を使用できること(DVDと考えれば、複数の言語を使用できること)で、ファイル内のタイプミスなどを修正できることです。字幕が必要ない場合は、オフにしてください。
Softsubsは別のファイルにすることもできます-ほとんどのプレーヤーは、メインビデオと同じ名前(異なる拡張子)の字幕を自動的に探します。または、特定のコンテナファイル形式(MKVなど)にそれらを埋め込むことができます。 MKVファイルツールの MKVtoolnix (Macポートがあります)を確認してください。これにより、再エンコードせずにソフトサブを埋め込むことができます。
すべてのプレーヤーがすべてのフォーマットをサポートできるわけではないことに注意してください。私の経験では、XBMCにはSSAファイルに関する問題がありますが、より単純なSRTファイルで問題ありません。 VLCは、プラットフォームでサポートされていれば、何でも再生します。
これは古い質問で、 user495470
の回答は2013年に受け入れられましたが、質問の一部はファイルに字幕を追加することに関するものなので、この新しい追加を追加したいと思いました。
基本的に、私は数十の.ass
字幕を同じような名前のMKVファイルにマージする必要があったので、一度に1つのコマンドを実行するだけではうまくいきませんでした。そこで、この単純なBashスクリプトを実行して、実行元の現在のディレクトリで.ass
ファイルを検索し、期待どおりにマージします。
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に自動的にマージするという大きな問題は、次のような簡単なスクリプトで解決されます。