FFmpeg入門チュートリアル:初心者向け30の実践コマンド
FFmpegは動画処理のスイスアーミーナイフです。コマンドライン一つでフォーマット変換、圧縮、結合、切り取り、スクリーンショット、ストリーミングなどほぼすべての動画処理ができます。このチュートリアルでは、インストールから30の実用コマンドまでをカバーします。
FFmpegとは
FFmpegは1993年にスタートしたオープンソースのマルチメディア処理フレームワークです:
- 包括的:エンコード、デコード、変換、ストリーミング、フィルタリング
- クロスプラットフォーム:Windows、macOS、Linux
- 無料:LGPL/GPLライセンス
- 強力:VLC、OBS、YouTube、Netflixが内部で使用
コアコンポーネント
- ffmpeg:メインプログラム、変換と処理
- ffprobe:メタデータ分析
- ffplay:シンプルなプレビュー
- libavcodec:コーデックライブラリ
- libavformat:コンテナライブラリ
- libavfilter:フィルターライブラリ
インストール
macOS
bash
brew install ffmpegUbuntu/Debian
bash
sudo apt update
sudo apt install ffmpegWindows
- ffmpeg.orgからダウンロード
- 解凍して任意のディレクトリに配置
- PATHに追加
インストール確認
bash
ffmpeg -version
ffprobe -version基本概念
コマンド構文
bash
ffmpeg [入力オプション] -i 入力ファイル [出力オプション] 出力ファイル重要なパラメータ
| パラメータ | 説明 | 例 |
|---|---|---|
-i | 入力ファイル | -i input.mp4 |
-c:v | ビデオコーデック | -c:v libx264 |
-c:a | オーディオコーデック | -c:a aac |
-b:v | ビデオビットレート | -b:v 4M |
-b:a | オーディオビットレート | -b:a 128k |
-crf | 品質(H.264/H.265) | -crf 23 |
-preset | エンコード速度 | -preset slow |
-vf | ビデオフィルター | -vf "scale=1280:720" |
-af | オーディオフィルター | -af "volume=2" |
-ss | 開始時間 | -ss 00:01:00 |
-t | 長さ | -t 60 |
-r | フレームレート | -r 30 |
-s | 解像度 | -s 1280x720 |
-vn | ビデオなし | -vn |
-an | オーディオなし | -an |
-c copy | ストリームコピー | -c copy |
30の実用コマンド
フォーマット変換(1-5)
1. MP4からMKVへ
bash
ffmpeg -i input.mp4 -c copy output.mkv2. MKVからMP4へ
bash
ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp43. WebMからMP4へ
bash
ffmpeg -i input.webm -c:v libx264 -crf 23 -c:a aac output.mp44. AVIからMP4へ
bash
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac output.mp45. MOVからMP4へ
bash
ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac output.mp4圧縮と品質(6-10)
6. H.264圧縮
bash
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a aac -b:a 128k output.mp47. H.265圧縮(より小さい)
bash
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset slow -c:a aac -b:a 128k output.mp48. 解像度変更
bash
# 720p
ffmpeg -i input.mp4 -vf "scale=-1:720" -c:v libx264 -crf 23 -c:a aac output.mp4
# 480p
ffmpeg -i input.mp4 -vf "scale=-1:480" -c:v libx264 -crf 23 -c:a aac output.mp49. フレームレート変更
bash
# 30fps
ffmpeg -i input.mp4 -r 30 -c:v libx264 -crf 23 -c:a aac output.mp4
# 24fps(シネマ風)
ffmpeg -i input.mp4 -r 24 -c:v libx264 -crf 23 -c:a aac output.mp410. ビットレート指定
bash
ffmpeg -i input.mp4 -c:v libx264 -b:v 4M -maxrate 4M -bufsize 8M -c:a aac -b:a 128k output.mp4切り取りと結合(11-15)
11. 時間で切り取り
bash
# 1分から5分間
ffmpeg -ss 00:01:00 -t 00:05:00 -i input.mp4 -c copy output.mp4
# 1分から最後まで
ffmpeg -ss 00:01:00 -i input.mp4 -c copy output.mp412. 結合(concat demuxer)
bash
# list.txt
# file 'part1.mp4'
# file 'part2.mp4'
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp413. スクリーンショット
bash
# 1秒目のフレーム
ffmpeg -ss 1 -i input.mp4 -vframes 1 output.png
# 5秒目
ffmpeg -ss 5 -i input.mp4 -vframes 1 output.jpg
# 10秒ごとにスクリーンショット
ffmpeg -i input.mp4 -vf "fps=1/10" screenshot_%03d.png14. GIF作成
bash
# 基本GIF
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1" output.gif
# 高品質GIF(二段階)
ffmpeg -i input.mp4 -vf "palettegen" palette.png
ffmpeg -i input.mp4 -i palette.png -filter_complex "paletteuse" output.gif15. 画像からビデオ作成
bash
# 画像シーケンスからビデオ
ffmpeg -framerate 30 -i image_%03d.png -c:v libx264 -crf 23 output.mp4
# 単一画像から10秒のビデオ
ffmpeg -loop 1 -i image.jpg -t 10 -c:v libx264 -crf 23 output.mp4音声処理(16-20)
16. 音声抽出
bash
# MP3に抽出
ffmpeg -i input.mp4 -vn -acodec libmp3lame -b:a 192k output.mp3
# AACに抽出
ffmpeg -i input.mp4 -vn -acodec aac -b:a 192k output.m4a17. 音声追加
bash
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp418. 音声置換
bash
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v -map 1:a output.mp419. 音量調整
bash
# 2倍の音量
ffmpeg -i input.mp4 -af "volume=2" -c:v copy output.mp4
# 半分の音量
ffmpeg -i input.mp4 -af "volume=0.5" -c:v copy output.mp420. 音声正規化
bash
ffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11" -c:v copy output.mp4ストリーミング(21-25)
21. HLSスライス
bash
ffmpeg -i input.mp4 -c copy -f hls -hls_time 6 -hls_segment_filename "segment_%03d.ts" playlist.m3u822. AES-128暗号化HLS
bash
ffmpeg -i input.mp4 -c copy -f hls -hls_time 6 -hls_key_info_file key_info.txt -hls_segment_filename "segment_%03d.ts" playlist.m3u823. DASHセグメント
bash
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f dash -seg_duration 2 output.mpd24. RTMPプッシュ
bash
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 4000k -c:a aac -b:a 128k -f flv "rtmp://server/live/key"25. スクリーン録画
bash
# Linux
ffmpeg -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0 output.mp4
# macOS
ffmpeg -f avfoundation -framerate 30 -i "1" output.mp4高度な処理(26-30)
26. 字幕追加
bash
# ソフト字幕
ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp4
# ハード字幕
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" -c:a copy output.mp427. ウォーターマーク追加
bash
# 右下にロゴ
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" -c:a copy output.mp428. ビデオ回転
bash
# 90度回転
ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4
# 180度回転
ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" -c:a copy output.mp429. クロップ
bash
# 中央16:9領域をクロップ
ffmpeg -i input.mp4 -vf "crop=1920:1080:0:0" -c:a copy output.mp430. メタデータ確認
bash
ffprobe -v error -show_format -show_streams -of json input.mp4よくあるエラーと解決策
| エラー | 原因 | 解決策 |
|---|---|---|
Unknown encoder | コーデック未サポート | FFmpegを再コンパイル |
Invalid data found | 入力ファイル破損 | ファイルを確認 |
Conversion failed | パラメータエラー | コマンドを確認 |
No such file | ファイルパスエラー | パスを確認 |
Permission denied | 権限不足 | 権限を確認 |
まとめ
FFmpegは動画処理の強力なツールです。このチュートリアルで紹介した30のコマンドは、日常的な動画処理の90%をカバーします:
- フォーマット変換:
-c copyで無劣化、-c:v libx264で再エンコード - 圧縮:
-crfで品質制御、-presetで速度制御 - 切り取り:
-ssと-tで時間指定 - 結合: concat demuxerを使用
- ストリーミング:
-f hls、-f dash、-f flv
クイックリファレンス:
- 基本構文:
ffmpeg -i input.mp4 [オプション] output.mp4 - 無劣化コピー:
-c copy - H.264圧縮:
-c:v libx264 -crf 23 - HLSスライス:
-f hls -hls_time 6 - メタデータ:
ffprobe -show_format -show_streams