====== ffmpegのインストールと動画の変換 ====== Fijiで作成した動画(avi形式)はそのままマックのkeynoteに貼り付けて再生したり、QuickTimeでの再生ができない。画素形式を変換する必要があるのだが、そのための私の使っているかんたんな方法は、ffmpegというコマンドラインツールを使った変換である。以下、コマンドラインの使い方の初歩を含め、これを解説する。 なお、公開の都合上、[[https://gist.github.com/miura/c7d448b3a640762746f1cf642473dca9 | 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` とすると、ヘルプがターミナルに出力されます。ものすごい数なので使いこなすのは難しいのですが、より手の混んだ処理なども可能です。