← Форум / Рецепты / Конвертация видео
В этой статье вы узнаете, как правильно конвертировать видео для сайта с помощью ffmpeg аналогично Youtube и Vimeo.
Все примеры будут показаны для конечного видеофайла, размеры которого 640x360 (360p)
В ffmpeg все дорожки начинаются с нуля.
Если в вашем видеофайле у вас есть несколько аудиодорожек, первая Русская и вторая Английская (к примеру). Значит в ffmpeg они будут числиться как 0 и 1. То-есть, если вы хотите конвертировать видео только со второй аудиодорожкой (Английская) то вам нужно указать ее как 1 (-map 0:a:1). Если вам нужна только первая аудиодорожка, то соответственно выставить 0 (-map 0:a:0).
Но как узнать какая из них первая и какая вторая?
Открываем видео через vlc, нажимаем вверху на Аудио, затем Аудиодорожка и тот порядок в котором они расположены в vlc, тот и будет действителен для ffmpeg. Это касается и других дорожек, включая субтитры.
Видеофайл который должен быть сконвертирован
Видеодорожка как известно у нас одна (смотреть выше)
Аудиодорожка начинается с нуля (смотреть выше)
Видео кодек для mp4 (обязательно). Указывайте так, как показано ниже, ничего не удаляя.
Синхронизация видео (обязательно). Для web нужно указывать именно 1. Другие варианты будут работать не со всеми видеофайлами.
Синхронизация аудио (обязательно)
Цвет картинки BT.709
Правильно масштабируем видео. Ниже указан размер который на выходе будет 640 (ширина) на 360 (высота).
scale="’w=if(gt(a,16/9),640,-2):h=if(gt(a,16/9),-2,360)’" указывает на то, что видео будет масштабироваться так чтобы картинка и лица не растягивались, то-есть сохранять пропорции.
Например. У вас есть видеофайл, размеры которого 1280x512, то на выходе вы получите файл с размерами 640x272, и это правильный подход.
Качество картинки. Указывайте 20
Совместимость с телефонами и Смарт-ТВ.
Максимальный битрейт видео 800k
Аудио кодек. Указывайте aac или libfdk_aac. Мы рекомендуем использовать aac.
Подробнее можно почитать на странице ffmpeg: https://trac.ffmpeg.org/wiki/Encode/AAC (английский)
Если вы все-таки выберите libfdk_aac, то ffmpeg должен быть скомпилирован должным образом: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu#libfdk-aac
Аудиодорожку делаем стерео
Битрейт аудио
Формат конечного файла будет mp4
Обязательный параметр для воспроизведения видео на сайте.
Если вы не укажите эти параметры, то ваше видео не сможет воспроизвестись пока файл не скачается целиком.
Последнее что нужно указать, куда сохранится сконвертированный видеофайл. Укажите свой путь.
Примеры размеров и битрейтов видео:
360p: 640x360
480p: 854x480
720p: 1280x720
1080p: 1920x1080
Если необходимо устранить чересстрочность и масштабировать видео (разделять запятой). Параметр yadif должен стоять первым.
Если необходимо усилить звук, тогда вам нужно указать следующие параметры в dB. Например усилить звук на 5dB
Полная команда:
Все примеры будут показаны для конечного видеофайла, размеры которого 640x360 (360p)
В ffmpeg все дорожки начинаются с нуля.
Если в вашем видеофайле у вас есть несколько аудиодорожек, первая Русская и вторая Английская (к примеру). Значит в ffmpeg они будут числиться как 0 и 1. То-есть, если вы хотите конвертировать видео только со второй аудиодорожкой (Английская) то вам нужно указать ее как 1 (-map 0:a:1). Если вам нужна только первая аудиодорожка, то соответственно выставить 0 (-map 0:a:0).
Но как узнать какая из них первая и какая вторая?
Открываем видео через vlc, нажимаем вверху на Аудио, затем Аудиодорожка и тот порядок в котором они расположены в vlc, тот и будет действителен для ffmpeg. Это касается и других дорожек, включая субтитры.
Видеофайл который должен быть сконвертирован
-i /home/www/video/input.mkv
Видеодорожка как известно у нас одна (смотреть выше)
-map 0:v:0
Аудиодорожка начинается с нуля (смотреть выше)
-map 0:a:0
Видео кодек для mp4 (обязательно). Указывайте так, как показано ниже, ничего не удаляя.
-vcodec libx264 -pix_fmt yuv420p
Синхронизация видео (обязательно). Для web нужно указывать именно 1. Другие варианты будут работать не со всеми видеофайлами.
-vsync 1
Синхронизация аудио (обязательно)
-async 1
Цвет картинки BT.709
-color_primaries 1 -color_trc 1 -colorspace 1
Правильно масштабируем видео. Ниже указан размер который на выходе будет 640 (ширина) на 360 (высота).
scale="’w=if(gt(a,16/9),640,-2):h=if(gt(a,16/9),-2,360)’" указывает на то, что видео будет масштабироваться так чтобы картинка и лица не растягивались, то-есть сохранять пропорции.
Например. У вас есть видеофайл, размеры которого 1280x512, то на выходе вы получите файл с размерами 640x272, и это правильный подход.
-vf scale="'w=if(gt(a,16/9),640,-2):h=if(gt(a,16/9),-2,360)'"
Качество картинки. Указывайте 20
-crf 20
Совместимость с телефонами и Смарт-ТВ.
-preset medium -profile:v high -level 3.1
Максимальный битрейт видео 800k
-maxrate 800k -bufsize 1200k
Аудио кодек. Указывайте 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
Последнее что нужно указать, куда сохранится сконвертированный видеофайл. Укажите свой путь.
/home/www/video/output.mp4
Примеры размеров и битрейтов видео:
360p: 640x360
-vf scale="'w=if(gt(a,16/9),640,-2):h=if(gt(a,16/9),-2,360)'" -ab 128k -maxrate 800k -bufsize 1200k
480p: 854x480
-vf scale="'w=if(gt(a,16/9),854,-2):h=if(gt(a,16/9),-2,480)'" -ab 128k -maxrate 1200k -bufsize 4200k
720p: 1280x720
-vf scale="'w=if(gt(a,16/9),1280,-2):h=if(gt(a,16/9),-2,720)'" -ab 196k -maxrate 2000k -bufsize 6400k
1080p: 1920x1080
-vf scale="'w=if(gt(a,16/9),1920,-2):h=if(gt(a,16/9),-2,1080)'" -ab 320k -maxrate 2800k -bufsize 8200k
Если необходимо устранить чересстрочность и масштабировать видео (разделять запятой). Параметр yadif должен стоять первым.
-vf yadif,scale="'w=if(gt(a,16/9),640,-2):h=if(gt(a,16/9),-2,360)'"
Если необходимо усилить звук, тогда вам нужно указать следующие параметры в dB. Например усилить звук на 5dB
-af "volume=5dB"
Полная команда:
ffmpeg -y -i /home/www/video/input.mkv
-map_metadata -1 -map 0:v:0 -map 0:a:0
-vcodec libx264 -pix_fmt yuv420p -vsync 1 -async 1 -max_muxing_queue_size 1024
-color_primaries 1 -color_trc 1 -colorspace 1
-vf scale="'w=if(gt(a,16/9),640,-2):h=if(gt(a,16/9),-2,360)'"
-crf 20 -preset medium -profile:v high -level 3.1 -maxrate 800k -bufsize 1200k
-acodec aac -ac 2 -ab 128k -f mp4 -movflags +faststart /home/www/video/output.mp4
-map_metadata -1 -map 0:v:0 -map 0:a:0
-vcodec libx264 -pix_fmt yuv420p -vsync 1 -async 1 -max_muxing_queue_size 1024
-color_primaries 1 -color_trc 1 -colorspace 1
-vf scale="'w=if(gt(a,16/9),640,-2):h=if(gt(a,16/9),-2,360)'"
-crf 20 -preset medium -profile:v high -level 3.1 -maxrate 800k -bufsize 1200k
-acodec aac -ac 2 -ab 128k -f mp4 -movflags +faststart /home/www/video/output.mp4
danker | Ссылка на пост (Смотрели 23899) | 10.01.17 12:20 Ответить |
У меня не работает, работает только fmpeg -i INPUT -map 0:0 -map 0:N OUTPUT