FFmpeg は、音声と動画を録画、変換、ストリーミングするための完全なクロスプラットフォームソリューションです。これは私の FFmpeg 学習ノートです。ffmpeg を動画編集者および変換ツールとして使用します。fps を変更し、
.mp4
ファイルを.gif
や他のフォーマットに変換します。
概要#
FFmpeg は「Fast Forward Moving Pictures Experts Group」の略です。これは大規模なプロジェクトであり、以下の 3 つのコマンドラインツールを提供します。
fmpeg
: 動画と音声の変換ツール。ffplay
: メディアプレーヤー。ffprobe
: マルチメディアストリームから情報を収集します。
このノートは主にFFmpeg
のいくつかの使用法をレビューします。これは非常に便利です。ffplay
および ffprobe
のドキュメントはインターネットで入手可能で、確認するのが便利です。
インストール#
Windows#
FFmpegの公式サイトにアクセスし、CODEX FFMPEG @ gyan.devを選択し、「リリースビルド」セクションを見つけて、ffmpeg-release-full.7z
ファイルをダウンロードし、圧縮パッケージをローカルに解凍し、最後にffmpeg
をシステムパスに追加します。次に、powershell
に入力して、以下のようなログを取得します。
$ ffmpeg -version
ffmpeg version 5.0-full_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 11.2.0 (Rev5, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 57. 17.100 / 57. 17.100
libavcodec 59. 18.100 / 59. 18.100
libavformat 59. 16.100 / 59. 16.100
libavdevice 59. 4.100 / 59. 4.100
libavfilter 8. 24.100 / 8. 24.100
libswscale 6. 4.100 / 6. 4.100
libswresample 4. 3.100 / 4. 3.100
libpostproc 56. 3.100 / 56. 3.100
これでFFmpeg
が完全にインストールされたことを意味します。
以前のバージョンのFFmpeg
がある場合は、それらを削除する必要があります。
Ubuntu#
Ubuntu でFFmpeg
をインストールするのは、Windows と比べて非常に簡単です。apt
を使用してインストールします。
sudo apt install ffmpeg
使用法#
ffmpeg
を使用して動画を簡単なコマンドで編集するのは便利です。
情報#
以下のコマンドを使用して、動画の基本情報を表示できます。
ffmpeg -i <input file>
冗長な情報を隠したい場合は、-hide_banner
を追加します。
ffmpeg -i <input file> -hide_banner
トランスコーディング#
トランスコーディングとは、動画ファイルをあるエンコーディングから別のエンコーディングに変換することを意味します。例えば、H.264
エンコーディングからH.265
に変換する場合、通常はエンコーダlibx265
を使用します。コマンドは次のようになります。
ffmpeg -i <input file> -c:v libx265 <output file>
H.265 から H.264 に戻したい場合は、エンコーダをlibx264
に変更します。
トランスミュクシング#
トランスミュクシングとは、動画ファイルをあるコンテナから別のコンテナに転送することを意味します。コンテナを転送する際にはエンコーディングは変更されないため、非常に速いです。以下は.mp4
から.webm
への例です。
ffmpeg -i <input file>.mp4 -c copy <output file>.webm
上記のコマンドでは、-c copy
は直接コピーすることを意味し、トランスコーディングは行いません。
トランスレート#
トランスレートとは、ビットレートを調整することを意味し、ファイルのサイズを減らすために使用されることがよくあります。最大レート、最小レート、バッファを設定できます。例えば、最大レートに_3856K_、最小レートに_964K_、バッファサイズに_2000K_を設定します。コマンドは次のようになります。
ffmpeg -i <input file> -minrate <minimum rate> -maxrate <maximum rate> -bufsize <buffer> <output file>
トランスサイズ#
トランスサイズとは、動画の解像度を変更することを意味します1。スケールコントロールとも呼ばれます2。
動画が高解像度ファイルで、サイズを減らすためにスケールダウンしたい場合、スケールコントロールコマンドを使用できます。
ffmpeg -i <input file> -vf scale=<width>:<height>:flags=lanczos <output file>
lanczos
はズームのアルゴリズムであり、出力ファイルの幅をソース動画の幅の半分に、そして高さを比例的にスケールしたい場合、次のようにスケールを設定します。
ffmpeg -i <input file> -vf scale=iw/2:-1 :flags=lanczos <output file>
iw
は動画の幅を意味し、明らかにih
は動画の高さを意味し、-1
は比例的にズームすることを意味します。また、幅と高さのピクセルを設定することもできます。480p の動画を取得したい場合は、幅を 480 に設定します。
ffmpeg -i <input file> -vf scale=480:-1 <output file>
デマルクシング#
デマルクシングとは、動画から音声を抽出することを意味します。次のように行います。
ffmpeg -i <input file>.mp4 -vn -c:a copy <output file>.aac
上記のコマンドでは、-vn
は動画を削除することを意味し、-c:a copy
は音声エンコーディングが変更されず、直接コピーされることを示します。
マルクシング#
マルクシングとは、動画に外部音声を追加することを意味します。例えば、バックグラウンドミュージックやナレーションを追加することです3。
ffmpeg -i <input file>.aac -i <input file>.mp4 <output file>.mp4
2 つの入力ファイルがあり、1 つは音声、もう 1 つは動画で、FFmpeg
がそれらを 1 つに結合します。
スクリーンショット#
スクリーンショットには開始時間と終了時間が必要で、開始時間から終了時間まで連続してスクリーンショットを取得します。
ffmpeg -y -i <input file> -ss <start time> -t <last time> <output file>_%3d.png
もし 1 フレームのスクリーンショットだけが必要な場合も可能です。
ffmpeg -ss <cut time> -i <input file> -vframes 1 -q:v 2 <output>.png
上記のコマンドでは、-vframes 1
は 1 フレームだけをキャプチャすることを指定し、-q:v 2
は出力画像の品質を示します。通常、これは1
から5
の間であり(1
が最高品質です)。
カット#
通常、動画の一部だけが必要な場合、開始時間と終了時間または終了時刻でカットできます。
ffmpeg -ss <start time> -i <input file> -t <last time> -c copy <output file>
ffmpeg -ss <start time> -i <input file> -to <end time> -c copy <output file>
時間単位は秒で、00:00:00.000
のような形式も使用できます。これは時間:分:秒.ポイント
を表します。-c copy
は音声と動画のエンコーディング形式を変更せず、直接コピーすることを意味し、これにより非常に速くなります。
ループ#
.gif
ファイルや他のアニメーション画像に変換する場合、ループ回数を設定できます。基本的には1
が 1 回、0
が無限です。
ffmpeg -i <input file> -loop <loop times> <output file>
調整#
FFmpeg を使用すると、動画の再生速度を調整できます。動画の再生速度を上げるには、次のコマンドを実行します。
ffmpeg -i <input file> -vf "setpts=0.5*PTS" <output file>
このコマンドは動画の速度を 2 倍にします。動画を遅くするには、1
より大きいパラメータを使用する必要があります。例えば、
ffmpeg -i <input file> -vf "setpts=4.0*PTS" <output file>
圧縮#
GIF#
.mp4
ファイルのような動画を.gif
アニメーションに変換するのは簡単です。以下のコマンドを使用します。
ffmpeg -i <input>.mp4 <output>.gif
デフォルトの変換は中品質モードであり、高品質の gif に変換するにはビットレートを変更できます。
ffmpeg -i <input>.mp4 -b 2048k <output>.gif
ffmpeg -i <input>.mp4 -lossless 1 <output>.gi
また、gif
ファイルを他のフォーマットに変換することもできます。
ffmpeg -f gif -i <input>.gif <output file>
WEBP#
以下のコマンドラインは、<input.mp4>
という名前のファイルを、サイズ800:600
でロスレス、ループ再生されるファイル<output.webp>
に変換します。
ffmpeg -i <input>.mp4 -vcodec libwebp -filter:v fps=fps=20 -lossless 1 -loop 0 -preset default -an -vsync 0 -s 800:600 <output>.webp
出力されたoutput.webp
アニメーションが 1 回だけ再生されるようにしたい場合、ロスのある圧縮レベルは 3(0-6、デフォルトは 4、数値が大きいほど効果が良くなります)、品質は 70(0-100、デフォルトは 75、数値が大きいほど効果が良くなります)に設定します。
ffmpeg -i <input>.mp4 -vcodec libwebp -filter:v fps=fps=20 -lossless 0 -compression_level 3 -q:v 70 -loop 1 -preset picture -an -vsync 0 -s 800:600 <output>.webp
参考#
- 公式ドキュメントを参照してください: FFmpeg Documentation →。
- FFmpeg を使用して動画を gif に変換する。
- FFmpeg の便利なコマンド。