Захват без потерь с FFmpeg

Я пытался сделать захват игры без потерь, так как работал над программой для анализа частоты кадров. Мне не очень повезло найти программу, которая делает захват без потерь, так как AmaRecTV, Dxtory и Virtualdub кажутся заброшенными. Я пытаюсь использовать FFmpeg и придумал следующую команду:

ffmpeg -y -f dshow -rtbufsize 500M -i video="Game Capture 4K60 Pro Video 01" -framerate 60 -vsync 0 -c:v libx264 -preset ultrafast -crf 0 -pix_fmt yuv420p "e:\Captures\out.mkv"

К сожалению, размер файла не кажется достаточно большим, чтобы быть без потерь. Например, согласно MediaInfo, я получил общую скорость передачи данных 132 Мбит/с (16,5 МБ/с) для захвата 720p 60 кадров в секунду. Тем не менее, я почти уверен, что файл без потерь 720p, 60 кадров в секунду, 4:2:0 должен быть ближе к 640 Мбит/с (80 МБ/с).

Я использую Windows 10 1809 x64, ночную сборку FFmpeg x64 новее 4.0.2, Nvidia 399.24 и Elgato 4K60 Pro.

Производит ли эта команда захват без потерь? И как я могу улучшить его?

Ответы (2)

libx264 — очень эффективный кодировщик, так что битрейт не является чем-то необычным. На самом деле, это на более высоком уровне, но, поскольку вы снимаете игру, я ожидаю, что будет задействовано постоянное движение, а ваша предустановка сверхбыстрая, что отключает некоторые агрессивные методы сжатия.

Когда вы говорите 80MB/s, я полагаю, вы имеете в виду несжатый полный растр, т.е. 1280 x 720 x 12 бит/пиксель x 60 кадров в секунду. Lossless не означает несжатый, так же как может быть сжатый ZIP бинарной программы.


Кстати, -framerate 60идет раньше -i video="Game Capture 4K60 Pro Video 01", так как это вариант ввода.

Хотя кодек x264 довольно эффективен, если вы хотите убедиться, что x264 не выполняет такое сильное сжатие при большом количестве движения, вы можете использовать параметр квантования -qp 0. Много информации по следующим ссылкам:

Ключевая часть статьи такова:

Если бы у вас были только простые способы сравнения качества видеопоследовательностей (например, на основе покадрового измерения отношения сигнал/шум, PSNR), вы могли бы посмотреть на кодирование CRF и сказать, что оно было более низкого качества, чем CQP. вариант. Но если вы человек, субъективно копия CRF будет выглядеть равной или лучше версии CQP.

Тем не менее, пользователь по приведенной выше ссылке stackoverflow, похоже, считает, что это -qp 0лучше для записи экрана игры. Это потенциально лучше подходит, если вы проводите анализ частоты кадров (т. е. сжатие может быть незаметным для вас, но не для вашего анализатора частоты кадров).

Это приведет к увеличению ожидаемого размера файла.