ffmpegのインストールと動画の変換
Fijiで作成した動画(avi形式)はそのままマックのkeynoteに貼り付けて再生したり、QuickTimeでの再生ができない。画素形式を変換する必要があるのだが、そのための私の使っているかんたんな方法は、ffmpegというコマンドラインツールを使った変換である。以下、コマンドラインの使い方の初歩を含め、これを解説する。
なお、公開の都合上、 Gistに同じ文章を掲載した。|
—
まずhomebrewをインストールする。以下参照。
- Homebrewのインストール - Qiita
- https://qiita.com/zaburo/items/29fe23c1ceb6056109fd
次にhomebrewを使ったffmpegのインストール
画像ファイルからMacのQuickTimeで開けるmp4ファイルを作る - Qiita
https://qiita.com/yohm/items/f84e848b6333aaa897e7
さて、インストールに、brew install ffmpeg
というコマンドを上で使いましたが、これ以外に知っていたほうがよいコマンドをまずいくつか紹介するので、試してみてください。
open .
半角のあとのピリオドが重要です。これを実行すると、目下の処理対象となっているディレクトリー(フォルダー)が表示されます。
このコマンドだと、ウィンドウでどこにいるのかがわかるわけですが、ウィンドウを表示させずに現在どこのディレクトリーにいるのか、ということを知るには
pwd
を使います。実行すると、/ で区切られた、ディレクトリーの場所(ファイルシステムはツリー状。その場所)がわかる。いわば住所。
% pwd
/Users/miura
(上の%は私が打ち込んだものではなく、ターミナルでコマンドの行頭にある目印です。)pwdでターミナルに出力されるこの”住所”を、”パス”といいます。英語だとpath。ディレクトリーやファイルはそれぞれ、固有のパスを持っていることになります。目下のディレクトリーの中にあるファイルを表示するには
ls
(Lの小文字にSの小文字)をやってみてください。
open .
を使ってファインダで開いたときに見えるファイルの名前が出力されているはずです。以上、ファイルのパスとはなにか、ということをまず解説するためにコマンドを紹介しました。
次に、現在処理対象となっているディレクトリーからの移動です。ターミナルを開いてそのままの状態の場合、処理対象は”ホームディレクトリ”といい、コマンドラインでデフォルトの場所(パス)になります。pwdで表示される場所です。私の場合は、
% pwd
/Users/miura
ls
を行うと、だーっといろいろなファイルやフォルダがリストされるのですが、その中で例えばDownloadsというフォルダがあります。そのフォルダの中に移動してみましょう。
cd Downloads
というコマンドになります。 日本語OSだと、手元にないので確認できませんが
cd ダウンロード
になると思います。pwd
で現在の位置を確認しましょう。ファイルシステムの階層を一つ下がったことになります。
% pwd
/Users/miura/Downloads
これは、"Users"というフォルダの中の、"miura"というフォルダの中の"Downloads"というフォルダの中が現在地であること(現在地のパス)であることを示しています。
ここからまた元に戻るには、階層を一つ上がるのですが、これには
% cd ..
とピリオド2つで戻ります。再び現在位置のチェックをpwdでしてみます。
% pwd
/Users/miura
さて、ここまでで、現在ターミナルがいる場所(current directoryと英語では言う)を知ったり、その場所に保存さてているファイルのリストの表示、場所の移動、などをやってみましたが、ここからは実際にffmegで処理してみましょう。
たとえば、ImageJで作成したAVI形式のファイルがあったとします。このファイルの名前がtest.avi
であるとして以下、解説を行います。
コマンドラインだけでもファイルを移動したりできるのですが、ここでは、ファインダでマウスを使ってファイルを移動することと組み合わせてやってみます。まず、test.avi
のファイルを、マウスを使ってダウンロードフォルダに移動(あるいはコピー)してください。test.avi
がDownloads(あるいはダウンロード)のフォルダの中にあることをコマンドラインで確認してみましょう。
cd Downloads
あるいは
cd ダウンロード
で、移動します。次に
ls
フォルダ内のファイルを確認してください。test.avi
もそこにあるはずです。
確認ができたら、
ffmpeg -i test.avi
というコマンドを打ってみてください。すると、多くの情報が出力されるはずです。わたしの場合だったら、当方でFijiを使って作成したAVIファイルの場合、
% ffmpeg -i test.avi
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
built with Apple clang version 12.0.5 (clang-1205.0.22.9)
configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/4.4_2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-avresample --enable-videotoolbox
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, avi, from 'test.avi':
Duration: 00:00:14.14, start: 0.000000, bitrate: 1562 kb/s
Stream #0:0: Video: rawvideo, pal8, 160x174, 1574 kb/s, 7 fps, 7 tbr, 7 tbn, 7 tbc
Metadata:
title : ImageJ AVI
At least one output file must be specified
となりました。コマンドffmpeg -i test.avi
の解説をすると、<コマンド> <オプション> <オプションにあたえる情報>という半角スペースで区切られた書式になっていて、
- コマンド: ffmpeg
- オプション: -i
- オプションにあたえる情報: test.avi
という構成になっています。ffmpegはいわばアプリです。ffmpegにはさまざまな種類のオプションがあり、それぞれハイフン一つ(-)ないしは2つ(--)で始まる「フラグ」と呼ばれる記号が与えらてています。-i
は、入力ファイルを指定するためのフラグで、-i test.avi
は、入力ファイルとしてtest.avi
を使うことを指示していることになります。
ただ、これだけだと、出力先が指定されていないので、上の出力の最後にあるようにAt least one output file must be specified
という警告がでています。そこで以下のコマンドに変えてみましょう。
ffmpeg -i test.avi test.mp4
すると、さっきよりも多くの出力があるはずで(割愛します)、なおかつ
open .
で、ダウンロードフォルダを眺めると、test.mp4というファイルが作成されているはずです。このあたらしいmp4形式のファイルは、avi形式のファイルよりも融通が聞くのですが、これもやはりquicktimeでは開くことができません。詳しい解説は省きますが、画素のフォーマットがquicktimeでは使えない形式なのです。このためにはオプションとして画素のフォーマットをyuv420p形式に変換する、-pix_fmt yuv420p
を付ける必要があります。つまりコマンドは
ffmpeg -i test.avi -pix_fmt yuv420p test.mp4
となりこれを実行すると
File 'test.mp4' already exists. Overwrite? [y/N]
という質問が表示されます。test.mp4を上書きしてもよいか、と聞いているのでy
とタイプしてリターンを押すと、変換が実行されます。
このあとで、
open test.mp4
というコマンドを実行してみてください。Quicktimeで動画が表示されるはずです。
私の場合は、せっかくだったら少し動画圧縮をかけるか、ということで、さらにオプション-c:v libx264
を追加したコマンドを使いました(ツイッターで)。この場合には
ffmpeg -i test.avi -c:v libx264 -pix_fmt yuv420p test.mp4
のように、みっつオプションがあることになります。なお、実際の変換されたファイルはファインダ上では
open .
でウィンドウを開いて、探すことができるはずです。
なお、変換後の動画形式が.mp4になっていますが、.movにしてquicktime純正の形式に変えても問題ないはずです。動画のコンテナ形式といって、箱の形がいろいろある、ということで、画素形式とはまた別の設定である、と考えるといいかと思います。
ffmpegの他のオプションは
ffmpeg -h
ないしは
ffmpeg --help
とすると、ヘルプがターミナルに出力されます。ものすごい数なので使いこなすのは難しいのですが、より手の混んだ処理なども可能です。