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中的全部輸出。我想將這整個數據記錄到日誌文件中。
您是否嘗試過直接執行命令?也許avconv的調用等待一些用戶交互 –
@AlexanderBaltasar當我直接運行它時,腳本成功完成並且shell返回以獲取命令。而當我刪除'>/dev/null&'shell也顯示出來,而不是等待輸入,但輸出寫入終端而不是'$ output'變量。 – ALH