web-dev-qa-db-ja.com

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

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エンコーディングに何が使用されているか、それをオンにするか、個別にコンパイルする必要があるかはわかりません。

95
0-alpha
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を任意の順序で使用できます。

142
Steven Penny

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

最初に字幕を.ass形式に変換します:

ffmpeg -i subtitles.srt subtitles.ass

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

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

字幕を字幕ストリームとして多重化しようとしています。簡単ですが、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
48
dotokija

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ページを参照してください コンテナ形式の比較

8
khan

ffmpegはmov_text字幕エンコーダーをサポートしています。これは、MP4コンテナーでサポートされている唯一のもので、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

6
Mirko Klemm

このタスクに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ファイルを作成できませんでした。

4
D Coetzee

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

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

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

単純なバッチmkv2mp4.batを作成して、通常これを行うと、mp4と同じ名前で作成できます/ mkv。エラー制御、別の出力名などを使用した方が良いでしょうが、ポイントを得ることができます。

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

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

mkv2mp4 "Video with subtitles etc.mkv"

そして、最大の情報が含まれた「字幕付きビデオなど」mp4を作成します。

2
cdlvcdlv