В моем xampp установлен ffmpeg. Я пытаюсь объединить один файл изображения с одним аудио-файлом, чтобы создать один видео-файл, используя скрипт 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");
?>
Проблема с косыми чертами внутри строки в двойных кавычках. 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'; ) );
?>
Я понял сценарий, который работает, но я немного запутался в том, что происходит. Этот скрипт ссылается на файл ffmpeg.exe. Но не должен ли скрипт работать на php_ffmpeg.dll, когда я использую xampp? Фактически я удалил 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');
?>