2016-02-26 46 views
1

我使用PHP exec命令,以便通過avconv的Linux庫轉換視頻:爲什麼exec for avconv不會返回腳本視頻轉換狀態?

exec("avconv -i $mp4FilePath -acodec libvorbis -aq 5 -ac 2 -qmax 25 -threads 2 $webmFilePath > /dev/null &" , $output, $return); 
echo PHP_EOL . 'Script output: ' . $return . PHP_EOL; 
die; 

現在,當我運行PHP腳本輸出:

developers 
    built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1) 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/html/domain/videos/avIBS0ZJmjCQBZV7eWqSWSe0u8lBgRCc.mp4': 
    Metadata: 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isommp42 
    creation_time : 2014-09-08 00:58:51 
    Duration: 00:02:50.38, start: 0.000000, bitrate: 414 kb/s 
    Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 640x360 [PAR 1:1 DAR 16:9], 315 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc 
    Stream #0.1(und): Audio: aac, 44100 Hz, stereo, fltp, 95 kb/s 
    Metadata: 
     creation_time : 2014-09-08 00:58:51 
[libvpx @ 0x17bb220] v1.3.0 
Output #0, webm, to '/var/www/html/domain/videos/avIBS0ZJmjCQBZV7eWqSWSe0u8lBgRCc.webm': 
    Metadata: 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isommp42 
    creation_time : 2014-09-08 00:58:51 
    encoder   : Lavf54.20.4 
    Stream #0.0(und): Video: libvpx, yuv420p, 640x360 [PAR 1:1 DAR 16:9], q=-1-25, 200 kb/s, 1k tbn, 24 tbc 
    Stream #0.1(und): Audio: libvorbis, 44100 Hz, stereo, fltp 
    Metadata: 
     creation_time : 2014-09-08 00:58:51 
Stream mapping: 
    Stream #0:0 -> #0:0 (h264 -> libvpx) 
    Stream #0:1 -> #0:1 (aac -> libvorbis) 
Press ctrl-c to stop encoding 
frame= 4089 fps= 21 q=0.0 Lsize= 7151kB time=170.38 bitrate= 343.8kbits/s  
video:5288kB audio:1751kB global headers:4kB muxing overhead 1.538016 

當腳本運行和轉換成功它在最後一行等待什麼都沒有發生,並且echo命令沒有執行,我的腳本正在等待一個信號停止(我這麼認爲)。當我按下回車鍵時,我會回到殼體。

爲什麼返回輸出不打印出來?如何檢查視頻轉換是否成功?


編輯1:
當我刪除> /dev/null &,我可以看到腳本成功結束,$return返回0成功轉換(如果我錯了指正)。但是$output是一個空數組。雖然我可以看到上面顯示的shell中的全部輸出。我想將這整個數據記錄到日誌文件中。

+0

您是否嘗試過直接執行命令?也許avconv的調用等待一些用戶交互 –

+0

@AlexanderBaltasar當我直接運行它時,腳本成功完成並且shell返回以獲取命令。而當我刪除'>/dev/null&'shell也顯示出來,而不是等待輸入,但輸出寫入終端而不是'$ output'變量。 – ALH

回答

0

首先我刪除了> /dev/null &以便能夠在腳本工作完成後返回到終端。然後爲了得到$output裏面的avconv輸出,我在腳本的末尾添加了2>&1

相關問題