У меня есть кадры игрового процесса, записанные с помощью ShadowPlay («GeForce Experience») со скоростью 60 кадров в секунду, что, как я понимаю, приводит к переменной частоте кадров, потому что игра иногда пропускает кадры. Однако попытка использовать это видео в Adobe Premiere приводит к тому, что звук в игре сильно отстает от визуальных эффектов, потому что Premiere обрабатывает его так, как будто все кадры имеют одинаковую длину.
Я пробовал HandBrake со следующими настройками:
Качество: постоянное, RF 0 (без потерь)
FPS: 60, постоянное
Детелесин: Выкл
.
Расшифровка: Выкл . Шумоподавление: Выкл.
Деблокировка: Выкл.
Но выходное видео не только намного меньше исходного видео, но и намного хуже с точки зрения визуального качества. Почему это не без потерь, когда я установил его на то, что он утверждает, без потерь?
Входная информация о видео: http://pastebin.com/7Tss4brj
Выходная информация о видео: http://pastebin.com/DKFEzDKk (из Mediainfo)
Как я могу конвертировать видео с переменной частотой кадров в видео с постоянной частотой кадров без потерь?
Для начала: ваша версия 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, поэтому я не знаю, стоит ли это делать. в это здесь.
Я записываю свой контент Shadowplay со следующими настройками:
Так что он не совместим с упомянутым 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%
При сравнении отдельных кадров я не заметил разницы в качестве между этой и исходной записью. Вы можете изменить некоторые параметры, такие как частота кадров, чтобы они соответствовали вашему контенту, или увеличить битрейт, если вы считаете, что есть некоторые потери.
Гьян
Зденек Громница
Гьян
Зденек Громница
Зденек Громница
Зденек Громница
Гьян
ffmpeg -i in.mp4 -r 60 -crf 0 -profile:v main -c:a copy out.mp4
Зденек Громница
Гьян
-pix_fmt yuv420p
Зденек Громница