flvを静止画連番にコンバートしたかったので調べてみた。

タイトル通りのネタです。
なぜそんなことをしたいかというと、ネットで見つけた良い感じのエフェクト動画をコマ送りで見たいからなのです。
エフェクトに限らずアニメーションとかだってありますよね。なのでみなさんここは理解して頂けるところかと。

しかしそういう動画はだいたいどうにかダウンロードは出来たとしても、flvなんかだったりして、
プレイヤーが対応していないとコマ送りで見ることは出来ない場合がほとんどです。

僕はコマ送りが出来る、しかもLinux対応していて使い勝手も良いプレイヤーなんて知りません。
それならいっその事、静止画連番にしてしまえ!と思って探してみたのでまとめます。


まずflvを静止画にする際にはFFmpegを使用します。
OSによっては最初から入っているかもしれませんが、windowsとかの場合はどこかから入手しないといけません。
公式サイトからたどったらこちらにあるようです。
— 補足 —
上記ページからダウンロードしようとする際、あれこれバリエーションがあるのでわけがわからなくなりますが、
ひとまずは自分が使用しているOSのbit数と同じもののstatic版を使えば問題ないようです。
static版とshared版の違いは、shared版だとライブラリをdllにして外に出してあるという点で、
特に何も考えないで使いたい場合はstatic版を使えば問題ありません。
static版をWinXP x64でテストしたところ、問題なく動作しました。

準備ができたら以下を参考にコンバートします。
FFMpegで動画を画像にする

今回は静止画コンバートの際に圧縮がかかって欲しくなかったので、pngに変換しました。
ffmpeg -i data.flv -f image2 -vcodec png data.%04d.png

こうするとカレントディレクトリからdata.flvを探してdata.0001.png, data.0002.png,,,という連番に展開してくれます。
パスはフルパス指定してやることもできますが、その際はダブルクオーテーションで囲ってやったほうが安全だと思われます。

png連番が作られたら今度はそれを再生したいのですが、僕が普段一番使っているdjv_viewはpngに対応していないのか、僕の環境のバージョンが悪いのかわかりませんが、再生出来ませんでした。
なのでHoudiniのmplayを使用することにしました。

Linux環境での話ですが、djv_viewでは1コマ目をコマンドラインから指定してやると、勝手に連番を探してそのまま再生をスタートしてくれます。
例えばこんな感じで実行します。

djv_view data.0001.exr

この場合はpngですけど、djv_viewではpngが読めなかったのでなんとなくexrで例を。

一方、mplayの場合はそういう機能がなく、1フレ目だけ指定したらそのまま1フレ目を表示するのみです。
しかし出来れば連番を読み込んで欲しいところ。
そういう場合は以下のように書きます。

mplay -f 1 100 1 data.*.exr

これだと1から100フレまで1フレずつ(つまり全フレーム)を読み込んでくれます。
若干手間ではありますが、linuxならシーケンス見つけてmplay再生してくれるPythonスクリプトなんかを用意してやるのも一つの手かもしれません。

あとはFFmpegからpngではなくtgaなどが出せればdjv_view使えるのでそれでもいいかもしれませんが。

以上、メモでした。
 

— 補足2 —
会社のWindows環境で普段使ってるdjv_viewでpng連番読めました。
もしかしたらただのバージョンとか環境の問題だったのかもしれません。
なーんだ。

コメントを残す

メールアドレスが公開されることはありません。