Я выполняю следующую команду для вставки водяного знака на видео и вывода в формате mp4, но этот формат не воспроизводится в браузере видеопроигрывателем html5.
$video_url = '../../../uploads/myvideo.mp4';
$watermarked = '../../../uploads/watermarked_video.mp4';
exec("ffmpeg -i $video_url -vf \"movie='sos.png', crop=iw:ih:0:0:dar [img]; [in] [img] overlay=(W-w)/2:(H-h)/2 [out]\" -vcodec mpeg4 -f avi $watermarked"); //creating water marked video
если я загружаю его на свой локальный компьютер, то он отлично воспроизводится на плеере.
Есть ли проблема с синтаксисом?
Формат вывода не совсем правильный. Здесь необходимо учитывать два фактора:
ffmpeg поддерживает чтение и запись множества различных форматов и кодеков, как и проигрыватель VLC. QuickTime тоже, но не так много. Браузеры, однако, гораздо более требовательны. Вы сохраняете файл в формате контейнера AVI, который не поддерживается браузерами. И вы, вероятно, должны использовать libx264
в качестве кодека, который будет выводить видео H.264 и является немного более широко используемым и надежным, чем mpeg4
который будет выводить видео MPEG-4 Part 2.
Попробуй это:
$video_url = '../../../uploads/myvideo.mp4';
$watermarked = '../../../uploads/watermarked_video.mp4';
exec("ffmpeg -i $video_url -i sos.png -filter_complex \"[1:v]crop=iw:ih:0:0:dar [img]; [0:v] [img] overlay=(W-w)/2:(H-h)/2 [out]\" -map \"[out]\" -map 0:a -vcodec libx264 -acodec copy $watermarked"); //creating water marked video
Я удалил -f
параметр, потому что ffmpeg может вывести формат из расширения выходного файла.
Фильтр фильма был удален из примера, потому что он не нужен.
-vf
был заменен в этом примере -filter_complex
, Увидеть просто а также сложный фильтрация, чтобы увидеть, в чем различия.
Аудио в этом примере будет поток скопирован с -acodec copy
вместо перекодировки.
Других решений пока нет …