Настройки ffmpeg для высококачественного видео на YouTube

2148
pb.

Я пытаюсь записать короткое видео своего рабочего стола и загрузить его на YouTube. Проблема в том, что каждый раз, когда я загружаю его на YouTube или даже в Dropbox (как видео), качество намного хуже.

Мое выполнение ffmpeg:

ffmpeg -f x11grab -s 1366x768 -r 30 -i :0.0 -codec:v libx264 -crf 10 -bf 20 -flags +cgop -pix_fmt yuv440p -movflags faststart help.mp4 

основанный на:

ffmpeg -i <input file> -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart <output_name>.mp4 

который я нашел здесь

Исходный файл (.zip): https://www.dropbox.com/s/xlkr83rkqfxon23/help.mp4.zip?dl=0

Файл после загрузки на YouTube: https://www.youtube.com/watch?v=ewEUgpXOpmg

Как видите, я теряю качество после загрузки на YouTube.

Не могли бы вы помочь мне?
Как выбрать подходящие параметры для записи и загрузки видео высокого качества?

0
В вашем видео более чем достаточно битов для высококачественного видео, но YouTube перекодирует все, что вы ему дадите. Вы ничего не можете сделать. LordNeckbeard 6 лет назад 0

1 ответ на вопрос

0
i336_

Попробуйте взять записанное видео и увеличить его.

Я слышал, что когда система кодирования YT видит видео сверхвысокого разрешения, оно обрабатывает его по-разному и усерднее работает, чтобы сделать версии с более низким разрешением более высоким качеством, чем вход 1080p / etc. Я никогда не исследовал это сам, YMMV, но оно того стоит.

Единственная проблема заключается в том, что апскейлинг - это процесс с потерями; Масштабирование безупречного пикселя выглядит ужасно (см. ниже). Если система кодирования YT не является удивительной, я полностью ожидаю, что сглаживание потребуется для того, чтобы видео по-прежнему выглядело хорошо, когда просматриваются (перекодированные, уменьшенные) версии 1080p / 720p.

Таким образом, речь идет о достижении баланса между процессами высокоуровневого и нисходящего масштабов, обеспечивающими как можно меньшую степень размытия / потерь. Как правило, это проблема проб и ошибок, которая потребует ввода реального текста (в зависимости от того, что вы будете показывать на экране; например, большая часть текста).

(Кроме того, я понятия не имею, можете ли вы удалять / скрывать / и т.д. определенные разрешения видео при загрузке видео в YT, но в этом случае вы почти наверняка скрываете загруженную версию 2K / 4K.)

Я немного поиграл с ffmpeg; две части информации, которые оказались наиболее полезными, были страница с инструкциями по масштабированию и документация по масштабированию .

Вот что я придумал:

ffmpeg -i help.mp4 -c:v libx264 -preset ultrafast -vf scale=iw*4:-1:flags=neighbor+bitexact+accurate_rnd+full_chroma_int+full_chroma_inp+print_info -y help4x.mp4

  • -c:v libx264 -preset ultrafastускоряет кодирование, но использует много диска (в данном случае 6,6 МБ по сравнению с 1,7 МБ). Похоже, что для масштабирования потребовалось 1 ГБ ОЗУ и весь мой ЦП независимо от настроек кодирования, поэтому, если у вас пропускная способность выше, чем время, вы можете предпочесть ускорение. Кодер H264 имеет другие настройки скорости / производительности, см. Https://trac.ffmpeg.org/wiki/Encode/H.264.

  • -vf scale=iw*4:-1масштабирует видео в 4 раза>: D - iw= ширина ввода, *4(умножить на 4) говорит само за себя, -1= "вычислить ширину с высоты и сохранить соотношение сторон".

  • flags=:

    • Я выбрал neighborздесь, чтобы показать вам, который не выполняет размытие / сглаживание, то есть идеальное удвоение / утроение пикселей и т. Д., И чтобы вы знали, что на самом деле он выглядит на удивление плохо, уменьшенный (я не не ожидаю этого). experimentalвыглядел хорошо, не уверен, что это было лучше, чем по умолчанию bicubic. Я настоятельно рекомендую пролистать https://ffmpeg.org/ffmpeg-scaler.html, собрать короткое тестовое видео, которое демонстрирует, что вы действительно хотите записать, и попробовать все кодировщики (возможно, даже загрузить все тестовые видео). Какую бы работу вы здесь ни делали, мне любопытно, какие результаты вы получите!

    • Я нашел accurate_rnd+full_chroma_int+full_chroma_inp+print_infoна https://superuser.com/questions/782133/ffmpeg-upscaling-video и бросил их. Я понятия не имею, что они делают / если они помогают. : D

    • bitexactзвучит прекрасно. Я понятия не имею, что это также делает.

    • print_info Показывает, какой масштабер вы используете только в разделе «Нажмите [q], чтобы остановить».

-y позволяет перезаписывать . В противном случае ffmpeg каждый раз выдает вам «overwrite (y / n)».

Похожие вопросы