FFmpeg::Command - A wrapper class for ffmpeg command line utility #2

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;

と実行してやることにより、エラーを捕捉しつつ実行状態を画面に表示、ってことができるんですけどね…なんで標準出力ではなく標準エラー出力なんだろう…