2012-08-22 13 views
0

我已經開始使用ffmpeg,我對它很陌生,所以請耐心等待。ffmpeg:在php中使用返回的數據

我在我的服務器上安裝了ffmpeg,它工作的很好;我可以運行某些命令,並通過ssh

登錄例如,我可以在運行時得到的輸出數據

ffmpeg -i Sleep\ Away.mp3 

哪個返回如下:

ffmpeg version 0.8.5, Copyright (c) 2000-2011 the FFmpeg developers 
    built on Aug 20 2012 09:28:43 with clang 3.1 (tags/Apple/clang-318.0.61) 
    configuration: --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libfaac --enable-libxvid --enable-libx264 --enable-libvpx --enable-hardcoded-tables --enable-shared --enable-pthreads --disable-indevs --cc=clang 
    libavutil 51. 9. 1/51. 9. 1 
    libavcodec 53. 7. 0/53. 7. 0 
    libavformat 53. 4. 0/53. 4. 0 
    libavdevice 53. 1. 1/53. 1. 1 
    libavfilter 2. 23. 0/2. 23. 0 
    libswscale 2. 0. 0/2. 0. 0 
    libpostproc 51. 2. 0/51. 2. 0 
[mp3 @ 0x7f9694011a00] Header missing 
    Last message repeated 13 times 
[mp3 @ 0x7f9694007c00] max_analyze_duration 5000000 reached at 5007020 
[mp3 @ 0x7f9694007c00] Estimating duration from bitrate, this may be inaccurate 
Input #0, mp3, from 'Sleep Away.mp3': 
    Metadata: 
    track   : 3 
    album   : Bob Acri 
    artist   : Bob Acri 
    title   : Sleep Away 
    genre   : Jazz 
    album_artist : Bob Acri 
    composer  : Robert R. Acri 
    date   : 2004 
    Duration: 00:03:21.77, start: 0.000000, bitrate: 192 kb/s 
    Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 192 kb/s 
At least one output file must be specified 

我問的問題是,如何我可以使用上面的輸出數據嗎?我開發了一個音樂網站;說我經歷了所有的MP3文件要循環,並保存有關它們的信息存入數據庫,因此,上述將導致:

Sleep Away.mp3 mp3 3:21 Jazz 2004  Bob Acri ... 

顯然在表

我試圖使用PHP 反撥運營商迄今爲止沒有成功。我只是覺得我會在這裏提出一個問題,從那些做過類似事情的人那裏得到一些建議。

感謝

更新:我曾嘗試以下

<?php $output = `ffmpeg -i Sleep\ Away.mp3`; echo "<pre>$output</pre>"; ?> 
<?php $output = shell_exec('ffmpeg -i Sleep\ Away.mp3'); echo "<pre>$output</pre>"; ?> 

兩個似乎沒有任何回報。

+0

當您嘗試使用反引號操作符時,會出現什麼問題?你能提供你使用的代碼和結果輸出嗎? – codeling

+0

嗨,感謝您的回覆我已經嘗試shell_exec與以下<?php $ output = shell_exec('ffmpeg -i Sleep \ Away.mp3');回聲「

$output
」;但這不會返回任何東西我已經在我的Mac OSX獅子上安裝ffmpeg我在哪裏出錯 – user1503606

+0

請更新問題,而不是在兩個註釋中寫同樣的問題; ) – codeling

回答

3

ffmpeg發送一個標準錯誤信息,而不是標準輸出這是什麼shell_exec()捕獲。

您需要添加:2>&1在你的命令的末尾:

$out = shell_exec('/path/to/ffmpeg -i Sleep\ Away.mp3 2>&1'); 
+0

好點,本來是我的下一個建議。我應該嘗試更多的分析方法,而不是排除過程;) – codeling

+0

您先生是一個圖例謝謝這對我有用<?php $ output = shell_exec('/ usr/local/bin/ffmpeg -i Sleep \ Away。 mp3 2> &1'); echo「

$output
」;真棒,所以我把它,我只是運行一個正則表達式來獲取適當的信息;) – user1503606

+0

謝謝,但要注意Nyarlatothep的答案(我upvoting它) - 在一般情況下,這對於跟蹤shell_exec問題更有幫助。 – LSerni

1

所以你想從PHP執行一個shell命令(在你的情況下是ffmpeg),並捕獲它的輸出,對吧?

Backtick Operator或shell_exec函數是一個很好的開始。

請注意,這些功能僅在禁用安全模式且未禁用shell_exec功能(通過disable_functions設置)時纔有效。如果您的腳本在共享主機上運行,​​您可能無法訪問這些配置,但您至少應該能夠通過phpinfo()進行檢查。

如何指定您在命令中引用的任何文件的路徑也至關重要 - 您的php腳本可能無法運行您希望它運行的工作文件夾;所以最好通過絕對路徑引用所有文件。

+0

嗨,感謝您的回覆我已經嘗試shell_exec以下<?php $ output = shell_exec('ffmpeg -i Sleep \ Away.mp3'); echo「

$output
」;但這不會返回任何東西我已經在我的Mac OSX獅子上安裝了ffmpeg我在哪裏出錯 – user1503606

+0

我提到的配置選項呢?他們設定了什麼?怎麼樣的文件路徑(相對與絕對,看到更新的答案) – codeling

+0

剛剛檢查我的php.ini文件和安全模式設置爲關allow_call_time_pass_reference =在 ;安全模式 ; safe_mode =關閉 – user1503606

0

使用FFprobe代替:

ffprobe -loglevel error -show_format -show_streams input.mp3 

的FFmpeg是用於處理視頻,FFprobe是獲取附帶的工具視頻信息。它以各種易於解析的格式輸出數據,而不需要解析FFmpeg在導入視頻時偶然吐出的診斷消息。