Заставить x264 кодировать все кадры относительно первого кадра (IDR)

Я хочу сгенерировать поток h.264, в котором P-кадры используют ссылки исключительно с использованием долговременной ссылки на первый кадр (кадр IDR). Это также потребует, чтобы первый кадр был кадром IDR.

Это академический эксперимент для понимания поведения кодирования долговременных ссылок и последствий принуждения фреймов ссылаться на конкретный (один) фрейм, а не на несколько.

Было бы здорово, если бы я мог сделать это из командной строки, но если это невозможно, я открыт для модификации x264 для этой цели.

Может ли кто-нибудь указать мне, где в исходном коде это определяется:

  • опорный кадр/макроблок/раздел для текущего макроблока
  • изменения, внесенные в список краткосрочных и долгосрочных систем отсчета
  • следует ли использовать краткосрочную систему отсчета или долгосрочную систему отсчета.

Использование другого кодировщика, такого как nvenc, также допустимо.


person cloudraven    schedule 12.12.2019    source источник


Ответы (1)


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

person szatmary    schedule 12.12.2019
comment
Вот так. Спасибо. Оказывается, NVEnc также поддерживает это. Быстро и просто. Спасибо - person cloudraven; 01.01.2020
comment
@cloudraven Удалось ли вам заставить NVENC правильно работать с инвалидацией опорного кадра? Я задал вопрос, связанный с этим, потому что он, похоже, не работает для этого варианта использования: forums.developer.nvidia.com/t/using-invalidatereferenceframes/ - person theicfire; 03.04.2020
comment
@theicfire да, у меня это сработало отлично. Тем не менее, я использовал его, чтобы заставить кадры ссылаться на определенный кадр, а не для того, чтобы кодировщик забыл о конкретном кадре, как в вашем случае. - person cloudraven; 05.04.2020
comment
@cloudraven Думаю, что-то подобное было бы вполне достаточно. Как вы принудительно возвращаете ссылку на конкретный кадр, не имея возможности заставить кодировщик забыть о конкретном кадре? - person theicfire; 06.04.2020