Я пытаюсь записать короткое видео своего рабочего стола и загрузить его на 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.

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

1 ответ1

0

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

Я слышал, что когда система кодирования 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 видео 4x>: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)».

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