Как записать видео кодер с ffmpeg, который явно управляет положением ключевых кадров?

Я хочу записать кодер с ffmpeg, который может поместить iFrames (ключевые кадры) в положения, которые я хочу. Где может, я нашел учебные руководства или ссылочный материал для него?

P.S.
Действительно ли возможно сделать это с mencoder или каким-либо кодером с открытым исходным кодом. Я хочу закодировать файл H263. Я пишу под и для Linux.

16
задан Ciro Santilli 新疆改造中心法轮功六四事件 4 April 2016 в 21:11
поделиться

3 ответа

Вам нужно будет посмотреть документацию 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 кодируется не по порядку, и вы можете получить задержку в несколько кадров.

18
ответ дан 30 November 2019 в 21:19
поделиться

GStreamer имеет приличную документацию, имеет привязки для ряда языков (хотя родной API - C) и поддерживает любой видеоформат, для которого можно найти плагины, включая H.263 через gstreamer-ffmpeg.

3
ответ дан 30 November 2019 в 21:19
поделиться

Вам понадобится библиотека libavcodec, Для первого шага, я думаю, вы можете узнать о ее использовании в файле ffplay.c внутри исходного кода ffmpeg. Это многое вам скажет. Вы можете посмотреть мой проект о видео на rtstegvideo.sourceforge.net.

Надеюсь, это поможет.

1
ответ дан 30 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: