ffmpegを使用してテキストの字幕を追加する[終了]


121

私はffmpegを使用して.mp4コンテナーにテキスト字幕を追加しようとしています:

ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mp4

この行を実行しようとすると、エラーが発生します。

ストリームマップの数は、出力ストリームの数と一致する必要があります。

mp4をmkvに変更しようとすると(mp4はテキストの字幕をサポートしていますが)、次のようになります。

ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mkv

それはストリームを正しくマッピングしますが、エラーを出します:

出力ストリーム#0.2のエンコーダー(コーデックID 94210)が見つかりません

起動すると

ffmpeg -codecs

srtコーデックがデコーダーとエンコーダーとしてサポートされていることがわかりますが、mp4とmkvのsubsエンコーディングに何が使用されているのか、またそれをオンにする必要があるのか​​、個別にコンパイルする必要があるのか​​わかりません。

回答:


195
ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4

-vf subtitles=infile.srt で動作しません -c copy


の順序-c copy -c:s mov_textは重要です。あなたはFFmpegに言っています:

  1. ビデオ:コピー、オーディオ:コピー、字幕:コピー
  2. サブタイトル:mov_text

それらを逆にすると、FFmpegに次のように伝えます。

  1. サブタイトル:mov_text
  2. ビデオ:コピー、オーディオ:コピー、字幕:コピー

または-c:v copy -c:a copy -c:s mov_text、任意の順序で使用することもできます。


13
このメソッドはストリームの1つとしてファイルに字幕を追加するため、字幕(VLCなど)を表示するにはプレーヤーのサポートが必要です
BollMose

1
これは、字幕は利用できるが、ビデオに書き込まれていないという意味ですか?オンデマンドが必要かどうかを示すことができますか?

3
はい@ sunk818これが意味することです。これにより、プレーヤーがサポートしている限り、有効または無効にできるトラックとして字幕が追加されます。ハイド氏とポールffmpegは、ビデオ自体の上に字幕を追加することもできます。その場合は、フォントや配置などを制御します。
Boushley 2016

1
.srtファイル-c:s copyは、-c:s mov_text。を使用せずにインポートする必要があります。
GetFree

82

注:このソリューションはビデオに「字幕を焼き付ける」ので、ビデオのすべての視聴者は強制的に字幕を見ることができます。

libassライブラリーを使用します(ffmpegインストールに構成内のライブラリーがあることを確認してください--enable-libass)。

最初に字幕を.assフォーマットに変換します:

ffmpeg -i subtitles.srt subtitles.ass

次に、ビデオフィルターを使用して追加します。

ffmpeg -i mymovie.mp4 -vf ass=subtitles.ass mysubtitledmovie.mp4

40
これにより、ビデオに「焼き付け」られます。つまり、プレーヤーでそれらをオフにできません。これは、プレーヤーが読み取ることができ、視聴者が望む場合に表示できる字幕ストリームとして追加することとは異なります。
stib 2014年

1
この解決策を本当にありがとう。文字のサイズを指定する方法はありますか?
user1319182 2015

1
この答えを見てください: stackoverflow.com/questions/21363334/…。おそらく、字幕ファイル自体にフォントを設定する必要があります。それ以外の場合は、字幕フィルタを使用して、force_styleでフォントを設定できます: ffmpeg.org/ffmpeg-filters.html#subtitles-1
HdN8

これは、Instagramなどの動画に字幕を追加するときに役立ちます。ユーザーは、音や映像を聴くする能力は、他の言語ではありませんしていることをInstagramのビューアのようにどこかで、そのユーザーの代わりに字幕を読むことができます
ϻαϻɾΣɀО-MaMrEzO

1
インストールlibass`aptのアップデートでDebianシステムに不足している場合は拡張を&&がちlibass-devのインストール」。
SopalajoデArrierez

53

字幕を字幕ストリームとして多重化しようとしています。簡単ですが、MP4(またはM4V)とMKVでは異なる構文が使用されます。どちらの場合も、ビデオとオーディオのコーデックを指定するか、字幕を追加するだけの場合はストリームをコピーする必要があります。

MP4:

ffmpeg -i input.mp4 -f srt -i input.srt \
-map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy \
-c:s mov_text output.mp4

MKV:

ffmpeg -i input.mp4 -f srt -i input.srt \
-map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy \
-c:s srt  output.mkv

3
複数の字幕を追加することは可能ですか?このソフトサブは不明な言語として認識されますか?
Patrick

1
はい、そうです。MKVでテストしたところです
。– dotokija

7
最初に別の入力を追加します:-i input2.srt。次に、それを2番目のストリームとしてマップします:-map 2:0。最後に、2番目の字幕ストリームのエンコーダを選択します(最初のものと同じ):-c:s srt。完全な例\ ffmpeg -i input.mp4 -f srt -i input.srt -i input2.srt \ -map 0:0 -map 0:1 -map 1:0 -map 2:0 -c:v copy- c:aコピー\ -c:s srt -c:s srt output.mkv
dotokija

8
言語メタデータを追加するには(出力ファイルの前に挿入) "-metadata:s:s:0 language = eng"
Patrick

mkvファイルをmp4ファイルとして「再ラップ」すると、元のファイルの字幕が除外されるのはなぜですか(ffmpeg -i film.mkv -vcodec copy -acodec copy film.mp4)?? オリジナルのmkvには字幕がありますが、mp4形式の出力にはありません。どうしたの?私は正しく何をしていませんか?
オールドボーイ2017

9

MKVコンテナは、ビデオとオーディオのコーデックを事実上サポートし、字幕とDVDメニューもサポートします。したがって、字幕付きのMKVコンテナを使用して、入力ビデオから出力ビデオにコーデックをコピーできます。まず、SRTをASS字幕形式に変換する必要があります

ffmpeg -i input.srt input.ass

ビデオにASS字幕を埋め込みます

ffmpeg -i input.mp4 -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv

VMWファイルでも使用できます。

ffmpeg -i input.wmv -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv

wikiページを参照コンテナフォーマットの比較を


1
HVはあまり関連性がありません。1つより多くのソリューションを確認することは常に歓迎されます。
JasonXA 2015

8

ffmpegは、mov_textMP4コンテナーでサポートされている唯一の字幕エンコーダーをサポートし、iTunes、Quicktime、iOSなどで再生できます。

あなたの行は次のようになります:

ffmpeg -i input.mp4 -i input.srt -map 0:0 -map 0:1 -map 1:0 -c:s mov_text output.mp4


5

このタスクにMP4Boxを使用してみましたが、扱っていたM4Vを処理できませんでした。次のコマンドラインを使用して、ffmpegでS​​RTをソフト字幕として埋め込むことに成功しました。

ffmpeg -i input.m4v -i input.srt -vcodec copy -acodec copy -scodec copy -map 0:0 -map 0:1 -map 1:0 -y output.mkv

あなたと同じように、MKV出力ファイルを使用する必要がありました。M4Vファイルを作成できませんでした。


3

任意の数のオーディオおよびsrt字幕で機能しmkvコンテナを含む可能性のあるメタデータを尊重する、シンプルで一般的な回答を提供します。そのため、matroskaが添付ファイルとして含めることができる画像(別のタイプのAFAIKではありません)を追加し、それらをトラックに変換します。あなたは見ることができませんが、彼らはそこにいます(あなたはそれらをデマルチプレクサすることができます)。ああ、そしてmkvに章があるなら、mp4も。

ffmpeg -i <mkv-input> -c copy -map 0 -c:s mov_text <mp4-output>

ご覧のように、メタデータ、チャプター、添付ファイルなどを含むすべてのトラックを追加する-map 0ようにFFmpegに指示するのはについてのすべてです。認識されない「トラック」がある場合(mkv任意のタイプのファイルを添付できます)、エラーで終了します。

単純なバッチmkv2mp4.batを作成して、通常はこれを行うと、mkvと同じ名前のmp4を作成できます。エラー制御や別の出力名などを使用した方がよいでしょうが、要点はわかります。

@ffmpeg -i %1 -c copy -map 0 -c:s mov_text "%~n1.mp4"

今、あなたは単に走ることができます

mkv2mp4 "Video with subtitles etc.mkv"

そして、最大限の情報が含まれた「字幕付き動画mp4」を作成します。


-1

簡単な例:

videoSource=test.mp4
videoEncoded=test2.mp4
videoSubtitle=test.srt
videoFontSize=24
ffmpeg -i "$videoSource" -vf subtitles="$videoSubtitle":force_style='Fontsize="$videoFontSize"' "$videoEncoded"

Linux変数のみを置き換える


詳しく説明しますか?
RamenChef 2016年

-3

これが、特に成熟したmkvが非常に優れたコンテナである理由です。

mkvmerge -o output.mkv video.mp4 subtitle.srt

3
あなたのアプローチがOPの問題を解決する理由をコメントしてください。
mjuarez 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.