gpt4 book ai didi

c++ - 使用 x264 编码的 FFMPEG

转载 作者:太空宇宙 更新时间:2023-11-04 11:59:44 26 4
gpt4 key购买 nike

我正在尝试使用 ffmpeg + x264 将视频从一组 jpeg 图像编码为 h264。我以这种方式初始化 AVCodecContext:

_outputCodec = avcodec_find_encoder(AV_CODEC_ID_H264);
_outputCodecContext = avcodec_alloc_context3(_outputCodec);
avcodec_get_context_defaults3(_outputCodecContext, _outputCodec);
_outputCodecContext->width = _currentWidth;
_outputCodecContext->height = _currentHeight;
_outputCodecContext->pix_fmt = AV_PIX_FMT_YUV420P;
_outputCodecContext->time_base.num = 1;
_outputCodecContext->time_base.den = 25;
_outputCodecContext->profile =FF_PROFILE_H264_BASELINE;
_outputCodecContext->level = 50;

avcodec_open 没有返回任何错误,一切正常,但是当我调用 avcodec_encode_video2() 时,我收到这样的消息(我认为它来自 x264):

using mv_range_thread = %d

%s

profile %s, level %s

然后应用程序崩溃。当使用 x264 &&

时,我的编解码器上下文有更多必要的设置

最佳答案

如果没有完整版本的代码,很难看出实际问题是什么。

首先,这是一个将 RGB 帧编码为 H264 视频的 FFMPEG 库的工作示例:

http://www.imc-store.com.au/Articles.asp?ID=276

您可以通过使用 CImage 加载 JPG 并将 RGB 数据传递给 FFMPEG 类以编码为 H264 视频来扩展此示例。

关于你的例子的一些想法:

  • 你有没有像下面这样调用 register all?

    avcodec_register_all();
    av_register_all();
  • 另外,我会将您的代码重写为如下所示:

    AVStream *st;
    m_video_codec = avcodec_find_encoder(AV_CODEC_ID_H264);
    st = avformat_new_stream(_outputCodec, m_video_codec);
    _outputCodecContext = st->codec;
    _outputCodecContext->codec_id = m_fmt->video_codec;
    _outputCodecContext->bit_rate = m_AVIMOV_BPS; //Bits Per Second
    _outputCodecContext->width = m_AVIMOV_WIDTH; //Note Resolution must be a multiple of 2!!
    _outputCodecContext->height = m_AVIMOV_HEIGHT; //Note Resolution must be a multiple of 2!!
    _outputCodecContext->time_base.den = m_AVIMOV_FPS; //Frames per second
    _outputCodecContext->time_base.num = 1;
    _outputCodecContext->gop_size = m_AVIMOV_GOB; // Intra frames per x P frames
    _outputCodecContext->pix_fmt = AV_PIX_FMT_YUV420P;//Do not change this, H264 needs YUV format not RGB
  • 然后你需要像 pogorskiy 说的那样使用 swscale 将 RGB JPG 图片转换为 YUV 格式。

查看链接示例,我在 VC++2010 上对其进行了测试,它运行良好,您可以向其发送 RGB 字符数组。

关于c++ - 使用 x264 编码的 FFMPEG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com