2011-01-25 50 views
1

我需要特定的代碼來檢查與PHP是否完成編碼視頻與ffmpeg。我只需要一個簡單的真/假檢查。如果編碼完成,則爲true;如果未完成,則爲false。此外,語言是PHP,並且我已經安裝了ffmpeg-php。如何檢查ffmpeg是否用PHP編碼視頻?

更多信息:我在Linux上。

代碼如下

convertToFlv($input, $output); 

function convertToFlv($input, $output) { 

echo "Converting $input to $output"; 

$command = "ffmpeg -y -i $input -acodec libfaac -ar 44100 -ab 96k -vcodec libx264 -level 41 -crf 20 -bufsize 20000k -maxrate 25000k -g 250 -r 20 -s 640x480 -coder 1 -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -flags2 +brdo+dct8x8+bpyramid -me umh -subq 7 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -rc_eq 'blurCplx^(1-qComp)' -bf 16 -b_strategy 1 -bidir_refine 1 -refs 6 -deblockalpha 0 -deblockbeta 0 $output"; 

shell_exec($command); 

} 
+0

請查看:https://github.com/alixaxel/phunction/blob/b9afe8409c9e0b9d2ccb1696ef07469d70bd1e05/_.php#L1076。 – 2011-03-30 18:01:38

回答

1

也許你可以給我們一個線索,你是如何開始編碼了嗎?你正在運行什麼操作系統?

假設你在Unix/POSIX/Linux系統上以正確的方式進行操作 - 即你在一個獨立的進程組中創建了一個新進程,並且無法直接讀取返回值,那麼爲什麼不你只是包裝ffmpeg的二進制在一個簡單的sh腳本 - 是這樣的:

#!/bin/bash 

OUTDIR=/var/www/html/video 

/usr/local/bin/ffmpeg -s sqcif -i $1 ${OUTDIR}/${2}.mpeg` 

RETURNED=$? 

echo ${RETURNED} >${OUTDIR}/${2}.completion 

...然後就可以看到當腳本已經完成,以及它是否成功運行。

+0

有沒有辦法用PHP來做到這一點? – Kevin 2011-01-25 22:33:07

3

您可以在php exec()中的ffmpeg之後添加另一行代碼,以在命令行中運行php頁面。

只需以「;」結尾您的ffmpeg行,並輸入「php」,然後輸入你的php腳本的絕對位置來運行。你可以添加一個GET變量,你正在等待要轉換的視頻ID:

$cmd = "ffmpeg -i[SOURCE FILE] [OUTPUT FILE]; php /public_html/etc/ffmpegComplete.php?videoID=101"; 

exec($cmd); 
+1

您只需在此注意將執行的新php頁面將使用CLI配置執行,而不是使用CGI或Apache2配置。 – 2011-06-14 13:51:15

1

簡單的答案是,以檢查進程仍在運行,這意味着無論是過濾的ps輸出或跟蹤的ffmpeg進程的PID,並通過pcntl_waitpid進行檢查。