FFmpegを使って動画編集をする
- FFmpeg(エフエフエムペグ)とは?
- FFmpegでできること
- FFmpegのインストール方法
- FFmpegの使い方
- 【番外・超応用】動画の隅に別の動画を小さく入れる
- 他オプションの確認
- コーデック一覧
FFmpegというフリーソフトを最近知りまして、大変便利だったのでご紹介します。
自分用のコマンドメモでもある。
FFmpeg(エフエフエムペグ)とは?
動画・音声を編集できるフリーソフトです。FFmpegのサイトで配布されています。
Mac OSでもWindowsでもUbuntuでも利用できます。
コマンドラインから実行するCUIアプリなためターミナルを使い慣れていない方には少しとっつきにくいという部分はありますが、軽いですし大抵の編集が可能です。 動画編集ソフトで完全無料かつ制限なく色々なことができるソフトも少ないですのでインストールしておいて損はないのでは…?と思います。
FFmpegでできること
あまりに多岐に渡るのですが、大抵のことは可能です。
- 拡張子の変換(mp4→gifやmov→mp4など)
- 圧縮
- 音声の抜き出し
- 回転
- 動画をフレームで切り出して静止画にする(フレームレート指定可)
- 静止画を動画にする(フレームレート指定可)
- 音量を大きく、または小さくする
など。
FFmpegのインストール方法
私が使用しているのがMacなためMacでのダウンロード方法のみです。
HomeBrewを使用してインストールしていきます。 HomeBrewをインストールしていない方は先にインストールを終わらせてから進めてください。
FFmpegのインストール方法は至って簡単です。
以下のコマンドを実行します。
brew install ffmpeg
FFmpegのコマンドを実行してみてエラーが出なかったらインストール成功です。
以下のコマンドでインストールしたFFmpegのバージョンが確認できます。(バージョンが表示されていればインストールが完了しています。)(ffmpeg -v
でいけるかと思ったけど無理でした。)
ffmpeg -version
試しに動画情報をみるコマンドを紹介しておきます。
ffprobe sample.gif
以下gifアニメの場合の実行結果です。
ffprobe version 4.2.2 Copyright (c) 2007-2019 the FFmpeg developers built with Apple clang version 11.0.0 (clang-1100.0.33.17) configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack libavutil 56. 31.100 / 56. 31.100 libavcodec 58. 54.100 / 58. 54.100 libavformat 58. 29.100 / 58. 29.100 libavdevice 58. 8.100 / 58. 8.100 libavfilter 7. 57.100 / 7. 57.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 5.100 / 5. 5.100 libswresample 3. 5.100 / 3. 5.100 libpostproc 55. 5.100 / 55. 5.100 Input #0, gif, from 'sample.gif': Duration: 00:00:05.90, start: 0.000000, bitrate: 5090 kb/s Stream #0:0: Video: gif, bgra, 500x313, 10 fps, 10 tbr, 100 tbn, 100 tbc
※ちなみにインストール後に同じコマンドを打つと、アップデートがある際にはそのままアップデートをしてくれます。
FFmpegの使い方
やっとここまできました。実際にコマンドを紹介します。
基本的な使い方としては以下です。
ffmpeg -i 変換前のファイル オプション 変換後のファイル名
よく使いそうなものを抜粋します。
動画の拡張子(フォーマット)を変換
$ ffmpeg -i original_file.mov output_file.mp4
この方法でmp4に変換するとMacのQuickTimeでは開けなくなるそう。
-pix_fmt yuv420p
などのオプションが必要みたいです。
$ ffmpeg -i original_file.mov -pix_fmt yuv420p output_file.mp4
動画のフレームレートを変更
$ ffmpeg -i original_file.avi -r 10 output_file.avi
出力先の拡張子を変えればフォーマットの変換も同時にできます。
動画のサイズを変更
アスペクト比を維持したままリサイズする
例:横幅1280px、縦幅はアスペクト比を維持したまま自動で計算。
$ ffmpeg -i original_file.mp4 -vf scale=1280:-1 output_file.mp4
例:縦幅720px
ffmpeg -i original_file.mp4 -vf scale=-1:720 output_file.mp4
16:9の解像度
通称 | width(px) | height(px) | FFmpegのオプション |
---|---|---|---|
8K | 7680 | 4320 | -s 7680x4320 |
4K | 3840 | 2160 | -s 3840x2160 |
WQHD | 2560 | 1440 | -s 2560x1440 |
FHD | 1920 | 1080 | -s 1920x1080 |
WXGA++ | 1600 | 900 | -s 1600x900 |
HD | 1280 | 720 | -s 1280x720 |
1024 | 576 | -s 1024x576 | |
768 | 432 | -s 768x432 | |
640 | 360 | -s 640x360 | |
480 | 270 | -s 480x270 | |
320 | 180 | -s 320x180 | |
160 | 90 | -s 160x90 |
動画を回転させる
$ ffmpeg -i original_file.mp4 -vf "transpose=1" output_file.mp4
番号 | 説明 |
---|---|
1 | 90度 時計まわりに回転 |
2 | 90度 時計反まわりに回転 |
3 | 90度 時計まわり回転後、上下を反転 |
0 | 90度 時計反まわり回転後、上下を反転 |
動画の音声を消す
$ ffmpeg -i original_file.mp4 -an output_file.mp4
動画の音声を抽出する
例:original_file.mp4という動画から音声を抽出、music.aacで保存
$ ffmpeg -i original_file.mp4 -vn -acodec copy music.aac
元の動画ファイルで使用されている音声コーデックはffprobe
を使用することで確認できます。
$ ffprobe original_file.mov ffprobe version 4.2.2 Copyright (c) 2007-2019 the FFmpeg developers built with Apple clang version 11.0.0 (clang-1100.0.33.17) #省略 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/soto/Downloads/original_file.mov': Metadata: major_brand : qt minor_version : 512 compatible_brands: qt encoder : Lavf58.29.100 Duration: 00:00:03.42, start: 0.000000, bitrate: 597 kb/s Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 478 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default) Metadata: handler_name : Core Media Video encoder : Lavc58.54.100 libx264 Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default) Metadata: handler_name : Core Media Audio
下から3行めのところにあるAudio: aac
が音声コーデックです。
音声コーデックを変換して保存する(音声フォーマットをこちら側で指定する)
$ ffmpeg -i orignal_file.mp4 -f mp3 -ab 192000 -vn music.mp3
オプション | 内容 |
---|---|
-f |
音声コーデックを指定する 例:-f mp3 |
-ab |
音声コーデックのビットレートを指定する。例: -ab 192000(192000 = 192kbps) |
動画を圧縮する
$ ffmpeg -i original_file.mp4 -crf 30 output_file.mp4
数値が大きくなるほど圧縮率が上がります。 スマートフォンなどで撮った動画だと30程度で半分程度の圧縮率のようです。
連番画像を動画に変換する
例: img_001.png img_002.png Img_003.png.....
のような連番画像を例にします。
フレームレートは30に指定。
$ ffmpeg -framerate 30 -i img_%03d.png -vcodec libx264 -pix_fmt yuv420p output_file.mp4
例:画像が30枚として、5回繰り返して5秒の動画を作りたい場合。
フレームレートを2度指定します。
$ ffmpeg -framerate 30 -i img_%03d.png -vcodec libx264 -pix_fmt yuv420p -r 150 output_file.mp4
コマ落ち回避
以上の2つの例では1回目のフレームレートオプションを-r
ではなく-framerate
で指定しています。
2度-r
を使用するとコマ落ちしてしまうことがあるそうです。
参考:saveVideo: ffmpeg drops frames (use -framerate on input)(github)
連番画像から逆再生動画を作成
-vf reverse
オプションを追加
数値の大きいものから読み込んで動画にします。
$ ffmpeg -framerate 30 -i img_%03d.png -vcodec libx264 -pix_fmt yuv420p -vf reverse -r 60 output_file.mp4
動画から連番画像を作成
特に指定がない場合、フレームレートは元動画にしたがう。
pngの連番画像を出力
例:pngで出力。30秒、10fpsの動画を300枚の画像にする。
$ ffmpeg -i original_file.mp4 -vcodec png img_%03d.png
jpgの連番画像を出力
例:jpgで出力。30秒、30fpsの動画を10fps300枚の画像にする。
オプションは-vcodec mjpeg
にする
$ ffmpeg -i original_file.mp4 -vcodec png -r 10 img%03d.png
FLACを AACに高音質のまま変換
-aac_coder twoloop
を指定。
ffmpeg -i original_file.flac -b:a 192k -aac_coder twoloop output_file.m4a
一般亭なエンコーダはtwoloop
がfast
になっている。twoloop
にするとエンコーダの精度が上がる。
【番外・超応用】動画の隅に別の動画を小さく入れる
$ ffmpeg -i main_file.mp4 -i sub_file.mp4 -filter_complex "[1]scale=iw/2:ih/2 [pip]; [0][pip] overlay=main_w-overlay_w-20:main_h-overlay_h-20" -profile:v main -level 3.1 -b:v 440k -ar 44100 -ab 128k -s 1920x1000 output_file.mp4
他オプションの確認
$ ffmpeg -h full
コーデック一覧
映像コーデック
コーデック名 | 形式 |
---|---|
libx264 | MPEG-4,x264(.mp4) |
h264 | MPEG-4,H.264(.mp4) |
hevc | H.265(.mp4) |
flv1 | Flashムービー(.flv) |
mjpeg | Motion JPEG(.jpeg) |
mpeg1video | MPEG-1 Video(.mpg) |
mpeg2video | MPEG-2 Video(.m2ts、.vob) |
msvideo1 | Microsoft Video(.avi) |
vp3 | VP3(.avi、.mov、.mkv) |
vp6 | VP6(.avi、.mkv、.tc7) |
vp6a | VP6(Flash用、アルファチャンネル対応) (.flv) |
vp6f | VP6(Flash用) (.flv) |
vp7 | VP7(.avi) |
vp8 | VP8(.webm、.avi) |
vp9 | Google VP9 |
wmv1 | Windows Media Player 7向け |
wmv2 | Windows Media Player 8向け |
wmv3 | Windows Media Player 9向け |
音声コーデック
コーデック名 | 形式 |
---|---|
libmp3lame | MPEG audio layer 3 |
aac | Advanced Audio Coding |
alac | Apple Lossless |
flac | Free Lossless Audio Codec |
on2 | |
mp1 | MPEG audio layer 1 |
mp2 | MPEG audio layer 2 |
mp3 | MPEG audio layer 3 |
opus | Opus(webm) |
pcm_s16le | PCM 16bit(WAVファイル) |
pcm_s24le | PCM 24bit(WAVファイル) |
vorbis | Vorbis(OGGファイル) |
wmav1 | Windows Media Audio 1(WMAファイル) |
wmav2 | Windows Media Audio 2(WMAファイル) |
なんでもできる。。。