Мне нужно добавить изображение и другую позицию для каждой миллисекунды видеокадра, используя php и ffmpeg.
Например:
В первую секунду я добавляю изображение в позиции X, в следующую секунду другое изображение в позиции X.
Если вы используете команду непосредственно на терминале, преобразование выполнено успешно. Но в PHP у меня есть трудности.
В php используйте следующую команду:
<?php
shell_exec('C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\ffmpeg\\bin\\vid.mp4 -i C:\\ffmpeg\\bin\\1.png -filter_complex "[0:v][1:v] overlay=100:25:enable=\'between(t,1,1.5)\'" C:\\ffmpeg\\bin\\output1.mp4');
sleep(20);
echo "1";
shell_exec('C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\ffmpeg\\bin\\output1.mp4 -i C:\\ffmpeg\\bin\\2.png -filter_complex "[0:v][1:v] overlay=10:25:enable=\'between(t,1.5,2)\'" C:\\ffmpeg\\bin\\output2.mp4');
sleep(50);
echo "2";
shell_exec('C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\ffmpeg\\bin\\output2.mp4 -i C:\\ffmpeg\\bin\\3.png -filter_complex "[0:v][1:v] overlay=250:25:enable=\'between(t,2,2.5)\'" C:\\ffmpeg\\bin\\output1.mp4');
sleep(20);
echo "3";
shell_exec('C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\ffmpeg\\bin\\output1.mp4 -i C:\\ffmpeg\\bin\\4.png -filter_complex "[0:v][1:v] overlay=300:25:enable=\'between(t,3,3.5)\'" C:\\ffmpeg\\bin\\output2.mp4');
sleep(20);
echo "4";
shell_exec('C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\ffmpeg\\bin\\output2.mp4 -i C:\\ffmpeg\\bin\\5.png -filter_complex "[0:v][1:v] overlay=350:25:enable=\'between(t,4,4.5)\'" C:\\ffmpeg\\bin\\output1.mp4');
sleep(70000);
shell_exec('C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\ffmpeg\\bin\\output1.mp4 -i C:\\ffmpeg\\bin\\1.png -filter_complex "[0:v][1:v] overlay=400:25:enable=\'between(t,5,5.5)\'" C:\\ffmpeg\\bin\\output2.mp4');
Я использовал функцию сна (PHP), но она не работала.
Пожалуйста, поскольку у меня мало опыта работы с ffmpeg и php, вы можете мне помочь.
Большое спасибо.
Устраните неполадки, изучив выходные данные команды. Это должно дать вам ответ.
exec('C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\ffmpeg\\bin\\vid.mp4 -i C:\\ffmpeg\\bin\\1.png -filter_complex "[0:v][1:v] overlay=100:25:enable=\'between(t,1,1.5)\'" C:\\ffmpeg\\bin\\output1.mp4', $output);
var_dump($output);
Других решений пока нет …