libavcodec - кодек не найден

Я пытаюсь запустить эту программу из документации ffmpeg. Он успешно скомпилирован. Но показывает "кодек не найден", когда я пытаюсь выполнить. Я использую приведенную ниже команду для компиляции.

gcc -o video_encode video_encode.c -lavutil -lavformat -lavcodec -lz -lm

Я использую следующую команду для запуска этого файла.

./video_encode videoplayback mpeg-4

Я использовал кодек mpeg4 вроде

./video_encode videoplayback mpeg4

Вы можете увидеть результат в изображении

нажмите здесь, чтобы увидеть результат

Но он показывает, что кодек "mpeg-4" и "mpeg4" не найден. Я использую различные доступные кодеки, все еще сталкивающиеся с той же самой проблемой. Я установил новые версии ffmpeg libavcodec и других связанных библиотек и Ubuntu 16.04 LTS.

Пожалуйста, помогите мне через это.

3 ответа

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

Что исправило проблему было добавить av_register_all() перед поиском кодека:

/* find the mpeg1video encoder */
codec = avcodec_find_encoder_by_name(codec_name);
// codec = avcodec_find_encoder(AV_CODEC_ID_H264);
if (!codec)
{
    fprintf(stderr, "Codec '%s' not found\n", codec_name);
    exit(1);
}
// rest of the program...

компилировать

Простое руководство:

sudo apt-get install build-essential pkg-config
wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
./configure
make -j4 examples
  • Это скомпилирует все примеры в дереве с использованием исходного кода из текущей ветки master git и может быть менее подвержено ошибкам, чем использование gcc,
  • compile а также make выполнение команд займет несколько минут.
  • Для получения дополнительной информации см. doc/examples/README,
  • Как упоминал Дуг, рассматриваемый пример называется encode_video.c,

имя кодировщика

Имя кодека - mpeg4 (без дефиса). Увидеть ffmpeg -encoders список имен кодировщиков, поддерживаемых вашей конкретной сборкой.

Вы строите "video_encode" в или из дерева? Если позже вам понадобится установить libavcodec-dev. Если раньше, то вам сначала нужно собрать исходный код ffmpeg. Исходя из того, что вы используете команду gcc, я бы догадался из дерева.

Обратите внимание, что это на самом деле называется encode_video.c в источнике ffmpeg (неважно.

Хорошо работает здесь при построении вне дерева для получения ожидаемой кодировки (т. Е. 1 сек.

Ex.

$ ./video_encode videotest.m4v mpeg4 Send frame 0 Send frame 1 Write packet 0 (size= 6467) Send frame 2 Write packet 2 (size= 3281) Send frame 3 Write packet 1 (size= 1874) Send frame 4 Write packet 4 (size= 3579) Send frame 5 Write packet 3 (size= 2069) Send frame 6 Write packet 6 (size= 4389) Send frame 7 Write packet 5 (size= 2204) Send frame 8 Write packet 8 (size= 3538) Send frame 9 Write packet 7 (size= 2348) Send frame 10 Write packet 10 (size=13024) Send frame 11 Write packet 9 (size= 2303) Send frame 12 Write packet 12 (size= 4718) Send frame 13 Write packet 11 (size= 2504) Send frame 14 Write packet 14 (size= 5082) Send frame 15 Write packet 13 (size= 1898) Send frame 16 Write packet 16 (size= 4186) Send frame 17 Write packet 15 (size= 1842) Send frame 18 Write packet 18 (size= 4676) Send frame 19 Write packet 17 (size= 1782) Send frame 20 Write packet 20 (size=12942) Send frame 21 Write packet 19 (size= 2237) Send frame 22 Write packet 22 (size= 5180) Send frame 23 Write packet 21 (size= 2312) Send frame 24 Write packet 24 (size= 4520) Write packet 23 (size= 2523)

`

Другие вопросы по тегам