FFmpeg をMacで簡単に使い始めること

FFmpeg は動画ファイルを扱う強力なコマンドラインツールですが素人の一般人にはインストールすら少しハードル高いです。使い始めてみましょう。

ffmpeg とは

ffmpeg は 動画ファイルの情報を得たり操作したり変換するツールです。公式サイトffmpeg.org では次のように記され、頼もしい限り。

FFmpeg は主要なマルチメディア フレームワークであり、人間や機械が作成したほぼすべてのものをデコード、エンコード、トランス コード、マルチプレクサ、デマルチプレクサ、ストリーム、フィルタリング、再生することができます。最も知られていない古代の形式から最先端の形式までサポートします。
https://ffmpeg.org/about.html

なぜ FFmpeg を必要とするか

個人的に FFmpeg を必要とする理由は QuickTime Player Pro の一部機能の代替でした。動画ファイルの詳細情報を確認したり、動画の一部を切り抜いたり、音声だけを抽出したり、スクリーンキャプチャを保存したりといったことを行うためです。こうした単純な作業のために、わざわざ重厚長大なムービー編集ソフトを起動するのは大変億劫です。

QuickTimeも滅びるし、代替手段を確保すべく FFmpeg を試みたのが、かれこれいつの話だったか。最初はインストールすらまともに出来ませんでした。使い方も難しいです。

今では小さな動画編集アプリもいくつか出てきて、簡単な編集が手っ取り早くできるようになったと思います。FFmpeg がなくてもいろんなアプリで要求を賄えます。

丸ごと変換なら HandBrake
簡易編集なら CapCut
本気の編集なら DaVinci Resolve
旧環境保持者なら QuickTime Player Pro(変換、切り出し、切り抜き、コピペ編集、スクリーンキャプチャ、タイムコード確認なんでも出来る上に小さく軽いモンスターアプリ)が最高峰です。

一般に、FFmpeg をわざわざ使うのは市販ソフトより詳細にパラメータを制御するなど、より専門的な使い方を必要とするからだと思います。

また、ターミナル操作に慣れている人なら、例えば動画ファイルを再生しつつ「ここ切り出したいな」「ここのスクリーンキャプチャほしいな」と思った瞬間にタタタっとタイプして実現できることが最高に手軽でしょう。

そしてもうひとつ、コマンドラインツールであることを利用して自動化の仕組みを自分で作れます。

自分の場合、FileMakerで自作のメディア管理を作っていて、その中で動画の切り出しなどを行うんです。こうした利用法ではコマンドラインツールであることが必須ですので、FFmpeg、一度は放置していましたが再び浮上してきました。

小難しい

FFmpegの機能は最強ですが、ただし最強であるからこそ、使い始めること自体のハードルも高く難解です。やることが難しいからインストールも難解であるという、これはこれで理に適っているかもしれません。

ここではダウンロードからインストールまでの簡単な方法について記します。オマケ的に使い方の例を挙げますが、詳細な使い方にまで話は及びません。尚、Macでの話です。

FFmpeg インストール

FFmpegに親切で優しいインストーラーというものはありません。他ツールのコマンドを利用してインストールするか、ビルドされたファイルをダウンロードして自分で面倒を見ます。大丈夫、簡単です。

Homebrew というやつを使わない

FFmpeg のインストール方法を検索すると、ターミナルから Homebrew というツールを使ってインストールしろという記事が多くヒットします。

が、それを使わない方向です。というのも homebrew って不親切だし意味わかんないし難しそうです。私の環境では上手く動かず実害を被ったりもしました。ですのでここでは homebrew を使わずに FFmpeg をインストールします。

が、一応書いておくと、homebrew をインストール済みで最新OSを使っていてインストールエラーが出た場合の対処が自分でできる人ならこうするだけでインストール出来ます。

brew install ffmpeg

これはこれで簡単ですが上手くいかないときにお手上げになるので、私のようにスキルがない人は別のアプローチを取ります。

brewが上手くいかなかった件

homebrew で何が起きたかというと、ffmpeg をアップデートしたんですね。そうです。ずっとずっと以前、homebrew を使ってインストールしていたんですよ。バージョンかなり古いし、アップデートしてみました。

homebrew が仕事を開始し、大量の更新ファイルをダウンロードしてインストールを続けるわけですが、何やらエラー出まくりで ffmpeg が使えなくなりました。更新に失敗して、ちゃんと使えていた旧バージョンも使えなくなったんですね。何度やり直しても駄目で、多岐にわたるインストール先フォルダ内も無茶苦茶状態で収集つかなくなりました。

ターミナルでエラー表示を丹念に見ていくと、「最新OSじゃないからまともにインストールさせてやらないよ、エラーが出るかもしれないけど自己責任な、こっちは知らんよ勝手にしろや文句言うなよ」と能書きをたれていました(意訳)つまり仕事を途中放棄していたんです。

能書きたれるんならおかしな挙動をする前に最初に確認してくれればいいのですが、無茶苦茶にしておいて最後に通告してくるのが素人お断りのマニアツールである所以です。

普段、至れり尽くせりのインストーラーに甘やかされている私たちは、こういうとき為す術がなく、いろんなフォルダ内を無茶苦茶にされた結果どうなったかというと、TimeMachineでシステムごとバックアップから戻す以外にありませんでした。

そんなわけで homebrew は使いません。

公式からダウンロード

わざわざ無理して妙なコマンドを使わなくても、公式からファイルをダウンロードしてインストールできます。

ダウンロードファイルを見つけるのもちょっぴり難易度高いので、ここで丁寧に記しておきます。時が流れて公式サイトのデザインが変わったときの面倒までは見ません。

公式サイトを彷徨いダウンロードファイルを見つける

ffmpeg の公式サイト https://ffmpeg.org に移動するといきなりでっかくダウンロードボタンがあります。ですが畏れることはありません。これはダウンロードボタンではなくリンクボタンだとすぐに判明します。

ffmpeg.org top
ダウンロードが始まりそうなデザインのボタンですがダウンロードボタンではなくリンクボタンです。

クリックすると、ダウンロードページに移動するための準備ページへ移動します。

ffmpeg.org download pege
必要プラットフォームの四角をクリックすると直下にリストが表示される。

ここにもでっかくボタンがありますが、これに吸い寄せられてはいけません。Download Source Code は専門家にしか扱えないソースコードをダウンロードするボタンです。右下枠の緑ボタンもソースコード関連ですので緑色ボタンはすべて無視します。

最初はこのページの意味が判らず逃げ出しましたが今はちょっぴりの知恵がつきました。左下のOSマークに注目します。このOSマークを囲んでいる四角い箇所、これボタンになっています。これに気付くことが解決への糸口でした。

クリックするとすぐ下に候補がリストされます。リストと言ってもMacの場合一つだけですのでそれを選びます。

download mac

気づきにくいが、この部分がまたもやボタンになっています。ここ、クリックできます。これに気付けばこちらのものです。

今度こそダウンロードページに移動します。

ダウンロードする

 download button

だーっと縦に長いダウンロードページが現れます。ここでは緑色のボタンが重要になります。

ffmpegとその仲間のツールがダウンロードできます。それぞれボタンクリックしてダウンロードします。

本命は ffmpeg です。最新バージョンとおぼしきボタンと安定版ボタンがありますのでお好きなどちらかを選びます。最新のほうを選んでいいんじゃないでしょうか。

ffmpeg の仲間ツール ffprobe は、動画ファイルの詳細データを表示する info 的なツール。使う使わないはともかく、ダウンロードしておいてもいいでしょう。

ffplay は簡易なプレーヤーです。これ便利で良いですよね。ダウンロードしましょう。

ダウンロードした .7z ファイルを展開すると、ターミナル型アイコンが付いたファイルが現れます。これらはアプリケーションという種類ではありませんが、ターミナルからアプリケーションみたいに使えるツールのファイルです。

ffmpeg, ffprobe, ffplay

これはbuildされた完成品で、このファイルさえあれば FFmpeg を使用できます。

インストール

ダウンロードしたファイルをフォルダに入れます。どのフォルダに入れましょうか。

アプリケーションフォルダに置いてみる

applicationsFolder

アプリケーションフォルダに入れました。おいおいどこに入れとんねんアホか。と、つっこみたい人は堪えてください。

アプリケーション以外のもっとそれらしい場所に入れてもいいと思います。/usr/local/bin/ とか。でもわざとアプリケーションフォルダに入れてみました。

/usr/local/bin/ に置く

例えば ExifTool をインストーラーでインストールすると /usr/local/bin/にインストールされます。このフォルダはそういう役割のフォルダっぽいですので、ここに入れても良いと思います。むしろここに入れるべきなのかも。

/usr/local/bin/をFinderで開いてみると、多くがエイリアスです。もっとややこしい所定の位置に置かれたいろんなファイルのエイリアス置き場みたいになっています。

そんなわけで、アプリケーションフォルダなりどこか好きなフォルダなり /usr/local/bin に置くなりします。

これにてインストール完了です。拍子抜けするほど簡単ですね。以前、brew からインストールするか、ソースコードを自分で何とかするしかインストール方法がないと思っていた頃はインストールされるファイル群に恐怖しかありませんでした。このようにビルドされたファイルが用意されていて、実は親切だったんです。

ただし/usr/local/bin/に置かず、アプリケーションフォルダに入れただけの場合はまだ使えません。もちろんファイルをダブルクリックしても無駄です。使うためには若干の準備が必要です。

所定の場所以外に置いた FFmpeg を使う準備

ダウンロードした FFmpeg を想定される所定の場所(/usr/local/bin)に置かず、アプリケーションフォルダまたはその他独自のフォルダに置いただけの場合、準備することがあります。

ちょっとだけ回りくどいところからご説明します。

コマンドの秘密

コマンドラインツールの使い方は、ターミナルにコマンドを書いてリターンして実行します。

ffmpeg -version

例えばこうですね。でもアプリケーションフォルダに放り込んだだけでは動きません。

コマンドラインツールの秘密は、コマンドと同じ名前のファイルが所定の場所にあるということです。例えば ls というコマンドなら、/bin/ls が存在しています。

素人の私たちはターミナルの最初にコマンドを書くとき「コマンドを書いている」と思っていますが、実のところ「コマンドファイルを指定している」ということをやっています。と、考えて良いと思います。

さて、アプリケーションフォルダはターミナルにとって所定の場所とは想定されていないので、ターミナルは「ffmpeg? 何それ?何処にあるのん?」と見つけられず呆けてしまいます。アプリケーションフォルダに置いた ffmpeg を使うには、場所を含めて指定しなければなりません。アプリケーションフォルダに置いたのならこう書きます。

/Applications/ffmpeg 〜

これでターミナルはffmpegの場所を理解してくれて、コマンドを実行できます。

/usr/local/bin に置いた場合は

ffmpeg 〜

これで良いわけです。なぜかというとこの場所が想定されているからです。この「想定されている」がポイントです。後ほど。

そんなわけで、パスを含める形でコマンドを書くことに抵抗なければ特に何も準備する必要もありません。

毎度毎度 /Applications/ffmpeg と書くのも面倒だし、あまりカッコいいものでもありません。もうちょっと格好を付けたい場合は準備しておくことがあります。準備とは、/Applications/ ディレクトリを想定させることを指します。

環境変数に覚えさせる

「ffmpeg 〜」で書き始められればカッコいいのかどうかはわかりませんが、Applications ディレクトリを設定に記憶させると以降は省略できます。

その設定が何かというと、/Applications/ を環境変数に設定してやればいいと判りました。この行為を「パスを通す」と言うそうです。環境変数の $PATH というものに書き込んで設定します。

環境変数?

環境変数って何でしょう。変数というのは仮の入れ物です。仮の入れ物に値を入れ、必要時に取り出して使います。

「変数Xに3を入れたぞ」「はい先生」「よし。変数Xは何だ?」「3です」こうですね。

環境変数ってくらいだから、環境の設定であるところの変数なのでしょう。変数には効き目がどれくらいあるかという有効範囲があります。

「変数Xに3を入れたぞ。じゃあな。また明日」「おやすみなさい先生」「次の日になった。変数Xは何だ?」「何もありません」
有効範囲が最小だとこんな感じです。有効範囲が広いと夕べの変数Xも消えずに残ります。有効範囲がくそほど広い場合、どの教室に行っても変数Xに3が入っています。有効範囲のことを専門家はスコープと呼ぶそうです。

環境変数に覚えさせるというのは、ユーザーレベルが有効範囲です。コンピュータにログインしたユーザーである限りその設定が有効です。再起動しても有効です。明日になっても有効です。他のユーザーに切り替えたら設定は効いていません。ユーザーを初期化すれば設定は消えます。これが環境変数に覚えさえる行為の有効範囲になります。

ターミナルはコマンドが書かれたとき、そのコマンドのファイルを探しに行きます。探す先は元々想定している場所と、ユーザーが環境変数に憶えさせた場所です。それが $PATH です。

そんなことで、$PATH にアプリケーションフォルダのディレクトリを登録することを行います。

パスを通す

ターミナルではいろいろなシェルを実行できます。以前は bash というシェルがデフォルトでした。今は zsh だそうですが、ここの筆者は時代に取り残された化石ですから今でもデフォルトは bash です。

bash の場合、ユーザーフォルダに「.bash_profile」というファイルがあります。これが設定ファイルです。もしこのファイルがない場合は作成します。
zshの場合は .zshrc です。

「.」で始まるから見えないファイルですよ。見えないファイルを見るために、XtraFinder 等ユーティリティを使うか、Finder で コマンド + シフト + . しましょう(ショートカットで見えるようになることを先週まで知らなかった💦いつからこんなことが出来るようになった?)

筆者の場合、このファイルを開くと次のような内容がすでに書かれていました。

source ~/.profile
export GIT_MERGE_AUTOEDIT=no
export GIT_MERGE_AUTOEDIT=no
# Setting PATH for Python 3.11
# The original version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/3.11/bin:${PATH}"
export PATH

よくわかりませんが、ディレクトリを想定している $PATH というものの記述はありません。素人の雑魚が想像するに、$PATH というのはここじゃなく別でセットされています(多分、.profile )。ここでは$PATH に何やら追加している気配があるだけです。

現在設定されている$PATH を確認するには、ターミナルでこう命じます。

echo $PATH

例えばこのような結果が返ります。

/Library/Frameworks/Python.framework/Versions/3.11/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin

何でしょう? これは「 : 」で区切られていると理解します。改行すれば判りやすいです。以下のフォルダが想定済みということです。

/Library/Frameworks/Python.framework/Versions/3.11/bin:
/usr/bin:
/bin:
/usr/sbin:
/sbin:
/usr/local/bin:
/opt/X11/bin

このリストにあるディレクトリにコマンドファイルを置けば、ターミナルでコマンド名だけ入れればいいってことですね。

ここにアプリケーションフォルダのパスを登録すれば良いわけですが、ここで先ほどのファイルが必要になってきます。既存の $PATH に追加する形で記載します。

export PATH=/Applications:$PATH

この一行を .bash_profile に追記します。この命令文が、$PATH への追記です。

$PATH は「 : 」で区切った羅列のようなものですので、上記では、既存の $PATH の前に /Applications を指定しています。既存の$PATHより優先される書き方です。ターミナルはコマンドが書かれると何より先にアプリケーションフォルダ内を探します。既存$PATHを優先するなら、順序を入れ替えます。

export PATH=$PATH:/Applications

どっちかというと、既存のパスを探してそれでも見つからなければ追記したパスを探すというこちらが良い書き方かもしれません。

.bash_profile を保存して、ターミナルを再起動します。

同じことを、ターミナルだけでタタタっとカッコ良く行いたいならこうします。

echo 'export PATH=$PATH:/Applications' >> ~/.bash_profile

ファイルに書き込みますから、そのファイルが存在し続ける限り有効なままです。ターミナルから一時的に登録する有効範囲の狭い書き方もありますがここでは関係ないので割愛します。

設定をちゃんと読み込ませるため、ターミナルを再起動しておきましょう。

尚、bash では .bash_profile ですが、zshの場合は .zshrc です。ターミナルのデフォルトがbash なのか zsh なのかは、ターミナルウインドウのタイトルバーで判ります(カスタムして消す設定にしていなければ表示される)

ターミナルウインドウ

以上、「パスを通す」が出来ました。これでアプリケーションフォルダにインストールした ffmpeg を使うとき、ターミナルで

ffmpeg 〜

と、始められます。ちょっとカッコ良くなりましたか。

これはユーザーレベルの設定ですので、他のユーザーでログインすれば設定はありません。そこんとこお忘れなく。

応用は利かないよ

わざわざアプリケーションフォルダに置いてみたり、パスを通す話を長々としたのには理由があります。

ターミナルは賢く親切ですから、いろんなかゆいところに手が届く仕組みを持っています。$PATHを参照してくれることもそのひとつ。

しかし、ターミナルを使わずにコマンドを実行させる場合、たとえば AppleScript の do shell script を使う場合や Automator内でシェルを使う場合などは、環境変数にパスを通したことなど何の意味もありません。きちんとパス込みでコマンドを書く必要があります。

do shell script "/Applications/ffmpeg 〜 " 
do /Applecations/ffmpeg 〜 done

自分でインストールしたツールはすべからく同じ理屈で、 /usr/local/bin であっても同じです。ユーザーが追加したツールに関しては、ターミナルで使うのでなければパスを書かねばなりません。

例えばインストーラーで ExifTool をインストールすれば、ターミナルでは「exiftool 〜」と書けますが、そうでなければ 「/usr/local/bin/exiftool 〜」と書く必要があります。

ということで、コマンドには実体のファイルがあり、その置き場所があり、置き場所は環境変数に記録され、それが設定されているとターミナルでコマンドだけ書けばOKの状態となり、でもターミナル以外では省略せずパスを含めたコマンドを書く必要があるという、これを理解するために長々と書きました。私はこのことを最初まったく理解しておらずドツボにハマった経験がありました。

 

以上、汎用的な別の話も混在しましたが FFmpeg のインストールと使うための準備でした。

FFmpeg FFprobe FFplay

ffmpeg で主にやることは動画ファイルの変換や切り出しです。いろいろ出来るスゴい奴なのでとても機能を網羅して解説なんてできませんし、使い方にコツがあったりして ffmpegマスターでない一般の雑魚では歯が立たないこともあります。でもちょっとだけ。

基本的な使い方

FFmpeg

コマンドの後 -i(input の意)に続けて入力パス、オプションを書いた後、出力パスを書くのが基本の形です。

例えばいくつか例を。

// オーディオのみ抽出
 ffmpeg -i '<入力パス>' -vn -y '<出力パス-オーディオタイプ>'

// 時間指定して抽出(切り抜き)
 ffmpeg -ss <開始指定> -t <終了時間> -i '<入力パス>' -y '出力パス'

// スクリーンキャプチャ
 ffmpeg -ss <開始指定> -t 1 -i '<入力パス>' -r 1 -y '<出力パス-画像タイプ>'

// スクリーンキャプチャ【改】
 ffmpeg -ss <開始指定> -i '<入力パス>' -frames:v 1 -y '<出力パス'

-vn は、ビデオを無視します。

無劣化で取り出したいときは -c copy を付けて、元ファイルのオーディオタイプと同じ拡張子を使用します(そのためには、元ファイルのオーディオタイプを先に調べて知っておく必要があります)

-y は出力先に同じファイルがあった場合に上書きします。元ファイルを上書きするためではありません。

-ss は開始時間の指定、-t は終了時間の指定です。秒数または 00:01:30 の形式。

スクリーンキャプチャでは -t で長さの指定(1秒を指定してる)、 -r でフレームレート(1を指定してる)を書きました。無理矢理ですね。こんなのでいいのかどうかわかりませんが💦

スクリーンキャプチャ【改】を追加しときました。こちらはフレームを1個書き出します。こっちがスマートですね。

時間指定に関してですが、例では時間指定してから入力パスを記述しています。入力パスを記述してから時間指定を行う書き方もありますが、先のほうが良い、後のほうが良い、いろいろ意見あるみたいです。難しいことはわかんない。

FFplay

簡易プレーヤーです。手軽に再生できます。

ffplay <目的ファイルのパス>

ターミナルですから目的ファイルのパスはファイルドラッグでOK。もちろん普通は QuickLook したほうが圧倒的に便利ですが、QuickLookできないファイルで重宝します。

esc で終了、スペースでポーズ、m でミュートなど、操作のキーは ffplay –help で確認できます。

ffprobe

ffprobe はメタデータや各種情報が詳しく判ります。ffmpeg でも情報ゲットはできますが、出力先パスを書くのが前提になるので、それを回避するための面倒な措置が必要なんです。ffprobe は純粋に情報ゲットするためだけのコマンドなのでシンプルに使えます。

情報は豊富ですが、ちょっとクセがあって面倒なこともあります。その面倒を乗り越えても FFprobe(FFmpeg)でしかゲットできない情報もありまして、重宝します。例えば「最大音量」を取得できますよ。こんなのできるのはffmpegだけ!(多分)

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください