178

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

4

9 に答える 9

272
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または、任意の順序で使用することもできます。

于 2013-07-11T02:53:41.330 に答える
134

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

コンパイル時に ffmpeg で libass が有効になっている場合は、次のように直接実行できます。

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

これは、たとえば Ubuntu 20.10 の場合で、持っているかどうかを確認できffmpeg --versionます--enable-libass

それ以外の場合は、libassライブラリを使用できます (ffmpeg インストールの構成にライブラリが含まれていることを確認してください--enable-libass)。

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

ffmpeg -i subtitles.srt subtitles.ass

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

ffmpeg -i mymovie.mp4 -vf ass=subtitles.ass mysubtitledmovie.mp4
于 2012-10-29T15:55:17.667 に答える
74

字幕を字幕ストリームとして多重化しようとしています。簡単ですが、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
于 2015-10-22T20:13:36.993 に答える
13

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

ウィキページを参照してくださいコンテナー形式の比較

于 2014-06-18T20:08:13.623 に答える
11

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

于 2013-11-26T19:37:12.417 に答える
6

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

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 ファイルを作成できませんでした。

于 2012-12-04T11:42:48.923 に答える
-1

簡単な例:

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

Linux変数のみを置き換えます

于 2016-11-18T16:32:16.697 に答える