ffmpeg
ffmpeg は強力 なクロスプラットフォームマルチメディア処理 ツールで、動画 ・音声 の変換 、編集 、ストリーミングなどの操作 が可能 です。
基本構文
ffmpeg [global options] [[infile options] -i infile]... {[outfile options] outfile}...| 区分 | 説明 |
|---|---|
global options | グローバルオプション。変換プロセス全体に影響(例:-y 自動上書き、-loglevel 出力詳細度設定)。 |
infile options | 入力ファイルまたはストリームへのパラメータ設定(例:開始時間 -ss、フォーマット指定 -f、デコーダ指定など)。 |
-i infile | 入力ソースを指定。ローカルファイル、リモートストリーム(HTTP/HTTPS)、HLS プレイリスト、RTSP/RTMP ストリーム、カメラデバイスなど。 |
outfile options | 各出力ファイルへの設定オプション(例:変換フォーマット、エンコーダ指定 -c:v、ビットレート、フィルタなど)。 |
outfile | 出力ファイル名とフォーマット。拡張子で出力フォーマットを決定。rtmp://、udp:// などのストリームエンドポイントも指定可能。 |
入力ソース例
| 入力ソースタイプ | 例 | 説明 |
|---|---|---|
| ローカルファイル | -i video.mp4 | 一般的な変換用 |
| HTTP ストリーム | -i https://example.com/clip.mp4 | リモート動画を直接読み取り |
| HLS プレイリスト | -i https://example.com/stream.m3u8 | HLS ストリーム形式、ライブまたは VOD 対応 |
| RTMP ストリーム | -i rtmp://a.rtmp.server/live/123 | ライブストリーミングプラットフォームで使用 |
| カメラデバイス | -i /dev/video0 | Webcam 入力を読み取り(Linux) |
| デスクトップ録画 | -f x11grab -i :0.0 | デスクトップ画面を録画(Linux、-f が必要) |
出力先例
| 出力先タイプ | 例 | 説明 |
|---|---|---|
| AAC 音声出力 | output.aac | 音声抽出または .aac 形式に変換 |
| MP4 出力 | output.mp4 | 最も一般的な形式 |
| HLS 出力 | output.m3u8 + -f hls | 動画を HLS プレイリストに変換 |
| RTMP プッシュ | rtmp://live.server/app/stream | ライブストリーミングとして出力 |
| 音声デバイス出力 | -f alsa default (Linux) | サウンドカードに再生 |
ヘルプコマンド
| コマンド | 説明 |
|---|---|
-h | 基本オプションを表示 |
-h long | より多くのオプションを表示 |
-h full | すべてのオプションを表示(codec とフォーマットの詳細を含む) |
-h type=name | 指定コンポーネント(デコーダ/エンコーダなど)のオプションを表示 |
man ffmpeg | 完全なマニュアルを表示(Linux/Unix システム) |
機能/能力オプション
| コマンド | 説明 |
|---|---|
-L | ライセンス条項を表示 |
-version | ffmpeg バージョンを表示 |
-muxers | 利用可能な muxers(コンテナ化)を表示 |
-demuxers | 利用可能な demuxers(デコンテナ化)を表示 |
-devices | 利用可能なデバイス一覧を表示 |
-decoders | 利用可能なデコーダを表示 |
-encoders | 利用可能なエンコーダを表示 |
-filters | 利用可能なフィルタを表示 |
-pix_fmts | ピクセルフォーマットを表示 |
-layouts | 標準チャンネルレイアウトを表示 |
-sample_fmts | 音声サンプルフォーマットを表示 |
グローバルオプション
| オプション | 説明 |
|---|---|
-v <loglevel> | ログレベルを設定(quiet, panic, fatal, error, warning, info, verbose, debug) |
-y | 既存の出力ファイルを自動上書き |
-n | 同名ファイルがある場合は上書きしない |
-stats | 処理進捗を表示 |
-print_graphs | 実行グラフデータを stderr に出力 |
-print_graphs_file <filename> | グラフを指定ファイルに出力 |
-print_graphs_format <format> | グラフ出力形式を指定(default, csv, json, xml, mermaid など) |
入力/出力ファイルオプション
共通(入力と出力両方に適用)
| オプション | 説明 |
|---|---|
-f <fmt> | コンテナ形式を強制指定(それ以外は自動判定) |
-t <duration> | 持続時間を設定(秒) |
-to <time_stop> | 停止時点を設定(HH:MM:SS) |
-ss <time_off> | 開始時点を設定 |
出力のみ
| オプション | 説明 |
|---|---|
-metadata[:<spec>] key=value | 出力ファイルに metadata を追加 |
ストリームごとのオプション
| オプション | 説明 |
|---|---|
-c[:<stream_spec>] <codec> | 使用するエンコーダ/デコーダを指定(copy で再エンコードなし) |
-filter[:<stream_spec>] <filter_graph> | 指定ストリームにフィルタを適用 |
stream_spec は以下が可能:
- 整数番号(0, 1, 2…)
v(ビデオ)a(オーディオ)s(字幕)
ビデオオプション
| オプション | 説明 |
|---|---|
-r[:<stream_spec>] | フレームレートを設定 |
-aspect[:<stream_spec>] | アスペクト比を設定(例:16:9、4:3) |
-vn | ビデオを削除(音声のみ出力) |
-vcodec <codec> | -c:v のエイリアス、ビデオエンコーダを指定 |
-vf <filter_graph> | -filter:v のエイリアス、ビデオフィルタを適用 |
-b | ビットレートを設定(-b:v を使用推奨) |
オーディオオプション
| オプション | 説明 |
|---|---|
-aq | 音声品質を設定(codec により異なる) |
-ar[:<stream_spec>] | サンプリングレートを設定(Hz) |
-ac[:<stream_spec>] | チャンネル数を設定(モノラル 1、ステレオ 2) |
-an | 音声を削除(ビデオのみ出力) |
-acodec <codec> | -c:a のエイリアス、音声エンコーダを設定 |
-ab <bitrate> | -b:a のエイリアス、音声ビットレートを設定 |
-af <filter_graph> | -filter:a のエイリアス、音声フィルタを適用 |
字幕オプション
| オプション | 説明 |
|---|---|
-sn | 字幕を削除 |
-scodec <codec> | -c:s のエイリアス、字幕エンコーダを指定 |
入力処理
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.mp4 output.mp4 | ローカルファイルを読み取り |
ffmpeg -i https://xxx.m3u8 -c copy output.ts | HLS ストリームをダウンロードして保存 |
ffmpeg -i rtmp://live.server/app/stream -c copy out.flv | RTMP ストリームをキャプチャ |
ffmpeg -protocol_whitelist "file,http,https,tcp,tls,crypto" -i "https://xxx.m3u8" -c:a copy -vn output.aac | HLS 音声をダウンロード |
動画カット(再エンコードなし)
| コマンド例 | 説明 |
|---|---|
ffmpeg -ss 00:00:30 -t 00:00:10 -i input.mp4 -c copy cut.mp4 | 30 秒から 10 秒間をカット(高速) |
ffmpeg -i input.mp4 -ss 30 -t 10 -c:v copy -c:a copy out.mp4 | 同上、音声/ビデオのコピーを明示 |
音声処理
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.mp4 -vn -acodec copy output.aac | AAC 音声を抽出 |
ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -b:a 192k out.mp3 | MP3 に変換(サンプリングレートとビットレート設定) |
ffmpeg -i input.wav -filter:a "volume=1.5" output.wav | 音量を上げる(1.5 倍) |
ビデオ処理
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.mp4 -an -vcodec copy output.mp4 | 音声を削除、ビデオのみ保持 |
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4 | 解像度を 1280x720 に調整 |
ffmpeg -i input.mp4 -r 30 output.mp4 | 出力を 30 FPS に設定 |
ffmpeg -i input.mp4 -vf "transpose=1" rotated.mp4 | 動画を時計回りに 90 度回転 |
フレーム抽出 / スクリーンショット
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 shot.png | 5 秒目の画面を画像として抽出 |
ffmpeg -i input.mp4 -vf fps=1 frames/out%d.png | 毎秒 1 フレームを抽出 |
フォーマット変換
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4 | MOV → MP4(x264 + AAC) |
ffmpeg -i input.mp4 -c:v libvpx -c:a libvorbis output.webm | MP4 → WebM |
ffmpeg -i input.mp4 -c:v copy -c:a copy output.mkv | 無損失コンテナ変換(MP4 → MKV) |
ストリーミング配信
| コマンド例 | 説明 |
|---|---|
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/app/key | ローカル動画を RTMP プラットフォームにプッシュ |
ffmpeg -i input.mp4 -f hls out/index.m3u8 | 動画を HLS 形式に分割 |
出力設定とその他のテクニック
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.mp4 -metadata title="My Video" out.mp4 | 動画タイトル metadata を設定 |
ffmpeg -i input.mp4 -movflags faststart output.mp4 | MP4 の先頭を高速再生対応に(ウェブストリーミング向け) |
ffmpeg -i input.mp4 -map 0 -c copy -f segment -segment_time 10 out%03d.mp4 | 動画を 10 秒ごとにセグメント分割 |
ウォーターマーク追加
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.mp4 -vf "drawtext=text='Hello':fontcolor=white:x=10:y=10" -c:a copy out.mp4 | 左上に白いテキストウォーターマークを追加 |
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" -c:a copy out.mp4 | 画像ウォーターマークを追加(左上位置) |
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" out.mp4 | ウォーターマークを右下に配置(幅高さ変数使用) |
音声圧縮と処理
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.wav -c:a aac -b:a 96k output.m4a | 音声を AAC 96kbps に圧縮 |
ffmpeg -i input.mp4 -filter:a "volume=0.5" output.mp4 | 音量を半分に下げる |
ffmpeg -i input.mp4 -af "highpass=f=200, lowpass=f=3000" out.mp4 | ハイパス/ローパスフィルタを適用 |
動画圧縮
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow -acodec aac -b:a 96k out.mp4 | 動画ファイルを圧縮(画質中程度、音声圧縮) |
ffmpeg -i input.mp4 -vf scale=1280:-2 -c:v libx264 -crf 30 out.mp4 | 解像度を縮小して圧縮 |
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac out.mp4 | H.265 で圧縮(より効率的) |
-crf の値が高いほど圧縮が大きくなります(画質は低下)。推奨範囲:23(高画質)~30(小ファイル)動画クロップ
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.mp4 -filter:v "crop=640:480:0:0" out.mp4 | 640x480 領域をクロップ(左上から開始) |
ffmpeg -i input.mp4 -filter:v "crop=in_w-100:in_h:50:0" out.mp4 | 左右をクロップ、幅を 100 減らし、x 開始点を 50 に |
動画 / 音声の結合
再エンコードなしで MP4 を結合(同じフォーマットが必要)
# まず input.txt を作成:
# file 'part1.mp4'
# file 'part2.mp4'
ffmpeg -f concat -safe 0 -i input.txt -c copy output.mp4音声と動画を結合
ffmpeg -i video.mp4 -i audio.m4a -c:v copy -c:a aac -strict experimental out.mp4動画の速度変更
| コマンド例 | 説明 |
|---|---|
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4 | 2 倍速 |
ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" output.mp4 | 0.5 倍速(スローモーション) |
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" out.mp4 | 動画高速化 + 音声同期処理 |
CRF と Preset の圧縮への影響
| パラメータ | 説明 |
|---|---|
-crf N | Constant Rate Factor:値が大きいほど圧縮が大きい(範囲 18~30、デフォルト 23) |
-preset | エンコード速度オプション:ultrafast、superfast、fast、medium、slow、veryslow。遅いほど圧縮効率が高い。 |
GIF 作成
ffmpeg -i input.mp4 -ss 00:00:05 -t 3 -vf "fps=10,scale=320:-1:flags=lanczos" out.gif5 秒目から 3 秒間を GIF に変換。
RTP / SDP ストリーミング
MP4 を読み取って RTP でプッシュ
ffmpeg -re -i "input.mp4" -protocol_whitelist file,rtp,udp -map 0:v -c:v libx265 -c:a libmp3lame -f rtp rtp://127.0.0.1:20003SDP ファイルを読み取り
ffmpeg -analyzeduration 5000000 -probesize 5000000 -protocol_whitelist file,crypto,udp,rtp -i test.sdp -vcodec libx264 -y out.h264SDP ストリームを録画
ffmpeg -i a.sdp -protocol_whitelist "file,http,https,rtp,udp,tcp,tls" -vcodec copy -acodec aac -y output.mp4ffplay 再生
# MP4 を再生
ffplay video.mp4 -vf scale=800:600 -af volume=0.2
# SDP ストリームを再生
ffplay -i test.sdp -protocol_whitelist "file,udp,rtp" -vf scale=800:600 -af volume=0.2主要 Flag 説明
| Flag | 説明 |
|---|---|
-c:v | ビデオエンコーダを設定 |
-c:a | 音声エンコーダを設定 |
-an | 音声を削除 |
-vn | ビデオを削除 |
-re | リアルタイム速度で入力を読み取り、ストリーミング向け |
-map 0 | ソースファイルのすべてのストリームを使用 |
-b:v | ビデオビットレートを設定 |
-crf | Constant Rate Factor を設定 |
-pix_fmt | ピクセルフォーマットを指定(例:yuv420p, rgb24) |
-protocol_whitelist | 許可するプロトコルを指定 |
-f rtp | 出力形式を RTP に設定 |