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)