读取mplayer/ffmpeg运行时的输出信息

由于使用了退格(backspace)、覆盖(substitute)、垂直方向(vertical tab)的tab等控制字符,很难直接读到mplayer/ffmpeg运行时的信息。其实按字符读取并过滤其中的控制字符,便可以还原其输出信息的“真面目“了。以下是在php中的实现:

< ?php

$src = '/path/to/input.mp3';
$dst = '/path/to/output.flv';

$cmd = '/usr/local/bin/ffmpeg -i "%s" -acodec libmp3lame  -f flv   -y "%s" 2>&1 ';
$cmd = sprintf($cmd, $src, $dst);
$handle = popen($cmd, 'r');
while(!feof($handle)) {
    // 按字符读取
    $charset = fgetc($fd);

    // 如果是垂直tab符号
    if ($ord($charset) == 13) {
        printf("%s\n", $line);
        $line = '';
        continue;
    }

    // 如果是退格或覆盖符号
    if (ord($charset) == 10 || ord($charset) == 32) {
        continue;
    }
    $line .= $charset;
}
pclose($handle);

?>

ps: 看不出wordpress有时也很bt, 昨天这篇文章发了半天都返回503错误,后来发现是文章里&#112open一词导致的,我只好用字符p的html实体&#112;来代替了

17 thoughts on “读取mplayer/ffmpeg运行时的输出信息

发表评论