亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

FFMpeg中apiexample.c例子分析——編碼分析

系統(tǒng) 2184 0

apiexample.c例子教我們?nèi)绾稳ダ胒fmpeg庫中的api函數(shù)來自己編寫編解碼程序。

(1)首先,main函數(shù)中一開始會去調(diào)用avcodec_init()函數(shù),該函數(shù)的作用是初始化libavcodec,而我們在使用avcodec庫時(shí),該函數(shù)必須被調(diào)用。

  (2)avcodec_register_all()函數(shù),注冊所有的編解碼器(codecs),解析器(parsers)以及碼流過濾器(bitstream filters)。當(dāng)然我們也可以使用個(gè)別的注冊函數(shù)來注冊我們所要支持的格式。

 ?。?)video_encode_example()函數(shù)用于 視頻編碼 ,由圖可知,所有的編碼工作都在該函數(shù)內(nèi)完成。

  (4)avcodec_find_encoder()函數(shù)用于查找一個(gè)與codec ID相匹配的已注冊的編碼器。

  (5)avcodec_alloc_context()函數(shù)用于分配一個(gè)AVCodecContext并設(shè)置默認(rèn)值,如果失敗返回NULL,并可用av_free()進(jìn)行釋放。

  (6)avcodec_alloc_frame()函數(shù)用于分配一個(gè)AVFrame并設(shè)置默認(rèn)值,如果失敗返回NULL,并可用av_free()進(jìn)行釋放。

 ?。?)設(shè)置參數(shù):

    設(shè)置采樣參數(shù),即比特率。

    c->bit_rate = 400000;

    設(shè)置分辨率,必須是2的倍數(shù)。

    c->width = 352;

    c->height = 288;

    設(shè)置幀率。

    c->time_base = (AVRational){1,25}; 該幀率為25,其實(shí)timebase = 1/framerate,花括號內(nèi)分別為分子和分母。

    設(shè)置GOP大小。

    c->gop_size = 10; 該值表示每10幀會插入一個(gè)I幀(intra frame)。

    設(shè)置B幀最大數(shù)。

    c->max_b_frames = 1; 該值表示在兩個(gè)非B幀之間,所允許插入的B幀的最大幀數(shù)。

    設(shè)置像素格式。

    c->pix_fmt = PIX_FMT_YUV420P; 該值將像素格式設(shè)置為YUV420P。

  (8)avcodec_open()函數(shù)用給定的AVCodec來初始化AVCodecContext。

 ?。?)接著是打開文件,f = fopen( filename, “wb” );

(10)分配圖像和輸出緩存。

    申請100KB左右的內(nèi)存作為輸出緩存。

outbuf_size = 100000;

    outbuf = malloc( outbuf_size );

    根據(jù)幀的大小來確定YUV420所占內(nèi)存大小,一個(gè)像素,RGB格式占用3個(gè)字節(jié),而YUV420格式只占用兩個(gè)字節(jié)。YUV420格式是指,每個(gè)像素都保留一個(gè)Y(亮度)分量,而在水平方向上,不是每行都取U和V分量,而是一行只取U分量,則其接著一行就只取V分量,以此重復(fù),所以420不是指沒有V,而是指一行采樣只取U,另一行采樣只取V。在取U和V時(shí),每兩個(gè)Y之間取一個(gè)U或V。但從4x4矩陣列來看,每4個(gè)矩陣點(diǎn)Y區(qū)域中,只有一個(gè)U和V,所以它們的比值是4:1。所以對于一個(gè)像素,RGB需要8 * 3 = 24位,即占3個(gè)字節(jié);而YUV420P,8 + 8/4 + 8/4 = 12位,即占2個(gè)字節(jié),其中8指Y分量,8/4指U和V分量。

    size = c->width * c->height;

    picture_buf = malloc( (size * 3) / 2 );

    picture->data[0] = picture_buf;

    picture->data[1] = picture->data[0] + size;

    picture->data[2] = picture->data[1] + size / 4;

    picture->linesize[0] = c->width;

    picture->linesize[1] = c->width / 2;

    picture->linesize[2] = c->width / 2;

    其中,data[0]存放Y,data[1]存放U,data[2]存放V【FixMe】。linesize[0]表示Y分量的寬度,linesize[1]表示U分量的寬度,linesize[2]表示V分量的寬度。

 ?。?1)編碼一秒鐘的視頻,幀率為25,所以需要循環(huán)25次,每次編碼一幀。

 ?。?1.1)準(zhǔn)備一幅偽圖像,即自己自定義往里面塞數(shù)據(jù)。

    for(y=0;y<c->height;y++){

for(x=0;x<c->width;x++){

picture->data[0][y*picture->linesize[0]+x]=x+y+i*3;

}

}

for(y=0;y<c->height/2;y++){

for(x=0;x<c->width/2;x++){

picture->data[1][y*picture->linesize[1]+x]=128+y+i*2;

picture->data[2][y*picture->linesize[2]+x]=64+x+i*5;

}

}

  (11.2)avcodec_encode_video()從picture中編碼一幀視頻數(shù)據(jù),并存入到outbuf中,而期間所使用的編碼器為c。

 ?。?1.3)將編碼完的數(shù)據(jù)寫入到文件里。

 ?。?2)對延時(shí)的幀數(shù)據(jù)進(jìn)行編碼。因?yàn)橄馦PEG4中,I幀、P幀和B幀之間存在一定的延時(shí)【FixMe】。同樣是avcodec_encode_video(),然后寫入文件。

 ?。?3)添加結(jié)束代碼,使其成為一個(gè)真正的mpeg文件。

    outbuf[0] = 0x00;

    outbuf[1] = 0x00;

    outbuf[2] = 0x01;

    outbuf[3] = 0xb7;

    fwrite( outbuf, 1, 4, f );

  這個(gè)結(jié)束代碼表示什么???

 ?。?4)釋放資源。

    fclose(f);

    free(picture_buf);

    free(outbuf);

    avcodec_close(c);

    av_free(c);

    av_free(picture);



FFMpeg中apiexample.c例子分析——編碼分析


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩99在线 | 欧美成人免费一级人片 | 午夜视频在线观看国产www | 天天草天天射 | 天天玩夜夜操 | 狠狠色婷婷综合天天久久丁香 | 香蕉视频网站免费观视频 | 亚洲成人免费视频 | 日韩影院久久 | 在线日韩中文字幕 | 色综合天天综合网看在线影院 | 亚洲国产系列久久精品99人人 | 看真人一级毛片 | 欧美18videosex灌满 | 国产精品99久久99久久久看片 | 国产精品久久综合桃花网 | 四虎影视精品永久免费 | 分分操这里只有精品 | 在线日本中文字幕 | 青草免费免费观看视频在线 | 天天干夜夜看 | 欧美日韩亚洲综合在线一区二区 | 美女黄频视频大全免费高清 | 国产欧美一区二区三区视频 | 97视频免费人人观看人人 | 久久91精品久久久久久水蜜桃 | 狠狠激情五月综合婷婷俺 | 麻豆国产在线不卡一区二区 | 亚洲国产精品综合久久久 | 亚洲欧美第一页 | 99在线精品日韩一区免费国产 | 久久中文字幕一区二区 | 久久九九免费 | 国产成人综合91香蕉 | 中文字幕国产精品 | 香蕉精品高清在线观看视频 | 四虎最新永久免费视频 | 欧美色图偷窥自拍 | 高清在线亚洲精品国产二区 | 亚洲成人免费在线视频 | 起碰成人免费公开网视频 |