FFmpeg ユーザーガイド

最終更新: 2021-05-09 05:38:32 +0800 +0800
tags: Ffmpeg | Media | Video
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

ffmpeg はメディアパイプラインツールです。1 つ以上の入力を読み込み、必要に応じてデコードしたフレームをフィルタリングし、1 つ以上の出力を書き込みます。

パイプラインモデル #

ffmpeg は、次のコンポーネントからパイプラインを構築します。

  • デマクサーはコンテナデータを読み込み、エンコードされたパケットを公開します。
  • デコーダーはパケットを生のフレームに変換します。
  • フィルターグラフは生のオーディオまたはビデオフレームを変換します。
  • エンコーダーはフィルタリング済みのフレームを再びパケットに変換します。
  • マクサーはパケットを出力コンテナにインターリーブします。

このモデルにより、コマンドラインがオプションの順序に依存する理由と、ストリーム選択が重要である理由を説明できます。

コマンドラインの順序 #

コマンドラインは位置に依存します。

sh
ffmpeg [global_options] [input_options] -i input ... [output_options] output ...

実際の運用で重要な規則は次のとおりです。

  • 入力オプションは対応する -i より前に置きます。
  • 出力オプションは対応する出力 URL より前に置きます。
  • グローバルオプションを最初に置きます。
  • ファイルごとにオプションはリセットされます。

ストリーム選択 #

ffmpeg はストリームを自動的に選択できますが、複雑なジョブでは明示的なマッピングの方が安全です。

sh
ffmpeg -i input.mkv -map 0:v:0 -map 0:a:0 -c copy output.mkv

0:v:0 のようなストリーム指定子は、最初の入力にある最初のビデオストリームを選択します。コンテナに複数のオーディオトラック、字幕、または添付画像がある場合に使用します。

一般的な操作 #

ストリームコピー #

ストリームをデコードまたは再エンコードせずにコピーします。

sh
ffmpeg -i input.mkv -c copy output.mp4

対象のコンテナが既存のコーデックを受け入れる場合、これが最速の方法です。

トランスコード #

出力形式で異なるコーデックが必要な場合は、再エンコードします。

sh
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4

トリミング #

-ss と -t、または -to を使用してクリップを切り出します。

sh
ffmpeg -ss 30 -i input.mp4 -t 60 -c copy clip.mp4

正確さが重要な場合は -ss を -i の後に置き、速度が重要な場合は -i の前に置きます。

オーディオの抽出 #

sh
ffmpeg -i input.mp4 -vn -c:a copy output.m4a

-vn はビデオを削除し、-c:a copy はオーディオストリームの再エンコードを回避します。

フィルタリング #

単純なフィルターは 1 つのストリームに適用します。

sh
ffmpeg -i input.mp4 -vf "scale=-2:720,format=yuv420p" output.mp4

複雑なフィルターグラフは複数の入力を結合します。

sh
ffmpeg -i main.mp4 -i overlay.png -filter_complex "[0:v][1:v]overlay=10:10" output.mp4

フィルターグラフの構文は ffmpeg-filters(1) に属します。コンマはチェーン内のフィルターを区切り、セミコロンはチェーンを区切ります。

プロービング #

入力レイアウトが不明な場合は ffprobe を使用します。

sh
ffprobe -hide_banner -show_streams -show_format input.mkv

これは、ffmpeg コマンドを作成する前に、ストリームインデックス、コーデック名、再生時間、メタデータを確認する最速の方法です。

実用的なフラグ #

  • -shortest は最短のストリームが終了した時点で停止します。
  • -movflags +faststart は MP4 メタデータを先頭に移動します。
  • -y は出力ファイルを上書きします。
  • -hide_banner はスクリプト出力を短く保ちます。
  • -loglevel error は情報メッセージを抑制します。

参考資料 #

コメント

GitHub で閲覧・コメントする(投稿にはログインが必要です)