banner
Sereinme

Sereinme

无聊中的夏日闲话
github
zhihu
email
jike
steam_profiles

📽️FFmpeg

ffmepg

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

参考#

参考#

Footnotes#

  1. n. 解像度

  2. n. スケール;範囲;程度;レベル;vt. 登る;... のサイズを変更する

  3. n. ナレーション

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。