首页 > 解决方案 > ffmpeg lib报错指定样本格式-1无效或不支持

问题描述

这是我的ffmpeg项目的编译步骤。

$ configure --disable-static \
 --enable-shared \
 --enable-libmp3lame \
 --prefix=/home/aszswaz/Project/opensouce/ffmpeg-lib
$ make
$ make install

这是生成的 lib 库。

$ ls include
libavcodec  libavdevice  libavfilter  libavformat  libavutil  libswresample  libswscale
$ ls lib
libavcodec.so           libavdevice.so           libavfilter.so          libavformat.so           libavutil.so           libswresample.so          libswscale.so          pkgconfig
libavcodec.so.59        libavdevice.so.59        libavfilter.so.8        libavformat.so.59        libavutil.so.57        libswresample.so.4        libswscale.so.6
libavcodec.so.59.1.100  libavdevice.so.59.0.100  libavfilter.so.8.0.101  libavformat.so.59.2.101  libavutil.so.57.0.100  libswresample.so.4.0.100  libswscale.so.6.0.100

我想实现将pcm文件转换为mp3文件的功能,但是打开AVCodecContext时出现错误。

    AVCodecContext *avCodecContext = avcodec_alloc_context3(avCodec);
    if (!avCodecContext) {
        fprintf(stderr, "Failed to create encoder context!\n");
        return -1;
    }
    avCodecContext->bit_rate = 64000;
    avCodecContext->channels = CHANNEL;
    avCodecContext->channel_layout = AV_CH_LAYOUT_STEREO;
    avCodecContext->sample_rate = OSR;
    avCodecContext->sample_fmt = AV_SAMPLE_FMT_S16P;
    avCodecContext->time_base = av_get_time_base_q();

    result = avcodec_open2(avCodecContext, avCodec, NULL);
    if (result < 0) {
        fprintf(stderr, "avcodec_open2:%s\n", av_err2str(result));
        return result;
    }

它输出这样的错误。

pcm_file: /home/aszswaz/Musics/demo.pcm, mp3_file: /home/aszswaz/Musics/demo.mp3
Initialize the mp3 encoder...
[libmp3lame @ 0x5590851ba880] Specified sample format -1 is invalid or not supported
avcodec_open2:Invalid argument

如何解决?

标签: cffmpeg

解决方案


推荐阅读