gpt4 book ai didi

ffmpeg速度编码问题

转载 作者:行者123 更新时间:2023-12-04 23:01:01 25 4
gpt4 key购买 nike

我目前正在开发一个应用程序,该应用程序使用 Qt Designer 工具和 C++ 下的 V4L2 和 ffmpeg 库在 Linux 上从网络摄像头捕获视频,使用 lib V4L2 捕获图像没有问题,并且由于图片已准备好我将其发送到基于 ffmpeg 库的编码器,最初编码器创建一个视频文件,并接收图像以将其编码到该文件中,我的问题如下:编码正常完成,但如果我开始播放录制的视频文件,速度似乎比常规速度更快!所以很清楚,问题在于视频编码,
我的问题是,是否有管理 ffmpeg 编码速度图片的方法或功能????
感谢您的帮助。

最佳答案

使用 FFMpeg 创建自定义编码视频时,您实际上需要在写入输出文件的每个 AVPacket 上设置 PTS。设置 AVCodecContext 的 time_base 只会告诉容器会发生什么。 PTS(演示时间戳)告诉解码器(当您查看视频时)何时实际显示该特定帧。

例如:

我有一个从 FFMpeg 的 V4L2 部分获得的 AVFrame。首先,使用 av_picture_copy 复制此图像更安全。 (因此编码器不会查看 AVFrame 结构中的所有额外信息。)

av_picture_copy( (AVPicture*) picture, (AVPicture*) pFrame, c->pix_fmt, c->width, c->height );

picture->pts = numFrames;

现在根据编码帧数设置 pts
pDestFrame->pts = numFrames;

现在编码
numEncodedBytes = avcodec_encode_video( AVCodecCtx, buffer, bufferSize, pDestFrame );

现在创建一个 AVPacket 并在重新缩放后再次设置时间戳
AVPacket pkt;
av_init_packet(&pkt);

pkt.pts = av_rescale_q( c->coded_frame->pts, c->time_base, mpVideoStr->time_base );

if ( c->coded_frame->key_frame ) pkt.flags |= AV_PKT_FLAG_KEY;

pkt.stream_index = mpVideoStr->index;
pkt.data = outbuf;
pkt.size = out_size;

最后,您可以将数据包写出来
av_write_frame( formatCtx, &pkt );

我知道这适用于 H264 视频编码,但我不能 100% 确定它适用于其他类型的视频,因为我在写这篇文章时只关心 H264。

关于ffmpeg速度编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5858333/

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