web-dev-qa-db-ja.com

FFMPEGを使用してM4vビデオファイルに字幕を追加する

Ffmpegを使用してビデオファイルに字幕を追加するのに問題があります。

私はこのコマンドを使用しています:

ffmpeg -i movie_input.m4v -newsubtitle subtitles.srt -acodec copy -vcodec copy movie_output.m4v

このコマンドラインの例はさまざまなチュートリアルで見つかりましたが、何らかの理由で(ffmpegの新しいバージョン?)次のようになります。

Unrecognized option 'newsubtitle'

Ffmpegを使用して字幕を追加する方法についての手がかりはありますか?

ありがとう!

P.S. bashスクリプトで自動化できるソリューションが必要なので、Sublerのようなプログラムを使用することはこのタスクには適していません。

5
Yuval Cohen

_-newsubtitle_は、古いバージョンのffmpegから廃止されたオプションです。最新バージョンでは、コマンドは次のようになります。

_ffmpeg -i input.m4v -i subtitle.srt -map 0 -map 1 -c copy -c:s mov_text output.m4v
_

_-i input.m4v -i subtitle.srt_は、これら2つのファイルを入力として使用するようにffmpegに指示します。

_-map 0 -map 1_は、入力番号0と入力番号1からのすべてのストリームを使用するようにffmpegに指示します。

これには直接関係ありませんが、_-map_で個々のストリームを選択できます。_-map 0:v_は入力0からすべてのビデオストリームを選択し、_-map 1:s_は入力1からすべての字幕ストリームを選択します_-map 0:0_は入力0からストリーム0(最初のストリーム)を選択し、_-map 1:a:0_は入力1の最初のオーディオストリームを選択します。

_-c copy_はffmpegに、再エンコードせずに入力からすべてのストリームをコピーするように指示しますが、_-c:s mov_text_ after _-c copy_は字幕ストリームのコピー設定をオーバーライドします。 -MP4コンテナに含めることができるフォームにエンコードします。

9
evilsoup

FFmpeg 0.9では、-newsubtitleオプションが削除されました。すべての入力ファイルのビデオ/オーディオ/字幕ストリームを出力に追加する場合は、-mapオプションを使用します。例:

ffmpeg -i movie_input.m4v -i subtitles.srt -c:v copy -c:a copy -c:s mov_text \
-map 0 -map 1 out.m4v

これにより、ビデオストリームとオーディオストリームがコピーされますが、字幕はmov_textにエンコードされます。これは、MP4で公式にサポートされている唯一の字幕形式です。 SRTはデフォルトでは機能しません。

ここでのmapオプションは、最初のファイル(0)と2番目のファイル(1)からのすべてのストリームがコピーされることを指定しているため、元のファイルがあったとしても機能します。たとえば、複数のオーディオストリーム。

mapオプションの使用方法の詳細については、 FFmpeg wikiを参照

これらのオプションを削除する理由 変更ログから

-newvideo/-newaudio/-newsubtitleオプションが削除されました。それらは不規則で非常に混乱しているだけでなく、冗長でもありました。 avconvで、-mapオプションは、出力ファイルに新しいストリームを作成し、入力ストリームをそれらにマップします。例えば。 avconv -i INPUT -map 0 OUTPUTは、最初の入力ファイルの各ストリームの出力ストリームを作成します。

6
slhck