2014-12-03 122 views
0

我在我的xampp中安裝了ffmpeg。我試圖結合一個圖像文件與一個音頻文件,使用PHP腳本生成一個視頻文件。但是,不生成文件。我已經試過:結合圖像和音頻ffmpeg xampp php

<?php 

$ffmpegcmd = "ffmpeg -loop 1 -i C:\xampp\htdocs\testingffmpeg\dog.png -i C:\xampp\htdocs\testingffmpeg\dog.wav -c:v libx264 -tune stillimage \ -c:a aac -strict experimental -b:a 192k -pix_fmt yuv420p -shortest C:\xampp\htdocs\testingffmpeg\dog.mp4"; 

shell_exec($ffmpegcmd); 

?> 

<?php 

shell_exec("ffmpeg -loop 1 -i C:\xampp\htdocs\testingffmpeg\dog.png -i C:\xampp\htdocs\testingffmpeg\dog.wav -c:v libx264 -tune stillimage \ -c:a aac -strict experimental -b:a 192k -pix_fmt yuv420p -shortest C:\xampp\htdocs\testingffmpeg\dog.mp4"); 

?> 

<?php 

shell_exec("C:\xampp\php\ext\ffmpeg -loop 1 -i C:\xampp\htdocs\testingffmpeg\dog.png -i C:\xampp\htdocs\testingffmpeg\dog.wav -c:v libx264 -tune stillimage \ -c:a aac -strict experimental -b:a 192k -pix_fmt yuv420p -shortest C:\xampp\htdocs\testingffmpeg\dog.mp4"); 

?> 
+0

[KISS](https://en.wikipedia.org/wiki/KISS_principle)!你應該擺脫PHP,讓命令行在shell中正常工作,然後將解決方案包裝在'<?php'中。 – mudasobwa 2014-12-03 08:27:01

+0

建議首先使用命令行進行測試。上面的腳本有一個額外的「\」,搞亂了東西,輸出mp4比原始音頻更長。我發現了一個效果更好的ffmpeg腳本:ffmpeg -loop 1 -i dog.jpg -i dog.wav -shortest -acodec copy -f mov dog.mp4但是,它仍然無法在PHP腳本中使用shell_exec() 。 – user3080392 2014-12-03 11:15:48

回答

0

問題是與你的雙引號字符串內的斜線。 PHP威脅那些爲命令序列

(如\n爲回車等國)你有兩種可能性:要麼逃避斜線與addslashes

<?php 
    shell_exec(addslashes('$ffmpegcmd = "ffmpeg -loop 1 -i C:\xampp\htdocs\testingffmpeg\dog.png -i C:\xampp\htdocs\testingffmpeg\dog.wav -c:v libx264 -tune stillimage \ -c:a aac -strict experimental -b:a 192k -pix_fmt yuv420p -shortest C:\xampp\htdocs\testingffmpeg\dog.mp4';)); 
?> 
+0

我試過單引號,它沒有工作。我真的不明白如何使用addslashes。在「$」之後插入字符串「cmd」嗎? – user3080392 2014-12-03 12:11:12

+0

我提供了'addslashes'描述的鏈接。 '$ cmd'用於你的命令。你應該用你的命令用單引號替換它。 – mudasobwa 2014-12-03 12:12:46

+0

謝謝,但單引號或addslashes都沒有工作。我甚至在正在工作的php代碼中添加了該行,但沒有收到任何錯誤消息。它似乎跳過了shell_exec行。也許它與xammp有關。 – user3080392 2014-12-03 12:25:28

0

我想出了一個腳本,它的工作原理,但我對發生了什麼感到困惑。該腳本引用ffmpeg.exe文件。但是,當我使用xampp時,腳本是否應該能夠在php_ffmpeg.dll上運行?事實上,我刪除了php_ffmpeg.dll並運行腳本,它仍然工作。甚至安裝.dll又有什麼意義?當我在真實的服務器上使用它時,這個腳本會起作用嗎?

下面是工作,有或沒有的.dll文件的腳本:

<?php 

shell_exec('C:\ffmpeg\bin\ffmpeg.exe -loop 1 -i "C:\xampp\htdocs\testingffmpeg\dog.jpg" -i "C:\xampp\htdocs\testingffmpeg\dog.wav" -shortest -acodec copy -f mov C:\xampp\htdocs\testingffmpeg\dog.mp4'); 

?>