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エンコーディングに何が使用されているか、それをオンにするか、個別にコンパイルする必要があるかはわかりません。
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に言っています:
逆にすると、FFmpegに次のように伝えます:
または、-c:v copy -c:a copy -c:s mov_text
を任意の順序で使用できます。
libass
ライブラリを使用します(ffmpegインストールに構成--enable-libass
のライブラリがあることを確認してください)。
最初に字幕を.ass
形式に変換します:
ffmpeg -i subtitles.srt subtitles.ass
次に、ビデオフィルターを使用してそれらを追加します。
ffmpeg -i mymovie.mp4 -vf ass=subtitles.ass mysubtitledmovie.mp4
字幕を字幕ストリームとして多重化しようとしています。簡単ですが、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
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ページを参照してください コンテナ形式の比較
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
このタスクに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ファイルを作成できませんでした。
任意の数のオーディオおよび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を作成します。