1. インストール
公式サイトからビルド済みバイナリをダウンロードしてきます
https://ffmpeg.org/download.html
落としてきた圧縮ファイルを適当なフォルダに展開して、binフォルダにPATHを通せばインストール完了です
PATHが通ってれば以下のようにterminalから呼べるようになっている筈です
> ffmpeg
ffmpeg version 2021-03-07-git-a7f841718f-full_build-www.gyan.dev Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 10.2.0 (Rev6, Built by MSYS2 project)
2. helpを表示する
オプションを忘れたときには-hで確認できます
> ffmpeg -h
Getting help:
-h -- print basic options
-h long -- print more options
-h full -- print all options (including all format and codec specific options, very long)
-h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter/bsf/protocol
See man ffmpeg for detailed description of the options.
Print help / information / capabilities:
-L show license
-h topic show help
-? topic show help
-help topic show help
--help topic show help
-version show version
-buildconf show build configuration
-formats show available formats
-muxers show available muxers
-demuxers show available demuxers
-devices show available devices
-codecs show available codecs
-decoders show available decoders
-encoders show available encoders
対応しているファイル形式やコーデックを確認することも出来ます
ffmpeg -formats
ffmpeg -codecs
ffmpeg -protocols
3. 動画情報を取得する
ffprobeにファイルを渡すとファイルの情報を教えてくれます。-iが入力の指示で、その後にファイルパスを渡しています。
> ffprobe -i ファイルパス
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2021-03-09_20-20-21.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:18:37.67, start: 0.000000, bitrate: 5492 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 4997 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 161 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream #0:2(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 161 kb/s
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream #0:3(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
18分37秒の動画でbitrateが5492 kb/s、h264フォーマットのビデオトラックと、aacフォーマット48000Hzのオーディオトラックが3つ入っているようです。
4. 動画を加工して保存する
指定できるオプションは公式ドキュメントに一覧されています
https://ffmpeg.org/ffmpeg.html
公式ドキュメントは情報量が多すぎるので、初めて使う人はwikipediaのオプション一覧の方が分かりやすいかも
https://ja.wikipedia.org/
4-1. フォーマットを変更して保存する
-fでフォーマットを指定できます
ffmpeg -i input.mp4 -f avi output.avi
-fを省略した場合はファイル名の拡張子で推定して変換してくれます
ffmpeg -i input.mp4 output.avi
4-2. コーデックを変更する
ffmpeg -i input.mp4 -vcodec libx264 output.mp4
ffmpeg -i input.mp4 -acodec libfaac output.mp4
4-3. 再エンコードしない
codecにcopyを指定すると再エンコードしなくなるようです
ffmpeg -i input.mp4 -vcodec copy -acodec copy output.mp4
4-4. ビットレートを変更する
ffmpeg -i input.mp4 -vb 340k output.mp4
ffmpeg -i input.mp4 -ab 64k output.mp4
4-5. フレームレートを変更する
ffmpeg -i input.mp4 -r 120 output.mp4
4-6. リサイズする
ffmpeg -i input.mp4 -s 1920x1080 output.mp4
4-7. 時間範囲を指定して切り出す
ffmpeg -i input.mp4 -ss 10 -t 20 output.mp4
4-8. DVD-videoで書き出す
ffmpeg -i input.mp4 -target ntsc-dvd -aspect 16:9 output.mpg
4-9. 既にファイルがある場合も上書きする
書き出し先のファイルが既にある場合に上書きするかどうか聞かれますが、確認せずに上書き保存したい場合は-yを付けます
ffmpeg -i input.mp4 -y output.mp4
4-10. いろいろまとめて変更する
連ねて書いていけばまとめて適用してくれます
ffmpeg -i input.mp4 -vcodec libx265 -vb 340k -r 120 -s 1920x1080 -y output.mp4
5. 音声ファイルを書き出す
5-1. 音声のみ書き出す
-vnでビデオ書き出しを無効にすれば音声のみ書き出すことが出来ます
ffmpeg -i input.mp4 -f aac -vn -acodec libfaac -ab 128k output.aac
-vnを省いても音声フォーマットで書き出す場合はビデオの書き出しが無効なのは自明なのでそれでも良いようです
ffmpeg -i input.mp4 output.mp3
5-2. 指定した音声トラックのみ書き出す
ffprobeでトラック情報を取得すると、いくつ音声トラックが入っているか分かります。以下の場合はビデオトラックの0:0と0:1~0:3の3つの音声トラックが入っています。
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 161 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream #0:2(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 161 kb/s
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream #0:3(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
-mapで音声トラックを指定すれば、そのトラックに対して処理を行うことが出来ます
ffmpeg -i input.mp4 -map 0:2 -vn -acodec copy output.aac
6. 画像ファイルを書き出す
6-1. 連番画像で書き出す
ffmpeg -i input.mp4 -r 5 image%03d.png
6-2. gif画像で書き出す
ffmpeg -i input.mp4 output.gif
7. バッチファイルで処理する
ファイルパスをいちいち書きたくない場合はバッチファイルを使ってドラッグ&ドロップで出来るようにすると良いかもしれません
ffmpeg -i %~nx1 -map 0:1 -vn -acodec pcm_s16le 1.wav -map 0:2 -vn -acodec pcm_s16le 2.wav -map 0:3 -vn -acodec pcm_s16le 3.wav