Форум / Рецепты / Конвертация видео и настройка сервера (HLS и MP4)
У нас есть MP4 файл, мы хотим чтобы он отдавался по типу HLS и MP4. Для настольных систем HLS, для смарт-тв, телефонов и других устройств MP4.
Есть два способа. Первый это конвертировать из одного файла в два формата, MP4 и затем из него же в HLS. Соответственно место на нашем жестком диске уменьшится в двое. Первый вариант нас не устраивает. Пойдем вторым.
И так. Вот как мы сделаем. Мы сконвертируем файл в MP4 и будет отдавать его посредством HLS (transmuxing) и MP4 (progressive). Но давайте по порядку.
Как правильно конвертировать видео для сайта с помощью ffmpeg аналогично Vimeo и Youtube.
Разберем подробно детали. Все примеры будут показаны для конечного видео файла, размеры которого 640x360 (360p)

В ffmpeg все дорожки начинаются с нуля. Например в вашем видео у вас есть две аудиодорожки, 1 и 2.
Но в ffmpeg они будут числятся как 0 и 1. То-есть если вы хотите конвертировать видео со второй аудиодорожкой то вам нужно указать ее как 1 (-map 0:a:1).
А если вам нужна первая аудиодорожка то соответственно выставить 0 (-map 0:a:0). Но как узнать какая из них первая и какая вторая?
Открываем видео через vlc, нажимаем вверху на Аудио, затем Аудиодорожка и тот порядок в котором они расположены в vlc, тот и будет действителен для ffmpeg.
Это касается и других дорожек, включая видео и субтитры.

Файл который должен быть сконвертирован
-i /root/video/input.mkv

Видеодорожка как известно у нас одна (смотреть выше)
-map 0:v:0

Аудиодорожка начинается с нуля (смотреть выше)
-map 0:a:0

Видео кодек для mp4 (обязательно). Указывайте так, как показано ниже, ничего не удаляя.
-vcodec libx264 -pix_fmt yuv420p

Синхронизация видео (обязательно). Для web нужно указывать именно 1. Другие варианты будут работать не со всеми видео файлами.
-vsync 1

Правильно масштабируем видео. Ниже указан размер который на выходе будет 640 (ширина) на 360 (высота).
scale=w=640:h=360:force_original_aspect_ratio=decrease указывает на то, что видео будет масштабироваться так чтобы картинка и лица не растягивались, то-есть сохранять пропорции.
Например. У вас есть видео файл, размеры которого 1280x512 то на выходе вы получите файл с размерами 640x272. И это правильный подход.
-vf scale=w=640:h=360:force_original_aspect_ratio=decrease

Качество картинки. Указывайте 20
-crf 20

Совместимость с телефонами и Смарт-ТВ.
-preset medium -profile:v high -level 3.1

Максимальный битрейт видео 825k
-maxrate 825k -bufsize 1200k

Синхронизация аудио (обязательно). Тоже самое что и async 1, только async устарелый параметр и нужно указывать именно так как показано ниже.
-af aresample=async=1:min_hard_comp=0.100000:first_pts=0

Аудио кодек. Указывайте aac или libfdk_aac. Мы рекомендуем использовать aac.
Подробнее можно почитать на странице ffmpeg: https://trac.ffmpeg.org/wiki/Encode/AAC (английский)
Если вы все таки выберите libfdk_aac, то ffmpeg должен быть скомпилирован должным образом: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu#libfdk-aac
-acodec aac

Аудиодорожку делаем стерео
-ac 2

Битрейт аудио
-ab 128k

Конечный файл будет mp4
-f mp4

Обязательный параметр для воспроизведения видео на сайте.
Если вы не укажите эти параметры то ваше видео не сможет воспроизводится пока файл не скачается целиком.
А нам этого не надо. Поэтому обязательно укажите эти параметры.
-movflags +faststart

Последнее что нужно указать, так это то, куда сохранится конечный видео файл. Укажите свой путь.
/root/video/output.mp4

Примеры размеров и битрейтов видео:
360p: 640x360
-vf scale=w=640:h=360:force_original_aspect_ratio=decrease -ab 128k -maxrate 825k -bufsize 1200k

480p: 854x480
-vf scale=w=854:h=480:force_original_aspect_ratio=decrease -ab 196k -maxrate 1200k -bufsize 4200k

720p: 1280x720
-vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -ab 320k -maxrate 2000k -bufsize 6400k

1080p: 1920x1080
-vf scale=w=1920:h=1080:force_original_aspect_ratio=decrease -ab 320k -maxrate 2800k -bufsize 8200k

Устранить чересстрочность и масштабировать видео (разделять запятой). Параметр yadif должен стоять первым.
-vf yadif,scale=w=640:h=360:force_original_aspect_ratio=decrease

Усиление звука начиная от 1dB. Например усилить звук на 5dB. volume=5dB указываем в конце
-af aresample=async=1:min_hard_comp=0.100000:first_pts=0,volume=5dB

Полная команда:
ffmpeg -y -i /root/video/input.mkv
-map_metadata -1 -map 0:v:0 -map 0:a:0
-vcodec libx264 -pix_fmt yuv420p -vsync 1
-vf scale=w=640:h=360:force_original_aspect_ratio=decrease
-crf 20 -preset medium -profile:v high -level 3.1 -maxrate 825k -bufsize 1200k
-af aresample=async=1:min_hard_comp=0.100000:first_pts=0
-acodec aac -ac 2 -ab 128k -f mp4 -movflags +faststart
/root/video/output.mp4

Наш файл mp4 готов. Можно приступить к настройке сервера и софта.

Сервер: Ubuntu 14.04
Скачиваем и распаковываем следующий софт:
Веб сервер nginx: https://nginx.org/download/nginx-1.10.2.tar.gz
Модуль для hls и mp4: https://github.com/kaltura/nginx-vod-module/archive/1.12.zip
Модуль для статистики: https://github.com/vozlt/nginx-module-vts/archive/v0.1.3.zip
Скрипт для запуска nginx: https://yadi.sk/d/qbm8J7Iy389iWA
Файл с настройками nginx: https://yadi.sk/i/V3MTS3u3389yvR

Заливаем на сервер к примеру в каталог /root/nginx. Пути соответственно должны получится такими:
/root/nginx/nginx-1.10.2
/root/nginx/nginx-vod-module-1.12
/root/nginx/nginx-module-vts-0.1.3
/root/nginx/nginx_source
/root/nginx/nginx.conf

Заходим на сервер через ssh, в каталог /root/nginx/nginx-1.10.2 и выполняем следующие команды:
chmod +x configure

./configure --with-file-aio --with-threads --with-cc-opt="-O3" --add-module=/root/nginx/nginx-vod-module-1.12 --add-module=/root/nginx/nginx-module-vts-0.1.3

make
make install
mv /root/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
mv /root/nginx/nginx_source /etc/init.d/nginx
chmod +x /etc/init.d/nginx

Софт установлен.
Каталог в котором будут хранится наши видео файлы: /root/video/
Запускаем nginx командой:
service nginx restart

Все готово.
Теперь поместим наш видео файл в каталог /root/video/. Полный путь которого получится примерно таким: /root/video/output.mp4
mp4 файл доступен по адресу: localhost/mp4/output.mp4
hls файл доступен по адресу: localhost/mp4/output.mp4/index.m3u8
статистика по адресу: localhost/status/
dankerСсылка на пост (Смотрели 333)10.01.17 09:20     Ответить
Ваше имя*
 E-mail* (не публикуется)
 
 
Если пишете о проблеме, то приложите, пожалуйста, ссылку на свой плеер отсюда — Плеер: Файл > Код > Ссылка
Вставка кода — [code][/code] дублировать ответы на e-mail
1
seek 16.01.17 - 15:33
В чем преимущество передачи файла в hls?
Сообщить об ошибке на сайте
 Uppod © 2008–2016       Контактная информация   /  Соглашение  /  Twitter  /  Facebook
Сообщить об ошибке на сайте
Если ошибка относится к плееру, а не сайту, либо Вы хотите получить ответ на вопрос —
лучше написать на форуме