FFmpeg-Command-0.01 を CPAN にアップしました。
エラーハンドリングのために、system() での実行をやめて、IPC::Run::start() を利用するようにしました。 ただ、これによる弊害がひとつあって、ffmpeg コマンド実行時に表示される、以下の様な実行状態が見えなくなるんですよね。
Seems that stream 0 comes from film source: 1000.00 (1000/1) -> 10.00 (10/1) Input #0, flv, from 'mizzy.flv': Duration: 00:00:07.9, bitrate: N/A Stream #0.0: Video: flv, yuv420p, 320x240, 10.00 fps(r) Output #0, mp4, to 'mizzy.mp4': Stream #0.0: Video: h264, yuv420p, 320x240, q=2-31, 600 kb/s, 10.00 fps(c) Stream mapping: Stream #0.0 -> #0.0 [h264 @ 0x40424010]using cpu capabilities MMX Press [q] to stop encoding frame= 35 q=24.0 size= 263kB time=3.5 bitrate= 616.7kbits/s
というのも、この内容は標準エラー出力に対して出力されているのですが、FFmpeg::Command ではエラーの内容を捕捉するために、
start [ command, options ], \$in, \$out, \$err;
といった感じで IPC::Run::start() を実行して、標準エラー出力への出力を $err に格納しています。そのせいで標準エラー出力への出力内容が、画面に表示されなくなってしまっています。
これが標準エラー出力ではなく、標準出力に対して出力されていれば、
start [ command, options ], \$in, undef, \$err;
と実行してやることにより、エラーを捕捉しつつ実行状態を画面に表示、ってことができるんですけどね…なんで標準出力ではなく標準エラー出力なんだろう…