zoukankan      html  css  js  c++  java
  • ffmpeg 如何转换 rgb 图片到 yuv420p?如何使用 C 语言实现 rgb24 如何转换 yuv420p ?

    // convert to nv21 
    ffmpeg -i test.png -s 800x480 -pix_fmt nv21 test.yuv
    // convert to i420
    ffmpeg -i test.png -s 800x480 -pix_fmt yuv420p yuv420p.yuv
    

    如何使用 C 语言实现 rgb24 如何转换 yuv420p ?

    void RGB24ToYUV420P(int width, int height, unsigned char rgb[], unsigned char yuv[]) {
    	//rgb size w*h*(1 + 1 + 1) => r = 1 g = 1 b = 1
    	//yuv size w*h*(1 + 1/4 + 1/4) => y = 1 u = 1/4 v = 1/4
    	// w*h*3/2
    	unsigned char *y_channel = &yuv[0];//1
    	unsigned char *u_channel = &yuv[0 + width * height];//1/4
    	unsigned char *v_channel = &yuv[0 + width * height + width * height * 1 / 4];//1/4
    
    	//memset(yuv, 0, width * height * (1 + 1 / 4 + 1 / 4));
    	unsigned char *rgb_channel = 0;
    	unsigned char r, g, b;
    	int y, u, v;
    	for (int h = 0; h < height; ++h) {
    		rgb_channel = &rgb[width * h * 3];
    		for (int w = 0; w < width; ++w) {
    			r = *(rgb_channel++);
    			g = *(rgb_channel++);
    			b = *(rgb_channel++);
    			y = ((66 * r + 129 * g + 25 * b + 128) >> 8) + 16;
    			u = ((-38 * r - 74 * g + 112 * b + 128) >> 8) + 128;
    			v = ((112 * r - 94 * g - 18 * b + 128) >> 8) + 128;
    
    			*(y_channel++) = y > 255 ? 255 : (y < 0 ? 0 : y);
    			if (h % 2 == 0 && w % 2 == 0) {
    				*(u_channel++) = u > 255 ? 255 : (u < 0 ? 0 : u);
    			} else {
    				if (w % 2 == 0) {
    					*(v_channel++) = v > 255 ? 255 : (v < 0 ? 0 : v);
    				}
    			}
    		}
    	}
    }
    
    	const int raw_width = 1920;
    	const int raw_height = 1080;
    	unsigned char raw_rgb24[raw_width*raw_height * 3];
    	unsigned char raw_yuv420p[raw_width*raw_height * 3 / 2];
    	RGB24ToYUV420P(raw_width, raw_height, raw_rgb24, raw_yuv420p);
    
    转载请注明出处并保持作品的完整性,谢谢
  • 相关阅读:
    理解java的接口和抽象类
    Yum 仓库配置
    Vsftp 服务配置
    SAMBA 服务配置
    DHCP 服务配置
    dd 命令的使用
    linux 账户控制
    CentOS 系统优化
    Page Cache与Page回写
    TCP拥塞控制
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/14463723.html
Copyright © 2011-2022 走看看