由于使用了退格(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错误,后来发现是文章里popen一词导致的,我只好用字符p的html实体p来代替了
转码又有问题~
哈哈,我现在已经不怕不怕了。