mediakit開発使えそうな感じになってきた

github.com

複雑な動画の処理を記述するためのmediakitを作り始めた - ainameの日記, ffmpegがハングしたことを検知したらkillするための実行環境 - ainameの日記

に引き続いてmediakitを鋭意開発中。 先日timeoutの実装がうまく行ったおかげではずみがついた。

v0.0.10という絶賛互換性無視で変更を加えていく可能性のあるバージョンではあるけど、Rubyからffmpeg叩きたいときに必要な基本的な機能は割と揃ってきた。

開発方針として高級(動画オブジェクトとかトランスコーダークラスみたいなもので扱う)なAPIと低級(ffmpegのコマンドをひたすら手続き的に記述する感じの)なAPI両方用意しておいて使う側が好きなインターフェイスを利用できるようにするというようになっていて、今現在低級な部分をシコシコ作っている段階です。

高級・低級みたいなのをあえて分けてる理由としては、実装上で単一責務の原則に則って実装していると勝手に分かれるというのと、ffmpeg自体がそもそも異常に複雑なので最初からオブジェクト操作的なインターフェイスで実装していくとしんどいというのがあるので、まずベースとなるところをシンプルにしっかり作って、その上にオブジェクト操作的なインターフェイス実装していくという流れです。

  • コードによるコマンドの記述
  • 生成するコマンドの自動シェルエスケープ機能
  • ユニットテスト時のサポート機能
  • オプションでniceをつける機能
  • オプションでハング時にkillする機能
  • オプションでloggerを利用する機能
  • 利用するffmpegがサポートしているコーデック、フォーマット、エンコーダーデコーダーを構造体でリストアップする機能

あと、機能ではないけどCircleCI上で自前でffmpegの最新版をビルドしてテストに利用するようにしたのでffmpegを直に触ってテスト出来る状態になっている。ドキュメントもYARD形式で徐々に書いてみている。

もし興味が有る方は gem install mediakit してフィードバックいただけると助かります。 (まだ実際の動画のエンコードに使ってないのでバグは普通にあるかと思います。自分も明日会社で使ってみます。)