Преобразуйте переменную частоту кадров ~ 60 FPS в постоянную 60 FPS без потерь

У меня есть кадры игрового процесса, записанные с помощью ShadowPlay («GeForce Experience») со скоростью 60 кадров в секунду, что, как я понимаю, приводит к переменной частоте кадров, потому что игра иногда пропускает кадры. Однако попытка использовать это видео в Adobe Premiere приводит к тому, что звук в игре сильно отстает от визуальных эффектов, потому что Premiere обрабатывает его так, как будто все кадры имеют одинаковую длину.

Я пробовал HandBrake со следующими настройками:

Качество: постоянное, RF 0 (без потерь)
FPS: 60, постоянное
Детелесин: Выкл
.
Расшифровка: Выкл . Шумоподавление: Выкл.
Деблокировка: Выкл.

Но выходное видео не только намного меньше исходного видео, но и намного хуже с точки зрения визуального качества. Почему это не без потерь, когда я установил его на то, что он утверждает, без потерь?

Входная информация о видео: http://pastebin.com/7Tss4brj
Выходная информация о видео: http://pastebin.com/DKFEzDKk (из Mediainfo)

Как я могу конвертировать видео с переменной частотой кадров в видео с постоянной частотой кадров без потерь?

Если у вас есть mediainfo , можете ли вы опубликовать показания для вашего вывода. Используйте режим Вид->Текст.
Надеюсь, это поможет: Введите информацию о видео: pastebin.com/7Tss4brj Выведите информацию о видео: pastebin.com/DKFEzDKk
Технически это не без потерь, так как RF записывается как 1, а не 0. Тем не менее, это не должно быть « значительно хуже с точки зрения визуального качества ». Как вы тестируете воспроизведение?
Воспроизведение в VLC или предварительный просмотр в Premiere. Он имеет огромные артефакты сжатия повсюду, особенно при быстром движении.
Хм, только что сравнил скриншоты из двух видео в VLC и вроде примерно одинаково. Предварительный просмотр в Premiere намного хуже. Позвольте мне исследовать. Это может быть проблема с Premiere. Тем не менее, почему это RF 1, когда я установил его как 0, и почему выходной файл намного меньше?
Ладно, сравнил другое видео в VLC, качество однозначно хуже. Ввод: imgur.com/AKYhyuC pastebin.com/4vwJi8Vj Вывод: imgur.com/m5TKr0L pastebin.com/49knbRiH
Попробуйте с ffmpeg .ffmpeg -i in.mp4 -r 60 -crf 0 -profile:v main -c:a copy out.mp4
Говорит: x264 [ошибка]: основной профиль не поддерживает без потерь [libx264 @ 00000000031c3280] Ошибка при настройке профиля main. Единственным профилем, который принимал без потерь, был high444, который создавал файл размером 43,2 ГБ из 7,17 ГБ, который, похоже, не воспроизводится в VLC или Premiere (появляются странные цвета). pastebin.com/MwtMPj8Q
Упс. Пропустить профиль, но добавить-pix_fmt yuv420p
Кажется, это сработало, но полученный файл настолько огромен, что ни VLC, ни Premiere не могут его правильно воспроизвести. (Крайне низкая частота кадров и артефакты в VLC, странные цвета в Premiere) Premiere вроде умеет экспортировать, но для редактирования бесполезен. :-( pastebin.com/7U60c0GU Можно ли копировать потоковые данные вместо копирования без потерь данных пикселей?

Ответы (2)

Для начала: ваша версия Handbrake устарела. Версия 1.0.3 вышла совсем недавно, в ней есть некоторые улучшения по сравнению с предыдущей версией.

Во-вторых, CQ0 на самом деле не «без потерь». Он нацелен на качество «без потерь», но столкнется с ограничениями скорости передачи данных уровня H.264 , поэтому, хотя для достижения сжатия «без потерь» может потребоваться, скажем, 100 Мбит/с, уровень 4.0 может быть ограничение на 20 Мбит/с или что-то в этом роде. Обратите внимание, что в показаниях настроек кодирования в файле экспорта указано «vbv_maxrate=20000», где ваш битрейт ограничен. Таким образом, чтобы максимально приблизиться к безубыточному режиму, вам понадобится что-то вроде уровня 5.2.

Таким образом, повышение уровня H.264 улучшит качество, но Premiere может в конечном итоге очень сильно его «пыхтить». H.264 очень плохо подходит для редактирования. Он очень сложен в вычислительном отношении, в основном потому, что он не хранит каждый кадр отдельно (так называемое внутрикадровое сжатие), а берет пакеты кадров (называемые группой изображений или GOP) и сжимает их вместе таким образом, что любой кадр внутри GOP будет зависеть от окружающих кадров, чтобы воспроизвести полное изображение. Это называется межкадровым сжатием, и количество кадров в GOP зависит от параметров, установленных во время кодирования, и может даже быть переменным (нетипичным), но вы можете увидеть, что это за параметры в MediaInfo, отметив строку, которая говорит «Формат настройки, GOP" ("N=30" означает 30 кадров на GOP), или посмотрите в настройках кодирования, где указано «keyint» (интервал ключевого кадра). Таким образом, необходимо декодировать все 30 кадров, чтобы показать вам любой кадр.очень интенсивное использование процессора и оперативной памяти.

Если у вас есть хранилище, я бы порекомендовал рассмотреть возможность использования DNxHD, который является «мезонинным» (удобным для редактирования) кодеком, который сохраняет качество, считается «практически без потерь», но имеет низкое влияние на ЦП / ОЗУ. Подвох в очень высоких битрейтах. Итак, мы говорим о 130–200 ГБ/ч при разрешении 1080p59,94. Другая загвоздка в том, что DNxHD имеет очень ограниченные поддерживаемые разрешения и частоту кадров . Существует также CineForm, который столь же высокого качества, но гораздо более гибкий, и CineForm, и DNxHD изначально поддерживаются Premiere (CineForm в 2015 году и позже), но в последний раз я проверял, что поддержка CineForm в других инструментах, таких как ffmpeg, отсутствует.

Таким образом, более удобным для редактирования решением было бы использование ffmpeg для создания DNxHD с помощью командной строки следующим образом:

ffmpeg -i (input file).mp4 -c:v dnxhd -b:v 290M -c:a pcm_s16le -r 60 (output).mxf

Это сделало бы DNxHD с несжатым звуком в файле MXF Op1a. Вы также можете ударить .mov в конце и так же легко создать файл Quicktime. Обратите внимание, что -r устанавливает выходную частоту кадров. Вы можете попробовать использовать H.264 в ffmpeg, изменив видеокодек (-c:v), но вы столкнетесь с теми же ограничениями, что и при работе с Handbrake, поэтому я не знаю, стоит ли это делать. в это здесь.

CQ0 на самом деле без потерь. Если вы сравните SSIM с источником, результат метрики будет 1,0, т. е. идеальная точность. Уровни H.264 предназначены для аппаратных декодеров, поэтому они могут изящно отказываться от декодирования потока, превышающего их возможности, вместо воспроизведения прерывистого воспроизведения. Но они не ограничивают x264. Он будет жаловаться, если ваше разрешение/битрейт превысит явно установленный уровень, но, тем не менее, продолжит.
Чтобы уменьшить нагрузку на декодирование, вы всегда можете установить небольшой размер GOP и отключить B-кадры. Я не использую Handbrake, но это легко сделать с помощью ffmpeg. DNxHD будет использовать больше пропускной способности, чем необходимо.
Я не уверен, что h264 cq0 без потерь с точки зрения битовой глубины ... я имею в виду ... если вы переходите с 8 бит на 8 бит, все в порядке ... если с 10 или 12 на 8 у вас будут потери, если только не 16-битная версия из h264 crf 0 доступен .. @Mulvya существует ли 16-битная опция на компонент + альфа-канал?
Альфа недоступна, а x264 поддерживает только 8 и 10 бит.

Я записываю свой контент Shadowplay со следующими настройками:

  • 1440p
  • 50 МБ/с
  • 60 кадров в секунду
  • Микрофон и настольное аудио на разных каналах

Так что он не совместим с упомянутым DNxHD. Аудиоканалы также имеют переменную частоту кадров и должны быть синхронизированы.

Следующее будет перекодировать видео и аудио в 60 FPS CFR и не будет иметь проблем с синхронизацией звука в Adobe Premier. Вы сохраняете его в пакетный файл (.bat), а затем запускаете его через командную строку с видеофайлом в качестве первого аргумента.

@echo off
set inputFile=%1
set outputFile=%inputFile:.mp4=_cbr.mp4%
ffmpeg  ^
-i %inputFile% ^
-vsync 1 -async 1 ^
-map 0:v:0 ^
    -c:v libx264 ^
    -preset veryfast ^
    -x264-params "nal-hrd=cbr" ^
    -b:v 50M ^
    -framerate 60 ^
-map 0:a:0 ^
    -c:a:0 aac ^
    -b:a 384k ^
-map 0:a:1  ^
    -c:a:1 aac ^
    -b:a 384k ^
%outputFile%

При сравнении отдельных кадров я не заметил разницы в качестве между этой и исходной записью. Вы можете изменить некоторые параметры, такие как частота кадров, чтобы они соответствовали вашему контенту, или увеличить битрейт, если вы считаете, что есть некоторые потери.