2011-02-25 161 views
4

我正在使用FFMpeg來隱藏視頻,並且它從命令行正常工作。我使用下面的命令:FFMpeg在命令行中工作,但不在PHP中使用exec();

ffmpeg -i input.mpg -vcodec libx264 -b 819200 -s 100x100 -g 15 -bf 3 -b_strategy 1 -coder 1 -qmin 10 -qmax 51 -sc_threshold 40 -flags +loop -cmp +chroma -me_range 16 -me_method hex -subq 5 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -directpred 1 -flags2 +fastpskip -dts_delta_threshold 1 -acodec libfaac -ab 48000 output.m4v 

然而,當我使用PHP的exec(運行命令),輸出視頻的編碼不正確而被扭曲和裁剪。我在PHP中使用以下內容:

$output = exec($cmd . ' 2>&1', $output, $return); 

$輸出返回'0'的成功代碼。

有沒有人有任何建議?

謝謝。

回答

7

這是不尋常的。您可能安裝了多個ffmpeg二進制文件,而由PHP/Apache用戶調用的二進制文件與您在命令行中作爲用戶調用的二進制文件不同。

嘗試在exec()中指定ffmpeg二進制文件(/ usr/bin/ffmpeg或其他)的完整路徑。

+0

你是個傳奇!給予好評。非常感謝!據我所知,我沒有兩個版本,但把絕對路徑直接排序。再次感謝你。 – Kit

+0

沒問題,很高興你能工作! – glomad

+0

我剛剛安裝了ffmpeg,並懷疑可能重啓Apache會做到這一點 - 但這一切都一樣! (只抓取海報幀,所以執行時間不是問題)。 – Ecropolis

1

這聽起來像一些命令行選項正在丟失/改變。我會嘗試這個分成2部分的過程:

  1. 寫一個shell腳本上即時(從PHP)擁有所有正確的命令參數(使其可執行文件)
  2. 執行shell腳本(來自PHP)
+0

在執行此操作之前,請確保使用passthru()替換exec()不會解決問題。這將是一個更快/更簡單的修復,如果它的工作。 – Teddy

+0

謝謝你的回覆。請您詳細說明我將如何編寫shell腳本?我對此不太瞭解。 Chris – Kit

0

我可能會嘗試:

1)改變 '2> & 1' 到 '2> '

此外,轉碼可能需要一段時間。你確定你等待足夠長的時間來完成轉碼嗎?

相關問題