Как мне кодировать видеопоток 4K?

Я записываю несжатое видео 4K с моего Sony A7R II через устройство видеозахвата и использую ffmpeg для сохранения видео.

Моя проблема в том, что я не знаю, какой кодек использовать. Два варианта, которые я пробовал:

  • Без сжатия : занимает слишком много места, примерно 1 Гб каждые несколько секунд.
  • h264 : это очень быстро начинает пропускать кадры. Я пробовал libx264, nvencи qvxвсе они по существу заполняют буфер, а затем начинают пропускать кадры менее чем через минуту съемки.

Я делаю все это на ноутбуке, поэтому у меня мало возможностей для добавления аппаратного кодирования, особенно учитывая, что решения Intel и Nvidia — по крайней мере, на моей машине — явно недостаточны для 4K.

Мои требования заключаются в том, что кодек позволяет:

  • Около 4-5 часов отснятого материала надёжно умещаются на 500Gb SSD
  • Кодирование может происходить в реальном времени без потери кадров
  • Кодек удобен для постобработки

На всякий случай, мой ноутбук имеет i7-4710MQ и 32 ГБ ОЗУ.

Обновление : некоторые уточнения: я записываю со скоростью 30 кадров в секунду, мое устройство захвата — INOGENI, выборка — 4:2:0. И нет, я не хочу терять больше качества, чем должен. Если мне придется тратить 100 Гб/час на запись, я согласен.

Какие команды ffmpeg вы пробовали? Вы тоже записываете звук? Вы знаете, какую цветность сэмплирует камера? Я предполагаю, что вы запускаете HDMI от камеры к ноутбуку.
В дополнение к подвыборке цветности (4:2:0 или 4:2:2 или 4:4:4) укажите количество кадров в секунду.
Пожалуйста, также укажите свой приоритет между потерей качества или уменьшением емкости записи.
@RawBean добавил разъяснения
@Mulvya Я пробовал такие вещи, какffmpeg -f dshow -rtbufsize 2000M -video_size 3840x2160 -i video="2318-INOGENI 4K2USB3":audio="Digital Audio Interface (2318-INOGENI 4K2USB3)" -c:v nvenc -preset slow -loglevel info r:\4k.mp4
Несколько моментов: я предполагаю, что прямая запись на SD-карты неприемлема — камера сохраняет XAVC-S как поток со скоростью 100 Мбит/с на SD-картах, т.е. 5 часов в ~225 ГБ. Точнее, вы применили предустановку «медленно» — ffmpeg должен иметь возможность потреблять пакеты достаточно быстро. Используйте libx264с пресетом veryfastили ultrafastи профилем mainили baseline.
@Мульвия ха! прямая запись на SD невозможна из-за ужасного 30-минутного лимита. это просто убивает все сразу.
@Mulvya veryfast, кажется, работает, все, что медленнее, - нет .

Ответы (1)

Как уже упоминал @Mulvya, я думаю, что проблема в «медленной» предустановке.

Одним из вариантов является кодирование сжатого потока без потерь. Например, кодировщик x264 может сделать это с помощью «-preset ultrafast -qp 0». Это, вероятно, приведет к невыполнению вашего третьего требования (совместимость), но, поскольку это без потерь, вы можете позже перекодировать на дешевые вращающиеся диски. Вы также можете изучить возможность использования кодировщика без потерь huffyuv, который может лучше поддерживаться. В этом методе есть некоторые подводные камни, поэтому вам обязательно нужно протестировать рабочий процесс от начала до конца. В частности, см. этот вопрос: Использование h264 в режиме без потерь приводит к небольшим неожиданным результатам .

Если вы пойдете по этому пути, я бы также поэкспериментировал с отбрасыванием субдискретизации и кодированием в формате 4:4:4. Это может не сильно увеличить размер вашего файла и поможет вам, если вы планируете выполнять какую-либо постобработку.

Другой вариант, в зависимости от вашего бюджета, — покупка энкодера. Я люблю FFmpeg, но он предназначен для работы везде, а не для того, чтобы в полной мере использовать ваше оборудование. Mainconcept не слишком дорог и лучше сможет использовать тот процессор i7, на который вы уже раскошелились. (См ., например , https://software.intel.com/en-us/articles/using-the-intel-media-sdk-within-mainconcept-h264avc-encoder-for-intel-quick-sync-video .) Они также предложите кодировщик HEVC, который еще больше уменьшит размер вашего файла. Однако я не могу ручаться за качество, так как у меня есть опыт работы с Ateme. Но я считаю, что вы можете, по крайней мере, оценить его бесплатно.

x264 производит вывод без потерь. Я добавил ответ на вопрос, на который вы ссылались.