我正在努力奔跑这来自 ffmpeg c 文档的程序。它已成功编译。但当我尝试执行时显示“未找到编解码器”。我正在使用以下命令进行编译。
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。
请帮助我解决这个问题。
答案1
我想使用 H264 编解码器,但遇到了类似的问题。我确信我的机器上安装了编解码器,因为我能够使用 CLI 进行编码ffmpeg
而没有任何问题。
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...
答案2
编译
简单指南:
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
- 这将使用当前 git master 分支中的源代码编译树中的所有示例,并且比使用 更不容易出错
gcc
。 - 和
compile
命令make
将需要几分钟才能完成。 - 更多信息请参见
doc/examples/README
。 - 正如道格提到的,所讨论的例子名为
encode_video.c
。
编码器名称
编解码器名称是mpeg4(无连字符)。请参阅ffmpeg -encoders
您的特定版本支持的编码器名称列表。
答案3
您是在树内还是树外构建“video_encode”?如果是后者,则需要安装 libavcodec-dev。如果是前者,则首先需要构建 ffmpeg 源。根据您使用的 gcc 命令,我猜是在树外。
请注意,它实际上是encode_video.c
在 ffmpeg 源中命名的(无论什么。
在这里,在树外构建中工作正常,以产生预期的编码(即 1 秒)。
前任。
$ ./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)