В настоящее время я пытаюсь реализовать алгоритм, который может быстро отбрасывать нежелательные кадры из видео MP4 при кодировании в другой MP4 (с использованием Media Foundation).
Часть кодирования кажется неплохой - "Source Reader плюс Sink Writer "удобный и быстрый подход. Вам просто нужно создать IMFSourceReader и IMFSinkWriter, установить исходный собственный тип мультимедиа на писателе, yada, yada, yada и просто loop: source. ReadSample (& sample) -> writer. WriteSample (& образец). Вызов WriteSample () может зависеть от того, "! 2 b отброшено".
Этот наивный подход бесполезен, если вы считаете, что считанные образцы будут «предсказанными кадрами», иначе говоря, P-кадрами в потоках, закодированных в H.264. Удаление любого предыдущего «кадра с внутренним кодированием» (I-кадра или ключевого кадра) перед этим приведет к искажению видео.
Итак, мой вопрос: можно ли (каким-то образом) ввести I-кадр в приемник записи перед возобновлением записи образца в приемнике записи?
Что-то делать с помощью MFSampleExtension_CleanPoint Атрибут>, похоже, не помогает. Я мог бы вручную создать IMFSample (через MFCreateSample), но получить его в правильном формате H.264 может быть непросто.
Любые идеи? Или мысли о других подходах к отбрасыванию кадров при кодировании?