ffmpeg mp4-видео не воспроизводится на html5-плеере в браузере (поврежденный формат)

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

если я загружаю его на свой локальный компьютер, то он отлично воспроизводится на плеере.

Есть ли проблема с синтаксисом?

1

Решение

Формат вывода не совсем правильный. Здесь необходимо учитывать два фактора:

  1. «Формат контейнера» или «формат файла», то есть способ размещения всего файла (например, AVI, MOV / QuickTime, WebM, Ogg)
  2. Кодек, который является алгоритмом, используемым для сжатия и распаковки видео и аудио данных в контейнере. Большинство файлов будут иметь два кодека: один для аудио (например, AAC, Vorbis, MP3, Opus) и один для видео (например, H.264, VP8, Theora).

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 вместо перекодировки.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector