マルチオーディオ トラックおよびマルチ字幕ビデオ処理では、-map は FFmpeg の最も重要で最も誤用されやすいパラメータの 1 つです。
-map を明示的に指定しない場合、FFmpeg はデフォルトのルールに従ってストリームを自動的に選択するため、多くの場合、期待した結果が得られません。例えば:
- エクスポートすると字幕が失われる
- 間違ったオーディオトラック言語が選択されました
- 不要なデータストリームが混入している
この記事では、最も一般的なシナリオを使用して、-map の使用方法を説明します。
まずは「流れ」とは何かを理解する
通常、コンテナー ファイルには複数のコンテンツ ストリーム (ストリーム) が存在します (mp4、mkv など)。一般的なものには次のようなものがあります。
- ビデオストリーミング (
v) - オーディオ ストリーム (
a) - 字幕ストリーム (
s) - 添付ファイル/データ ストリーム (フォント、表紙、章など)
まず ffprobe を使用して、ファイル内にどのようなストリームがあるかを確認できます。
|
|
-map の基本構文
最も一般的な書き方は次のとおりです。
|
|
例えば:
0:v: 1 番目の入力ファイルのすべてのビデオ ストリーム0:a:0: 入力ファイル 1 のオーディオ ストリーム 11:s:1: 2 番目の入力ファイルの 2 番目の字幕ストリーム
例証します:
input_indexは0から始まり、-iのシーケンスに対応します。stream_indexも0で始まります
実践例
1) ビデオは A から、音声は B から来ます
|
|
意味:
english.mp4の最初のビデオ ストリームを取得しますfrench.mp3の最初のオーディオ ストリームを取得します- 結合された出力は
french.mp4です。
2) 最初の入力のすべてのストリームを保持し、追加のオーディオ トラックを追加します。
|
|
意味:
-map 0まず、すべてのストリームを最初の入力ファイルに取り込みます- 2 番目の入力の最初のオーディオ ストリームを追加します
非常に実践的な 2 つの高度なテクニック
1) ネガティブ マッピング: 不要なフローを除外します。
たとえば、最初の入力のすべてのストリームを保持しますが、2 番目のオーディオ ストリームを削除します。
|
|
2) オプションのマッピング: ストリームは存在せず、中断されません。
一部のファイルには字幕がない場合があります。その場合は、? を使用できます。
|
|
0:s? は、「字幕がある場合はマップし、字幕がない場合はスキップし、エラーは報告されない」ことを意味します。
一般的なピットの位置
-mapを使用すると、FFmpeg はデフォルトでストリームを自動的に選択しなくなるため、必要なものをすべて書き出す必要があります。-c copyは、トランスコーディングを行わずにカプセル化とコピーのみを行います。ターゲット コンテナが特定のエンコーディングをサポートしていない場合でも、失敗します。- 複数の入力を入力するときに最もよくある間違いは、シリアル番号を入力することです。シリアル番号は
-iの順序にのみ依存することに注意してください。 - 安定したスクリプトを作成したい場合は、まず
ffprobeを作成し、次に手書きよりも安定した-mapを生成します。
要約する
-map の中核は 1 つの文です。「どの入力から、どのタイプのストリームを取得し、どのストリームを取得するか」を FFmpeg に明確に指示します。
マスタリング後は、複数のオーディオトラック、複数の字幕、ファイル間の結合などの複雑なシーンを安定して処理できるようになり、「エクスポート結果が間違っているが原因がわからない」という問題を回避できます。