Конвертация видео с помощью ffmpegДанный материал прислан пользователем, мы не проверяли его достоверность и просим извинить за возможные неточности В этой статье вы узнаете, как правильно конвертировать видео для сайта с помощью ffmpeg аналогично Youtube и Vimeo. Все примеры будут показаны для конечного видеофайла, размеры которого 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 (высота). -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. -acodec aac Аудиодорожку делаем стерео -ac 2 Битрейт аудио -ab 128k Формат конечного файла будет mp4 -f mp4 Обязательный параметр для воспроизведения видео на сайте. -movflags +faststart Последнее что нужно указать, куда сохранится сконвертированный видеофайл. Укажите свой путь. /home/www/video/output.mp4 Примеры размеров и битрейтов видео: -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 |