Я пытаюсь сделать что-то похожее на плеер YouTube. Самая большая проблема, с которой я сталкиваюсь сейчас, - это как мне обрабатывать загруженные пользователем видео файлы.

Например, поскольку я хочу переключаться между режимами 240p, 360p, 480p и 720p, мне нужно преобразовать каждый загруженный видеофайл в 4 разных файла для каждого разрешения, а поскольку не все браузеры могут воспроизводить .mp4, мне нужны .ogg, .mp4,. webm, так что получается 12 видеофайлов. Если на обработку 1-часового видеофайла уходит 10 минут, мне потребуется 2 часа, чтобы обработать этот файл, который безумен. Я знаю, что YouTube использует облачные серверы для обработки каждого видеофайла и обладает большой вычислительной мощностью, но я думаю, что в этом есть какая-то хитрость.

Итак, мой вопрос: что я могу с этим поделать и как YouTube справляется с этим?

Мой второй вопрос: подходит ли FFmpeg для такого рода работы, и если да, то почему для выполнения этой команды требуется много времени? Я выполнил эту команду для видеофайла длиной 3 минуты 720p, и после 15 минут обработки я просто отменил процесс.

ffmpeg -i hd.webm a.mp4

Этот, с другой стороны, занял около 7 минут, но сгенерировал 200 МБ видеофайла из 25 МБ файла:

ffmpeg -i hd.webm -c:v libx264 -preset ultrafast a.mp4

1 ответ1

3

Вам понадобится всего 4 видеофайла для видео разных размеров. Но на самом деле вам не нужны эти три разных медиа-контейнера, где вам нужен только один контейнер, который может обрабатываться вашим видеоплеером. Кодируйте видео, используя только один кодек, например, H.264.

Теперь вы просто обрабатываете видео, не зная, что вы на самом деле делаете. Используются настройки по умолчанию FFmpeg, поэтому вы испытываете эти результаты. Установка ultrafast для libx264 кодирует относительно быстро, но вызывает больший размер файла. Прочтите руководство по кодированию x264 для получения дополнительной информации о наиболее важных настройках для libx264.

Если вы хотите закодировать видео, например, в 480p, вот пример командной строки:

ffmpeg -i hd.webm -s 854x480 -b:v 15M -b:a 128k -c:v libx264 -c:a libfdk_aac -preset veryfast output.mp4

Также эта страница поддержки YouTube описывает, как YouTube любит получать видео. Может быть, вы тоже можете чему-то научиться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .