系统功能php问题

时间:2011-10-26 15:20:42

标签: php

我正在尝试使用系统功能。我执行的命令返回多行输出。样本输出:

C:\wamp\www\WordPress\wp-content\plugins\audio-player\app\uploads>ffmpeg -i 4ea8
23b13639d.mp3
ffmpeg version N-34031-ge403a97, Copyright (c) 2000-2011 the FFmpeg developers
  built on Oct 25 2011 15:06:47 with gcc 4.6.1
  configuration: --enable-gpl --enable-version3 --enable-runtime-cpudetect --ena
ble-avisynth --enable-bzlib --enable-frei0r --enable-libopencore-amrnb --enable-
libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --ena
ble-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --en
able-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
--enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib

  libavutil    51. 22. 0 / 51. 22. 0
  libavcodec   53. 23. 0 / 53. 23. 0
  libavformat  53. 17. 0 / 53. 17. 0
  libavdevice  53.  4. 0 / 53.  4. 0
  libavfilter   2. 45. 0 /  2. 45. 0
  libswscale    2.  1. 0 /  2.  1. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[mp3 @ 01C98580] max_analyze_duration 5000000 reached at 5015510
[mp3 @ 01C98580] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from '4ea823b13639d.mp3':
  Metadata:
    title           : Gori
    track           : 2
    artist          : A Band Of Boys
    genre           : genre
    TLEN            : 253753
  Duration: 00:04:13.88, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
At least one output file must be specified

我需要解析此输出之外的持续时间。但为此,第一步是实际获取字符串输出。但是,系统命令仅根据文档返回最后一行。我怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

改为使用exec()

<?php

exec("ffmpeg -i 4ea823b13639d.mp3", $output);

?>

$output将是给定命令的每一行输出的数组。

或者,使用shell_exec()或反引号运算符。这些将把程序的整个输出返回到一个大字符串而不是字符串数组。

答案 1 :(得分:1)

而不是system(),调用exec()将所有输出行放入一行数组。

然后遍历数组以查找包含持续时间的行。     exec(“ffmpeg -options ...”,$ output);

// $output now holds an array of lines
foreach ($output as $line) {

   // Trim whitespace and look for Duration in the first position
   if (strpos(trim($line), "Duration") === 0) {
     echo $line;
     // Cut off the bitrate info
     list($durpart, $bitpart) = explode(",", $line);
     echo $durpart;
   }
}