今後、動画や音楽ファイルを扱ううえで、FFmpegが必要になることが多々あるのでwindows11にインストールします。
FFmpeg
は、オープンソースのソフトウェアプロジェクトであり、多くのマルチメディアデータ(音声、ビデオ、字幕、関連するメタデータなど)を記録、変換、ストリーミングするためのツールとライブラリ群を提供しています。FFmpegは多くのオペレーティングシステムで動作し、コマンドラインから操作することが一般的です。
主要なコンポーネントは以下の通りです:
- ffmpeg: コマンドラインツールで、オーディオやビデオの変換、基本的な編集(クリッピング、再サンプリングなど)やストリーミングに使用されます。
- ffprobe: メディアデータの詳細情報を調査するためのコマンドラインツールです。
- ffplay: シンプルなメディアプレーヤー。コマンドラインから操作します。
- libavcodec, libavformat, libavfilter, libavdevice, libswresample, libswscale など:これらはFFmpegが内部で使用するライブラリです。他のソフトウェアプロジェクトでも利用されています。
FFmpegは多数のオーディオとビデオコーデック、ファイルフォーマット、プロトコルをサポートしており、高度にカスタマイズ可能です。この柔軟性と強力な機能セットにより、FFmpegはプロフェッショナルなマルチメディアアプリケーションからアマチュアプロジェクトまで多くの用途に使用されています。
Windows版はファイルが2つありました。
違いは下記の通りです。
ffmpeg
のWindows用バイナリは、いくつかの異なるバージョンや設定で提供されています。ffmpeg-master-latest-win64-gpl-shared.zip
と ffmpeg-master-latest-win64-gpl.zip
は主に次のような違いがあります。
- Shared vs Static Libraries:
ffmpeg-master-latest-win64-gpl-shared.zip
: このバージョンは”shared”ライブラリ(DLLファイル)を含んでいます。これは、FFmpegの機能を他のプログラムから動的に利用する(”リンクする”)場合に使用されます。ffmpeg-master-latest-win64-gpl.zip
: このバージョンは”static”ライブラリを含んでいて、FFmpegの全ての機能が単一の実行可能ファイルに組み込まれています。これは独立した形で使われることが多いです。
- GPL License:
- 両方ともGPLライセンス下で提供されています。これは、FFmpegが一部のGPLライセンス下のコードを使用しているか、またはそのオプションでビルドされた場合に適用されます。
- Use-Case:
- “shared”バージョンは、特定のアプリケーションからFFmpegの機能を動的に呼び出す必要がある場合に便利です。
- “static”バージョンは、FFmpegを単体で使用する場合、または他のマシンに転送する場合に便利です。このバージョンでは、依存する外部ライブラリが一つの実行ファイルに含まれているため、環境による影響を受けにくいです。
どちらのバージョンをダウンロードするかは、具体的な使用ケースや要件に依存します。もし単にFFmpegコマンドラインツールを使用するだけであれば、ffmpeg-master-latest-win64-gpl.zip
(staticバージョン)が簡単で扱いやすいでしょう。一方で、FFmpegの機能を他のソフトウェアで利用したい場合は、”shared”バージョンが適しています。私は今後、後者が必要なのでこちらをダウンロードしました。
ファイルを解凍して、ffmpeg.exeが存在するフォルダ(bin)にいる状態で動作確認してみます。
ffmpeg -version
しかし、エラーが発生しました。
ffmpeg: The term ‘ffmpeg’ is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Suggestion [3,General]: The command ffmpeg was not found, but does exist in the current location. PowerShell does not load commands from the current location by default. If you trust this command, instead type: “.\ffmpeg”. See “get-help about_Command_Precedence” for more details.
.\ffmpeg -version
記述にあるように、上記のコマンドを入力したら正常に動作しました。
ffmpeg version N-111859-g3c397a1d46-20230830 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 13.1.0 (crosstool-NG 1.25.0.196_227d99d)
configuration: –prefix=/ffbuild/prefix –pkg-config-flags=–static –pkg-config=pkg-config –cross-prefix=x86_64-w64-mingw32- –arch=x86_64 –target-os=mingw32 –enable-gpl –enable-version3 –disable-debug –enable-shared –disable-static –disable-w32threads –enable-pthreads –enable-iconv –enable-libxml2 –enable-zlib –enable-libfreetype –enable-libfribidi –enable-gmp –enable-lzma –enable-fontconfig –enable-libvorbis –enable-opencl –disable-libpulse –enable-libvmaf –disable-libxcb –disable-xlib –enable-amf –enable-libaom –enable-libaribb24 –enable-avisynth –enable-chromaprint –enable-libdav1d –enable-libdavs2 –disable-libfdk-aac –enable-ffnvcodec –enable-cuda-llvm –enable-frei0r –enable-libgme –enable-libkvazaar –enable-libass –enable-libbluray –enable-libjxl –enable-libmp3lame –enable-libopus –enable-librist –enable-libssh –enable-libtheora –enable-libvpx –enable-libwebp –enable-lv2 –enable-libvpl –enable-openal –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libopenh264 –enable-libopenjpeg –enable-libopenmpt –enable-librav1e –enable-librubberband –enable-schannel –enable-sdl2 –enable-libsoxr –enable-libsrt –enable-libsvtav1 –enable-libtwolame –enable-libuavs3d –disable-libdrm –disable-vaapi –enable-libvidstab –enable-vulkan –enable-libshaderc –enable-libplacebo –enable-libx264 –enable-libx265 –enable-libxavs2 –enable-libxvid –enable-libzimg –enable-libzvbi –extra-cflags=-DLIBTWOLAME_STATIC –extra-cxxflags= –extra-ldflags=-pthread –extra-ldexeflags= –extra-libs=-lgomp –extra-version=20230830
libavutil 58. 17.100 / 58. 17.100
libavcodec 60. 23.100 / 60. 23.100
libavformat 60. 10.101 / 60. 10.101
libavdevice 60. 2.101 / 60. 2.101
libavfilter 9. 11.100 / 9. 11.100
libswscale 7. 3.100 / 7. 3.100
libswresample 4. 11.100 / 4. 11.100
libpostproc 57. 2.100 / 57. 2.100
次は、どこのフォルダにいてもffmpegが使用できるように、環境変数を追加します。
環境変数(Environment Variables)を設定する理由はいくつかありますが、一般的なものを以下に示します:
- 設定の一元化: アプリケーションが必要とする様々な設定(例えばデータベースの接続情報やAPIキーなど)を一元的に管理できます。
- ポータビリティ: 環境変数を使うことで、ソフトウェアの設定を外部から与えられるようになります。これによって、同じコードベースを異なる環境(開発環境、テスト環境、本番環境など)で容易に動かすことができます。
- セキュリティ: パスワードやAPIキーなどの機密情報をソースコードにハードコードするのはセキュリティリスクがあります。環境変数を使うことで、これらの情報を安全に管理できます。
- 柔軟性と拡張性: 環境変数を使うことで、アプリケーションが実行される環境に応じて動作を簡単に変更できます。
- 依存性の分離: 例えば、データベースや外部サービスの接続情報を環境変数として設定することで、アプリケーションは特定の環境に依存しなくなります。
- エイリアスやショートカット: 特定のアプリケーションやコマンドに短い名前や特定の設定を与えるためにも環境変数が使われる場合があります。例えば、
PATH
環境変数はシステムがコマンドをどこで探すかを決定します。 - 複数アプリケーション間でのデータ共有: 環境変数は、関連する複数のアプリケーションやプロセス間でデータを共有する手段としても使われます。
以上のように、環境変数はアプリケーションを参照するためだけではなく、設定、セキュリティ、ポータビリティなど多くの面で重要な役割を果たします。
登録する場所は、システム環境変数のPathにしました。
環境変数は一般的に「システム環境変数」と「ユーザー環境変数」とに分けられます。これらは似ているようでいて、実際にはいくつかの重要な違いがあります。
- システム環境変数:
- システム全体、すなわちすべてのユーザーに影響します。
- 管理者権限が通常必要です。
- システムが起動するときやサービスが開始するときに読み込まれることが多いです。
- 例:
PATH
環境変数はしばしばシステムレベルで設定されます。
- ユーザー環境変数:
- 特定のユーザーにのみ影響します。
- 管理者権限は通常必要ありません。
- ユーザーがログインするときに読み込まれます。
- 例:個々のユーザーが使用するソフトウェアやサービスに特有の設定が含まれることが多いです。
どちらのタイプの環境変数も、アプリケーションが実行される環境や設定を調整するために使われますが、影響範囲や設定の際に必要な権限が異なります。それぞれの用途と要件に応じて適切なタイプの環境変数を設定する必要があります。
その後、適当なフォルダでコマンドを入力してみます。
しかし、エラーが発生しました。
ffmpeg.exe: The term ‘ffmpeg.exe’ is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
この問題は、PowerShellを起動しなおしたら正常に動作しました。一部の場合には、システム全体で環境変数の変更を有効にするためには再起動が必要があるかもしれません。