ffmpeg はメディアパイプラインツールです。1 つ以上の入力を読み込み、必要に応じてデコードしたフレームをフィルタリングし、1 つ以上の出力を書き込みます。
パイプラインモデル #
ffmpeg は、次のコンポーネントからパイプラインを構築します。
- デマクサーはコンテナデータを読み込み、エンコードされたパケットを公開します。
- デコーダーはパケットを生のフレームに変換します。
- フィルターグラフは生のオーディオまたはビデオフレームを変換します。
- エンコーダーはフィルタリング済みのフレームを再びパケットに変換します。
- マクサーはパケットを出力コンテナにインターリーブします。
このモデルにより、コマンドラインがオプションの順序に依存する理由と、ストリーム選択が重要である理由を説明できます。
コマンドラインの順序 #
コマンドラインは位置に依存します。
ffmpeg [global_options] [input_options] -i input ... [output_options] output ...実際の運用で重要な規則は次のとおりです。
- 入力オプションは対応する
-iより前に置きます。 - 出力オプションは対応する出力 URL より前に置きます。
- グローバルオプションを最初に置きます。
- ファイルごとにオプションはリセットされます。
ストリーム選択 #
ffmpeg はストリームを自動的に選択できますが、複雑なジョブでは明示的なマッピングの方が安全です。
ffmpeg -i input.mkv -map 0:v:0 -map 0:a:0 -c copy output.mkv0:v:0 のようなストリーム指定子は、最初の入力にある最初のビデオストリームを選択します。コンテナに複数のオーディオトラック、字幕、または添付画像がある場合に使用します。
一般的な操作 #
ストリームコピー #
ストリームをデコードまたは再エンコードせずにコピーします。
ffmpeg -i input.mkv -c copy output.mp4対象のコンテナが既存のコーデックを受け入れる場合、これが最速の方法です。
トランスコード #
出力形式で異なるコーデックが必要な場合は、再エンコードします。
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4トリミング #
-ss と -t、または -to を使用してクリップを切り出します。
ffmpeg -ss 30 -i input.mp4 -t 60 -c copy clip.mp4正確さが重要な場合は -ss を -i の後に置き、速度が重要な場合は -i の前に置きます。
オーディオの抽出 #
ffmpeg -i input.mp4 -vn -c:a copy output.m4a-vn はビデオを削除し、-c:a copy はオーディオストリームの再エンコードを回避します。
フィルタリング #
単純なフィルターは 1 つのストリームに適用します。
ffmpeg -i input.mp4 -vf "scale=-2:720,format=yuv420p" output.mp4複雑なフィルターグラフは複数の入力を結合します。
ffmpeg -i main.mp4 -i overlay.png -filter_complex "[0:v][1:v]overlay=10:10" output.mp4フィルターグラフの構文は ffmpeg-filters(1) に属します。コンマはチェーン内のフィルターを区切り、セミコロンはチェーンを区切ります。
プロービング #
入力レイアウトが不明な場合は ffprobe を使用します。
ffprobe -hide_banner -show_streams -show_format input.mkvこれは、ffmpeg コマンドを作成する前に、ストリームインデックス、コーデック名、再生時間、メタデータを確認する最速の方法です。
実用的なフラグ #
-shortestは最短のストリームが終了した時点で停止します。-movflags +faststartは MP4 メタデータを先頭に移動します。-yは出力ファイルを上書きします。-hide_bannerはスクリプト出力を短く保ちます。-loglevel errorは情報メッセージを抑制します。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)