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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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

轉載自:http://www.cnblogs.com/fojian/archive/2012/09/01/2666627.html

libx264 

libx264是一個自由的H.264編碼庫,是x264項目的一部分,使用廣泛,ffmpeg的H.264實現就是用的libx264。

代碼

要把一個I420視頻文件編碼為H264格式。I420是YUV中planar格式的一種,一張I420圖片中有三個plane,分別存放整張圖片的Y、U、V分量;采樣比例為4:2:0,12bpp,Y:U:V的分量長度是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>

變量聲明和參數

復制代碼
 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 }
復制代碼
  • 視頻尺寸是480×360,YUV I420格式,每個像素1.5個字節,所以一張YUV圖片大小是width * height * 1.5
  • encoder就是編碼器,x264_t格式在x264.h文件中只有

    typedef struct x264_t x264_t
        

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

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

初始化encoder

復制代碼
 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);
復制代碼

初始化pic_in

復制代碼
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;
復制代碼
  • 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初始化的時候已經被賦值,代碼中只需要將plane數組指向正確的位置

  • 程序中每一幀的圖片都是讀取到yuv_buffer中,所以在這里設置一次就行了

初始化文件描述符

復制代碼
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 }
復制代碼

編碼

復制代碼
 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 }
復制代碼
  • 關于ffmpeg的pts,網上有好多種公式,其實只要步長為1遞增就行了
  • H.264的NAL層是為了適應網絡傳輸的需要,將大的編碼后的幀分成多個塊
  • p_payload就是編碼后的H.264的幀數據,寫入輸出文件

掃尾

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視頻可供測試。

參考

  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) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            1000部国产精品成人观看| 久久精品免费电影| 久久麻豆一区二区| 欧美在线视频在线播放完整版免费观看| 一区二区三区国产精品| 99精品欧美一区二区三区| 日韩午夜电影在线观看| 一二三四社区欧美黄| 亚洲一区二区免费看| 午夜亚洲福利在线老司机| 欧美亚洲综合久久| 男女视频一区二区| 日韩亚洲精品视频| 亚洲免费视频成人| 久久综合色播五月| 欧美成人精品一区| 国产精品永久免费在线| 亚洲成色精品| 亚洲永久免费av| 毛片一区二区三区| 一区二区三区日韩精品| 久久精品一区二区国产| 欧美精品一区二区三区久久久竹菊 | 亚洲视频1区| 午夜精品福利一区二区蜜股av| 久久亚洲欧美| 一区二区激情视频| 美女黄毛**国产精品啪啪| 国产精品久久国产三级国电话系列 | 久久超碰97中文字幕| 免费av成人在线| 国产精品黄视频| 亚洲国产99精品国自产| 午夜亚洲性色福利视频| 欧美激情第一页xxx| 亚洲欧美成人精品| 欧美日韩另类一区| 亚洲激情视频在线播放| 久久精品国产一区二区电影 | 国产欧美日韩综合精品二区| 亚洲国产综合91精品麻豆| 亚洲欧美日本精品| 亚洲国产精品久久精品怡红院| 亚洲资源av| 欧美日韩午夜| 亚洲美女一区| 欧美www在线| 久久久www免费人成黑人精品| 国产精品久久亚洲7777| 一本色道久久综合亚洲精品不 | 一区二区三区视频观看| 农村妇女精品| 久久精品国亚洲| 国产日产亚洲精品| 亚洲欧美在线另类| 一区二区三区高清| 欧美日韩精品二区第二页| 亚洲日本电影| 欧美激情一区二区三级高清视频 | 韩国v欧美v日本v亚洲v| 欧美一站二站| 亚洲欧美色一区| 国产欧美va欧美va香蕉在| 亚洲欧美一区二区三区极速播放 | 亚洲私人影院在线观看| 亚洲日本免费| 欧美日韩在线播放三区| 在线亚洲精品福利网址导航| 亚洲精品国产无天堂网2021| 欧美精品福利在线| 亚洲图片欧美一区| 亚洲性色视频| 国产主播在线一区| 牛牛影视久久网| 欧美日本精品| 欧美一区二区视频免费观看| 欧美在线播放视频| 亚洲激情成人网| 亚洲免费观看高清完整版在线观看熊| 欧美国产免费| 亚洲欧美日韩国产| 久久精品国产99精品国产亚洲性色| 国产日韩欧美日韩大片| 噜噜噜噜噜久久久久久91| 欧美v亚洲v综合ⅴ国产v| 一区二区三区毛片| 欧美一级在线播放| 亚洲精品乱码| 亚洲免费在线视频| 亚洲国产导航| 亚洲区一区二区三区| 欧美三级午夜理伦三级中视频| 国产亚洲一二三区| 免费不卡视频| 欧美视频免费| 麻豆成人小视频| 欧美精品系列| 久久久噜噜噜久噜久久| 欧美激情综合五月色丁香小说| 亚洲欧美日韩在线不卡| 久久亚洲春色中文字幕| 亚洲一区中文字幕在线观看| 久久xxxx精品视频| 亚洲小说欧美另类婷婷| 快射av在线播放一区| 香蕉尹人综合在线观看| 欧美国产第一页| 久久一日本道色综合久久| 欧美视频一区二区三区…| 免费久久精品视频| 国产日韩一区| 一区二区av在线| 亚洲精品一区二区在线| 午夜视频在线观看一区| 99在线热播精品免费99热| 久久本道综合色狠狠五月| 亚洲一区二区三区精品在线观看 | 亚洲精品乱码久久久久久| 久久av一区二区| 亚洲欧美另类国产| 欧美日韩国产bt| 亚洲高清在线| 亚洲国产高清在线| 久久精品国内一区二区三区| 欧美在线观看日本一区| 国产精品国产三级国产| 日韩视频免费观看高清完整版| 亚洲国产日韩在线| 久久天天躁夜夜躁狠狠躁2022| 久久久国产精品亚洲一区| 国产精品自拍小视频| 亚洲一级在线| 午夜欧美不卡精品aaaaa| 欧美日本亚洲| 日韩亚洲欧美精品| 一区二区三区高清不卡| 欧美精品亚洲二区| 亚洲巨乳在线| 中国成人在线视频| 欧美喷水视频| 亚洲久久一区二区| 亚洲视频一区二区在线观看 | 国产精品免费电影| 亚洲视频在线视频| 亚洲欧美日韩视频一区| 国产精品美女久久| 亚洲在线免费观看| 久久狠狠一本精品综合网| 国产一区二区三区观看| 久久久国产午夜精品| 欧美大胆人体视频| 日韩亚洲不卡在线| 欧美日韩精品在线| 99精品视频一区二区三区| 亚洲一区二区三区欧美| 久久久91精品国产一区二区三区 | 亚洲国产一区二区三区在线播| 亚洲精选中文字幕| 欧美日韩另类视频| 亚洲欧美日韩精品久久亚洲区| 久久久久成人精品| 亚洲国产人成综合网站| 欧美日韩国产美| 亚洲欧美精品| 欧美成人一区二区三区片免费| 99ri日韩精品视频| 国产乱码精品1区2区3区| 欧美在线关看| 亚洲人人精品| 久久久高清一区二区三区| 亚洲激情影视| 国产精品一香蕉国产线看观看| 久久综合伊人77777蜜臀| 日韩一本二本av| 久久人人爽人人爽| 一区二区三区精品| 国模私拍一区二区三区| 欧美精品一区在线播放| 亚洲欧美日韩国产综合精品二区| 免费看成人av| 欧美一区二区三区免费观看视频| 1769国产精品| 国产精品第十页| 久热精品视频在线| 亚洲综合视频网| 亚洲国产一区二区a毛片| 久久av免费一区| 亚洲视频网在线直播| 亚洲电影激情视频网站| 国产精品视频一二| 欧美国产成人在线| 久久噜噜噜精品国产亚洲综合 | 亚洲专区在线视频| 亚洲国产专区校园欧美| 久久躁日日躁aaaaxxxx| 午夜在线电影亚洲一区| 夜夜爽夜夜爽精品视频| 在线免费一区三区| 国产一区视频网站| 国产精品一区二区在线观看不卡 |