メタデータ(説明、アートワーク、俳優など)でタグ付けされたビデオ(.mp4)がいくつかあり、ストリームとして追加したい字幕ファイルがあります。
ffmpeg
を使用して、ビデオと.srt
ファイルの両方を入力として設定し、新しい出力ファイルを取得できますが、出力は常にコンテナーレベルのメタデータをすべて失っているように見え、常に煩わしいことがあります。元のファイルに戻って削除します。
新しいファイルを作成せずに、字幕ファイルを新しいストリームとしてビデオファイルに追加する方法はありますか?元のビデオファイルを変更するだけですか?
Sublerのようなプログラムはこれを行うようですが、興味深いことに、コマンドラインから実行できますか?
ffmpeg
を使用してファイルをインプレースで編集することはできません。常に新しい出力ファイルを作成する必要があります。これはほとんどすべてのプログラムのデフォルトであり、多くの場合、出力ファイルは書き込み中にプログラムによってシーク可能で編集可能である必要があります。*
realの問題がメタデータの損失である場合は、次を試してください。
ffmpeg -i input.mp4 -i subtitles.srt \
-c copy -c:s mov_text \
-map 0 -map 1 -map_metadata 0 output.mp4
ffmpeg
でSRT(SubRip)を MP4準拠の字幕 に-c:s mov_text
で変換する必要があります。そうしないと、ffmpeg
はストリームのコピーを拒否します。****
-map_metadata
オプションは、すべてのグローバルメタデータを入力MP4ファイルから出力、つまりコンテナレベルで設定したものにコピーする必要があります。ビットストリームレベルのメタデータは、それ以上のオプションなしで自動的にコピーされる必要があります。
*もちろん、 sponge
from moreutils のようなプログラムは、入力を「吸収」してファイルをインプレースで上書きできますが、これはシーク不可能な出力をサポートするマルチプレクサでのみ機能するため、 MP4ではありません。
** mov_text
でエンコードされた字幕とQuickTimeプレーヤーに問題があります。 FFmpegチケット#1845 および #2488 を参照してください。