FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
来源:互联网 发布:淘宝店主阿希哥微博 编辑:程序博客网 时间:2024/05/18 00:16
FFMPEG中的swscale提供了视频原始数据(YUV420,YUV422,YUV444,RGB24...)之间的转换,分辨率变换等操作,使用起来十分方便,在这里记录一下它的用法。
swscale主要用于在2个AVFrame之间进行转换。
下面来看一个视频解码的简单例子,这个程序完成了对"北京移动开发者大会茶歇视频2.flv"(其实就是优酷上的一个普通视频)的解码工作,并将解码后的数据保存为原始数据文件(例如YUV420,YUV422,RGB24等等)。其中略去了很多的代码。
解码H264
- int i; //YUV420
- for(i=0;i<576;i++)
- {//fwrite(buf + i * wrap, 1, xsize, f);
- memcpy(overlay->pixels[0]+i*1280, pFrame_->data[0]+i*pFrame_->linesize[0], 720);
- }
- for(i=0;i<288;i++)
- {
- memcpy(overlay->pixels[2]+i*640, pFrame_->data[1]+i*pFrame_->linesize[1], 360);
- memcpy(overlay->pixels[1]+i*640, pFrame_->data[2]+i*pFrame_->linesize[2], 360);
- }
- int k=0,y,x; //yuv420 -> yuv422
- for( y=0;y<576;y++)
- {
- for( x=0;x<720;x++)
- {
- yuv422[k++] = pFrame_->data[0][y*pFrame_->linesize[0]+x];
- yuv422[k++] = x%2==0?pFrame_->data[1][(y/2)*pFrame_->linesize[1]+x/2]:pFrame_->data[2][(y/2)*pFrame_->linesize[2]+x/2];
- }
- }
- memcpy(overlay->pixels[0],yuv422, codec_->width*codec_->height*2);
- int numBytes = avpicture_get_size(AV_PIX_FMT_YUYV422, codec_->width,
- codec_->height);
- uint8_t* yuv422 = (uint8_t *)av_malloc(numBytes*sizeof(uint8_t));
- avpicture_fill((AVPicture *)pFrameYUV, yuv422, AV_PIX_FMT_YUYV422,
- codec_->width, codec_->height);
- //while
- img_convert_ctx = sws_getContext(codec_->width, codec_->height, codec_->pix_fmt, codec_->width, codec_->height, AV_PIX_FMT_YUYV422, 2, NULL, NULL, NULL);
- sws_scale(img_convert_ctx, (const uint8_t* const*) pFrame_->data, pFrame_->linesize, 0, codec_->height, pFrameYUV->data,pFrameYUV->linesize);
- memcpy(overlay->pixels[0],yuv422, codec_->width*codec_->height*2);
阅读全文
0 0
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)——读完清晰明了
- ffmpeg命令行实现YUV和RGB之间格式的转换
- ffmpeg转换和显示yuv,rgb等原始图像数据
- 各种格式的yuv ,RGB转换
- RGB与YUV图像视频格式的相互转换(转)
- YUV与RGB之间的转换
- glsl rgb yuv 之间的转换
- YUV和RGB之间的转换公式
- RGB与YUV之间的转换
- jquery 的一些使用方法
- 分治法的小感悟
- 小工具
- [AHOI2009]维护序列
- 文本框点击回车内容添加值ul列表
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- <fieldset> 标签将表单内容的一部分打包,生成一组相关表单的字段。
- kafka分布式的数据流平台
- 微软 dotnet.core 文档中文链接
- 从Java视角理解系统结构(二)CPU缓存
- 塔防篇: Day4
- 每日一练5
- HBuilder使用心得(一)
- java 如何获取程序运行时的相对路径