如何使用 ffmpeg 和 H.265 预缩放帧
How to prescale a frame using ffmpeg and H.265
我想用 H.265 编码解码视频帧 (AV_CODEC_ID_HEVC
)
我使用以下代码:
AVCodec *hevcCodec = avcodec_find_decoder(AV_CODEC_ID_HEVC);
AVCodecContext *avctx = avcodec_alloc_context3(hevcCodec);
avcodec_open2(avctx, hevcCodec, 0);
AVFrame *frame = av_frame_alloc();
AVPacket pkt;
av_init_packet(&pkt);
pkt.data = myDataPtr;
pkt.size = myDataSize;
int got_frame = 0;
avcodec_send_packet(avctx, &pkt);
if (avcodec_receive_frame(avctx, frame) >=0 ) {
got_frame = 1;
...
}
这很好用,我得到了我的 YUV 帧并可以进一步处理它(比如转换为 RGB 或缩放等)
但是,我想以某种方式告诉 ffmpeg 库,在解码时缩放 AVFrame
(2 的幂的比例因子就足够了)。
我不想在转换为 RGB 或使用 swscale
或其他任何东西后缩放。我必须解码很多帧并且需要更小的分辨率。
是否可以给 AVCodecContext
一些缩放帧的提示?
(我尝试设置 avctx.width
和 avctx.height
,但这没有帮助)
不,解码和缩放不能组合成一个更快的步骤。您必须完全解码然后缩放。您可以使用 swscale
一步缩放并转换为 RGB
我想用 H.265 编码解码视频帧 (AV_CODEC_ID_HEVC
)
我使用以下代码:
AVCodec *hevcCodec = avcodec_find_decoder(AV_CODEC_ID_HEVC);
AVCodecContext *avctx = avcodec_alloc_context3(hevcCodec);
avcodec_open2(avctx, hevcCodec, 0);
AVFrame *frame = av_frame_alloc();
AVPacket pkt;
av_init_packet(&pkt);
pkt.data = myDataPtr;
pkt.size = myDataSize;
int got_frame = 0;
avcodec_send_packet(avctx, &pkt);
if (avcodec_receive_frame(avctx, frame) >=0 ) {
got_frame = 1;
...
}
这很好用,我得到了我的 YUV 帧并可以进一步处理它(比如转换为 RGB 或缩放等)
但是,我想以某种方式告诉 ffmpeg 库,在解码时缩放 AVFrame
(2 的幂的比例因子就足够了)。
我不想在转换为 RGB 或使用 swscale
或其他任何东西后缩放。我必须解码很多帧并且需要更小的分辨率。
是否可以给 AVCodecContext
一些缩放帧的提示?
(我尝试设置 avctx.width
和 avctx.height
,但这没有帮助)
不,解码和缩放不能组合成一个更快的步骤。您必须完全解码然后缩放。您可以使用 swscale