Skip to content

Instantly share code, notes, and snippets.

@miura
Last active October 22, 2021 08:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miura/c7d448b3a640762746f1cf642473dca9 to your computer and use it in GitHub Desktop.
Save miura/c7d448b3a640762746f1cf642473dca9 to your computer and use it in GitHub Desktop.

まずhomebrewをインストールする。以下参照。

次にhomebrewを使ったffmpegのインストール

さて、インストールに、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

とすると、ヘルプがターミナルに出力されます。ものすごい数なので使いこなすのは難しいのですが、より手の混んだ処理なども可能です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment