青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

使用libx264將I420編碼為H.264

轉(zhuǎn)載自:http://www.cnblogs.com/fojian/archive/2012/09/01/2666627.html

libx264 

libx264是一個(gè)自由的H.264編碼庫,是x264項(xiàng)目的一部分,使用廣泛,ffmpeg的H.264實(shí)現(xiàn)就是用的libx264。

代碼

要把一個(gè)I420視頻文件編碼為H264格式。I420是YUV中planar格式的一種,一張I420圖片中有三個(gè)plane,分別存放整張圖片的Y、U、V分量;采樣比例為4:2:0,12bpp,Y:U:V的分量長(zhǎng)度是4:1:1。

頭文件

1 #include <stdint.h>
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <fcntl.h>
5 #include <unistd.h>
6 #include <x264.h>

變量聲明和參數(shù)

復(fù)制代碼
 1 int width = 480;
 2 int height = 360;
 3 int fps = 25;
 4 size_t yuv_size = width * height * 3 / 2;
 5 x264_t *encoder;
 6 x264_picture_t pic_in, pic_out;
 7 int inf, outf;
 8 uint8_t *yuv_buffer;
 9
10 if (argc != 3) {
11     printf("usage: %s input output\n", argv[0]);
12 }
復(fù)制代碼
  • 視頻尺寸是480×360,YUV I420格式,每個(gè)像素1.5個(gè)字節(jié),所以一張YUV圖片大小是width * height * 1.5
  • encoder就是編碼器,x264_t格式在x264.h文件中只有

    typedef struct x264_t x264_t
        

    編碼器類型只需要也只能聲明為x264_t的指針類型

  • 每次編碼時(shí),YUV圖片的信息都保存在pic_in中
  • 輸入輸出的文件描述符
  • 從文件讀入的YUV的緩沖區(qū)

初始化encoder

復(fù)制代碼
 1 x264_param_t param;
 2 x264_param_default_preset(&param, "veryfast", "zerolatency");
 3 param.i_threads = 1;
 4 param.i_width = width;
 5 param.i_height = height;
 6 param.i_fps_num = fps;
 7 param.i_fps_den = 1;
 8
 9 param.i_keyint_max = 25;
10 param.b_intra_refresh = 1;
11
12 param.b_annexb = 1;
13
14 x264_param_apply_profile(&param, "baseline");
15 encoder = x264_encoder_open(&param);
復(fù)制代碼

初始化pic_in

復(fù)制代碼
1 x264_picture_alloc(&pic_in, X264_CSP_I420, width, height);
2
3 yuv_buffer = malloc(yuv_size);
4
5 pic_in.img.plane[0] = yuv_buffer;
6 pic_in.img.plane[1] = pic_in.img.plane[0] + width * height;
7 pic_in.img.plane[2] = pic_in.img.plane[1] + width * height / 4;
復(fù)制代碼
  • pic_in.img中保存YUV圖片各分量的信息

    typedef struct {
        int i_csp;
        int i_plane;
        int i_stride[4];
        uint8_t *plane[4];
        } x264_image_t;

    其中icsp, iplane, istride的值在picin初始化的時(shí)候已經(jīng)被賦值,代碼中只需要將plane數(shù)組指向正確的位置

  • 程序中每一幀的圖片都是讀取到y(tǒng)uv_buffer中,所以在這里設(shè)置一次就行了

初始化文件描述符

復(fù)制代碼
1 inf = open(argv[1], O_RDONLY);
2 if (inf < 0) {
3     return -1;
4 }
5 outf = open(argv[2], O_CREAT | O_WRONLY, 444);
6 if (outf < 0) {
7     return -1;
8 }
復(fù)制代碼

編碼

復(fù)制代碼
 1 int64_t i_pts = 0;
 2
 3 x264_nal_t *nals;
 4 int nnal;
 5 while (read(inf, yuv_buffer, yuv_size) > 0) {
 6     pic_in.i_pts = i_pts++;
 7     x264_encoder_encode(encoder, &nals, &nnal, &pic_in, &pic_out);
 8     x264_nal_t *nal;
 9     for (nal = nals; nal < nals + nnal; nal++) {
10         write(outf, nal->p_payload, nal->i_payload);
11     }
12 }
復(fù)制代碼
  • 關(guān)于ffmpeg的pts,網(wǎng)上有好多種公式,其實(shí)只要步長(zhǎng)為1遞增就行了
  • H.264的NAL層是為了適應(yīng)網(wǎng)絡(luò)傳輸?shù)男枰?,將大的編碼后的幀分成多個(gè)塊
  • p_payload就是編碼后的H.264的幀數(shù)據(jù),寫入輸出文件

掃尾

1 x264_encoder_close(encoder);
2 close(inf);
3 close(outf);
4 free(yuv_buffer);
5 return 0;

編譯

gcc sourcefile -lx264 -Wall -o execfile

 

這里有一段I420視頻可供測(cè)試。

參考

  1. How does one encode a series of images into H264 using the x264 C API? - Stack Overflow
  2. YUV RGB 常見視頻格式解析 - 一指流砂 - 博客園

posted on 2013-01-11 11:30 楊粼波 閱讀(4252) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线影院在线视频| 国产精品成人aaaaa网站| 欧美一区2区三区4区公司二百| 国产精品亚洲а∨天堂免在线| 欧美99在线视频观看| 久久亚洲精品一区二区| 亚洲综合视频一区| 亚洲一区二区三区色| 亚洲免费人成在线视频观看| 一区二区三区国产精品| 亚洲精品欧美专区| 日韩视频免费观看| 中文欧美字幕免费| 久久不射中文字幕| 久久久一区二区| 欧美精品久久99久久在免费线| 久久综合狠狠综合久久综青草| 久久久久天天天天| 一区二区三区国产在线观看| 国产视频欧美视频| 在线观看亚洲专区| 99热精品在线观看| 久久精品一二三| 91久久国产综合久久91精品网站| 久久阴道视频| 亚洲盗摄视频| 性色av一区二区三区在线观看| 狼狼综合久久久久综合网| 欧美视频一区在线观看| 亚洲第一在线综合在线| 亚洲男人的天堂在线aⅴ视频| 久久这里只有| 亚洲欧美日本日韩| 久久久噜噜噜久噜久久| 日韩视频精品在线| 欧美激情影音先锋| 亚洲精品国产视频| 欧美激情一区在线| 久久xxxx| 在线视频国内自拍亚洲视频| 久久精品免视看| 欧美一区二区视频在线观看| 亚洲欧美日韩中文在线制服| 国产亚洲午夜| 午夜综合激情| 欧美一级电影久久| 国产亚洲制服色| 另类综合日韩欧美亚洲| 久久精品国产成人| 亚洲风情亚aⅴ在线发布| 欧美电影电视剧在线观看| 久久免费黄色| 亚洲第一在线| 亚洲精品影院在线观看| 欧美日韩123| 亚洲综合二区| 久久精品国产亚洲5555| 亚洲激情小视频| 在线亚洲欧美视频| 狠狠色丁香久久婷婷综合丁香| 亚洲图片欧洲图片av| 亚洲精品1234| 国产一区91精品张津瑜| 狠狠色丁香婷婷综合久久片| 欧美国产精品v| 欧美三级免费| 欧美激情一区二区三区在线视频观看 | 日韩午夜三级在线| 亚洲制服av| 亚洲最快最全在线视频| 毛片一区二区三区| 久久本道综合色狠狠五月| 欧美日本在线| 欧美电影资源| 亚洲高清精品中出| 久久久免费精品| 久久伊人亚洲| 国语自产在线不卡| 欧美一区二区三区免费视频| 亚洲欧美制服另类日韩| 国产精品久在线观看| 一区二区免费看| 香蕉久久夜色精品国产使用方法| 欧美国产免费| 日韩一区二区久久| 夜夜爽www精品| aaa亚洲精品一二三区| 国产在线播放一区二区三区| 亚洲制服av| 美日韩免费视频| 亚洲国产综合91精品麻豆| 久久影视精品| 999在线观看精品免费不卡网站| 中日韩午夜理伦电影免费| 欧美日韩一区二区视频在线观看| 亚洲精品中文字幕女同| 久久精品国产久精国产一老狼| 国产一区二区三区四区在线观看 | 一区二区久久久久| 欧美日韩免费观看一区二区三区| 亚洲黄色免费电影| 亚洲制服丝袜在线| 亚洲第一精品久久忘忧草社区| 欧美精品在线免费| 久久综合色8888| 亚洲欧美日韩国产成人| 日韩一级大片| 亚洲美女av电影| 欧美顶级艳妇交换群宴| 久久国产主播| 亚洲欧美日本国产有色| 夜夜爽av福利精品导航 | 欧美激情精品久久久久久黑人| 亚洲一区二区三区777| 免费亚洲电影在线| 久久精品av麻豆的观看方式| 宅男噜噜噜66一区二区| 日韩天堂在线视频| 亚洲人人精品| 99这里有精品| 亚洲一区二区三区涩| 亚洲一区图片| 国产精品亚洲网站| 欧美精品粉嫩高潮一区二区 | 亚洲手机成人高清视频| 一本不卡影院| 亚洲免费在线观看视频| 亚洲欧美电影院| 久久成人羞羞网站| 美女啪啪无遮挡免费久久网站| 美腿丝袜亚洲色图| 欧美日韩亚洲一区二| 国产婷婷精品| 亚洲国产精品欧美一二99| 日韩一区二区电影网| 亚洲欧美一区二区精品久久久| 欧美在线视频一区二区| 另类综合日韩欧美亚洲| 亚洲精品自在久久| 欧美一级视频精品观看| 欧美gay视频激情| 国产日韩一区二区三区| 日韩视频精品在线| 久久久久久69| 99国产精品一区| 狂野欧美激情性xxxx欧美| 国产精品免费一区二区三区在线观看 | 欧美在线观看网站| 欧美日韩亚洲综合一区| 亚洲国产精品久久精品怡红院| 午夜亚洲伦理| 欧美jizz19hd性欧美| 午夜日本精品| 国产精品影片在线观看| 亚洲视频一区在线| 亚洲国产精品久久久久婷婷884 | 欧美精品七区| 国产一区二区在线观看免费播放| 一区二区不卡在线视频 午夜欧美不卡在| 久久国产精品一区二区三区四区| 在线视频日本亚洲性| 欧美体内she精视频| 亚洲视频专区在线| avtt综合网| 国产精品视区| 久久精品亚洲国产奇米99| 亚洲特级毛片| 国产一区二区在线观看免费播放| 久久国产乱子精品免费女| 欧美亚洲三区| 亚洲人精品午夜| 亚洲宅男天堂在线观看无病毒| 国产综合欧美在线看| 欧美成人国产一区二区| 欧美日韩国产成人精品| 亚洲欧美一区二区激情| 久久成人一区二区| 亚洲人成网站在线播| 在线亚洲伦理| 亚洲国产精品精华液网站| 日韩亚洲欧美综合| 亚洲第一在线视频| 小辣椒精品导航| 一区二区三区色| 久久成人人人人精品欧| 一区二区欧美视频| 久久久国际精品| 欧美亚洲视频在线观看| 欧美国产日产韩国视频| 久久视频免费观看| 国产精品视频观看| 在线中文字幕日韩| 一区二区三区日韩欧美| 女人天堂亚洲aⅴ在线观看| 久久精品导航| 国产一区二区高清不卡| 午夜免费日韩视频| 久久久噜噜噜久久久| 国产日韩欧美综合| 午夜精品久久久久久久久久久|