结合图像和音频ffmpeg xampp php

问题描述:

我在我的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中正常工作,然后将解决方案包装在' 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

问题是与你的双引号字符串内的斜线。 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

我想出了一个脚本,它的工作原理,但我对发生了什么感到困惑。该脚本引用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'); 

?>