由于使用了退格(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来代替了
转码又有问题~
哈哈,我现在已经不怕不怕了。