Я выполняю следующую команду для вставки водяного знака на видео и вывода в виде формата 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
вместо повторного кодирования.