Я хочу записать кодер с ffmpeg, который может поместить iFrames (ключевые кадры) в положения, которые я хочу. Где может, я нашел учебные руководства или ссылочный материал для него?
P.S.
Действительно ли возможно сделать это с mencoder или каким-либо кодером с открытым исходным кодом. Я хочу закодировать файл H263. Я пишу под и для Linux.
Вам нужно будет посмотреть документацию libavcodec - в частности, avcodec_encode_video (). Я обнаружил, что лучшая доступная документация находится в файлах заголовков ffmpeg и образце исходного кода API, который предоставляется с источником ffmpeg. В частности, посмотрите libavcodec / api-example.c или даже ffmpeg.c.
Чтобы принудительно создать I-кадр, вам нужно установить для члена pict_type изображения, которое вы кодируете, значение 1: 1 - это I-кадр, 2 - это P-кадр, и я не помню, какой код для кадр B с моей головы ... Кроме того, член key_frame должен быть установлен в 1.
Некоторые вводные материалы доступны здесь и здесь , но я не знаю, насколько это хорошо.
Вам нужно быть осторожным при выделении объектов фрейма, которые требуются для вызовов API. На мой взгляд, api-example.c - ваш лучший выбор. Ищите функцию video_encode_example () - она краткая и иллюстрирует все важные вещи, о которых вам нужно беспокоиться - обратите особое внимание на второй вызов avcodec_encode_video (), который передает аргумент изображения NULL - он требуется для получения последних кадров видео, поскольку Видео MPEG кодируется не по порядку, и вы можете получить задержку в несколько кадров.
GStreamer имеет приличную документацию, имеет привязки для ряда языков (хотя родной API - C) и поддерживает любой видеоформат, для которого можно найти плагины, включая H.263 через gstreamer-ffmpeg.
Вам понадобится библиотека libavcodec, Для первого шага, я думаю, вы можете узнать о ее использовании в файле ffplay.c внутри исходного кода ffmpeg. Это многое вам скажет. Вы можете посмотреть мой проект о видео на rtstegvideo.sourceforge.net.
Надеюсь, это поможет.