ffmpeg を呼び出す系の python ラッパーたち

黙殺するのもなんだなーって思ったんで一応。

オレ式になぜPyAVなのか、はハッキリしている。無論「欲しいのはライブラリ機能へのダイレクトなアクセスだから」だ。だから現状に多少の不満があっても、間違いなく一番正解だ。

けど「ffmpeg をラップしたい/して欲しい」という動機の中には、間違いなく「ffmpeg のコマンドラインが複雑過ぎてやなんだよ」てだけのライトな願いってのもある。当然毎度アタシもイヤだ。誰一人全貌なんぞ理解出来てないと思うぞ。そういうわけで、普通なら「なんだよ、ただ subprocess で呼び出すだけかよ」であっても、相手が ffmpeg だと事情が違ってくる、というわけである。

そうは言ってもワタシ的に「自分がご入用なので」って動機ではないんで、実際に動かして評価しようとは思わない。軽くドキュメントとソースから評価してみたい。

ポイントは2点だけ。一つには「呼び出し方」。もう一つが「どんだけ楽になる?」。前者は「呼び出すだけでいい」か、何かしら出力を使いたいかどうかに関わってくる。後者は無論「本物の ffmpeg コマンドラインの複雑怪奇さをどれだけ軽減してくれるか」だ。

PyPI からいくつかめぼしいものが見つかるが、初見で評価の価値がなさそうだったのは pipeffmpeg。「色んなこと」をやってない割にダラダラとコードが長いし、コードのスタイルが硬直してそうで、何か直そうにも多分どうにもならんと思う。そして同一作者からの派生らしい wffmpeg は、構造は随分良さそうだし、README での使用例を見る限り、悪くは見えないけれど、とにかく古いし管理されてないように見える。のでこれらはなぜかランク上位で出てきてるけど無視。

印象が良いのはやはり最上位ランクの ffmpeg-pythonだ:

そうそう、この -filter_complex をスラスラ書ける人は正直「人間じゃない」。

てわけで ffmpeg-python は「ffmpeg 利用を簡易に」という目的は大いに果たせる、であろう。ただし「呼び出したらハイそれまでよ」、つまり subprocess.check_call するだけなので、何か出力を利用する向きには使えない。(その意味では上で無視すると言った pipeffmpeg はそっちをやろうとしてた。) まぁそこだけが不満なんだったら、書き換えちゃえばいいと思うけどね。

次に ffmpegwrapper:

呼び出しの手間軽減、というニーズ的には ffmpeg-python と大差なさそうに見えるが、こちらは ffmpeg の出力を取り出すことが出来るように作られている模様。threading を使ってるので安定性は大丈夫かいな、てのは動かしてみないとわからんところもあるが、期待出来るかもね。

もう一つ、というか二つが ffmpyffmpy3 の対:

後者は前者の fork で、名前の通り「Python 3 向け」として書かれたものだが、asyncio.subprocess を使っていることをウリにしている。これらはともに「ffmpeg の使い方を熟知している」ことを前提としていて、つまりは「ffmpeg の使い方が複雑過ぎてあかんのぢゃぁ」な向きには全く役に立たない。シンプルで御しやすい、とは言えるとは思うけれどもね。例えばこれ見れ。やはりこれも「ffmpeg の出力を利用したい」の方に重きが置かれているようだ。

どれ一つとして実際に動かしてないのでよくわからないけれど、ワタシ的には ffmpeg-python が一番嬉しいかなぁ。出力を利用したけりゃ自分でどうにかすりゃいいことであるし。