本記事は東京大学工学部電子情報・電気電子工学科の「大規模ソフトウェアを手探る」という実習の報告書を兼ねています。
はじめに
ffmpegはコマンドライン上で動画や音声を処理するツールです。変換はもちろん、ダウンロードやストリーミング配信を行うこともできます。
今回、大学の実習でffmpegにHSL形式の動画をダウンロードする際のオプションを追加することになりました。本稿ではその準備段階である、ビルドとデバッグの方法を説明します。
オフィシャルなドキュメント
macOSでビルドする際の手順が記載されているのでここを参考にビルドすると良いでしょう。
環境
本稿では以下の環境を前提とします。
- macOS 10.14 Mojave
- lldb-1000.11.37.1
ビルド
まずはじめに必要なパッケージを揃えましょう。公式のドキュメントに一覧が載っています。
オプションの決定
公式のサンプルを見てもわかりますが、ffmpegをビルドする際はconfigureにたくさんのオプションを指定します。初めてのビルドだと何をつけたら良いのかわからないのではないでしょうか。
そんな時は、Homebrewで通常インストールされるffmpegをビルドした時のオプションを見てみましょう。ffmpeg
とだけシェルに打ち込んでオプションなしで起動すると、次のような出力がなされます。
$ ffmpeg
ffmpeg version 4.0.2 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 10.0.0 (clang-1000.11.45.2)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.0.2_1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-opencl --enable-videotoolbox
libavutil 56. 14.100 / 56. 14.100
...
3行目の"configuration: "以降の部分が指定されたオプションです。これをコピペすればとりあえずいつも通りのffmpegが出来上がります。
基本コピペでOKですが、開発用にビルドすることになるので以下のオプションには注意しましょう。
- インストール先を変更する
--prefix
- 開発用に使うので、適当なディレクトリを指定しましょう
- 最適化を無効にする
--disable-optimizations
- これをつけないとデバッガで追う際に変数が全て見えなかったり実行順がソースコード通りでなくなったりします
ビルド
オプションを決めたらビルドしていきます。私の場合はffmpeg-installというディレクトリを1つ上に作ってそこに実行ファイルなどを配置するようprefixを設定してみました。
$ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
$ cd ffmpeg
$ ./configure --prefix=../ffmpeg-install --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-opencl --enable-videotoolbox --disable-optimizations
$ make -j8
$ make install
以上でビルドは終了です。
デバッグ
実習では、デバッガを使うまでもなく改造を達成してしまったので、デバッガを使ってffmpegの動作を追うことはありませんでした。ただ、一応触ってみたところ、実はハマりポイントがあったのでデバッグの方法をご紹介しておきます。
Bug Reportsのページなどにも書いてあるのですが、実は--prefix
で指定したインストール先にある実行ファイルを使って、ソースコードに対応づけながら動作を追跡することはできません。デバッガを用いる場合は、ビルドを行なったディレクトリにあるffmpeg_gという実行ファイルを用います。
これさえ知っていれば簡単で、
lldb ffmpeg_g
のようにすればデバッグを開始することができます。