當前位置:首頁 » 編程軟體 » ffmpegh264編譯

ffmpegh264編譯

發布時間: 2022-03-14 08:48:25

1. ffmpeg支持將編碼轉為H264的嗎

ffmpeg通過libx264支持MPEG 4 AVC
把-vcodec h264改成-vcodec x264 。

2. ffmpeg如果轉h264

你所說的h264,avc是一種視頻編碼,而aac又是一種音頻哦~~~

你想轉成h264/avc高清編碼的視頻,用mp4/rm轉換專家就可以做到了,只要導出的時候在視頻編碼器處選擇一下就好了

參考資料:http://58.61.155.15/shortpage/rmsp.htm

3. ffmpeg 怎麼把h264文件轉成MP4

H.264是編碼規范不是視頻格式,有些Mp4格式的視頻也用這種編碼。一般Mp4使用DIVX或XVID編碼,主要看播放設備是哪種。ffmpeg需要在命令提示符下運行(按Win鍵+R調出運行,輸入CMD即可),而且要轉換的視頻最好與FFmpeg放在同一個目錄下,以下是以轉換PSP能播放的視頻為例:
ffmpeg -y -i "1.avi" -title "Test" -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 "1.***"
解釋:以上命令可以在Dos命令行中輸入,也可以創建到批處理文件中運行。不過,前提是:要在ffmpeg所在的目錄中執行
參數:
-y(覆蓋輸出文件,即如果1.***文件已經存在的話,不經提示就覆蓋掉了)
-i "1.avi"(輸入文件是和ffmpeg在同一目錄下的1.avi文件,可以自己加路徑,改名字)
-title "Test"(在PSP中顯示的影片的標題)
-vcodec xvid(使用XVID編碼壓縮視頻,不能改的)
-s 368x208(輸出的解析度為368x208,注意片源一定要是16:9的不然會變形)
-r 29.97(幀數,一般就用這個)
-b 1500(視頻數據流量,用-b xxxx的指令則使用固定碼率,數字隨便改,1500以上沒效果;還可以用動態碼率如:-qscale 4和-qscale 6,4的質量比6高)
-acodec aac(音頻編碼用AAC)
-ac 2(聲道數1或2)
-ar 24000(聲音的采樣頻率,好像PSP只能支持24000Hz)
-ab 128(音頻數據流量,一般選擇32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(輸出psp專用格式)
-muxvb 768(好像是給PSP機器識別的碼率,一般選擇384、512和768,1500以上,PSP會提示文件損壞了)
"1.***"(輸出文件名,也可以加路徑改文件名)

4. ffmpeg 怎麼把h264 轉換為ts文件

命令:
ffmpeg -i test.h264 -vcodec -vbsf h264_mp4toannexb test.ts
自己總結過一篇學習過程,在CSDN上:《[總結]FFMPEG視音頻編解碼零基礎學習方法》

5. ffmpeg封裝H264,小白求講解

FFmpeg使用教程 你應該找一下 網路文庫就有

6. 如何使用ffmpeg將h264標准碼流生成m3u8索引和ts段文件

H.264,或稱MPEG-4第十部分,是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態圖像專家組(MPEG)聯合組成的聯合視頻組(JVT,JointVideoTeam)提出的高度壓縮數字視頻編解碼器標准。

什麼是H.264?H.264是一種高性能的視頻編解碼技術。目前國際上制定視頻編解碼技術的組織有兩個,一個是「國際電聯(ITU-T)」,它制定的標准有H.261、H.263、H.263+等,另一個是「國際標准化組織(ISO)」它制定的標准有MPEG-1、MPEG-2、MPEG-4等。而H.264則是由兩個組織聯合組建的聯合視頻組(JVT)共同制定的新數字視頻編碼標准,所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高級視頻編碼(AdvancedVideoCoding,AVC),而且它將成為MPEG-4標準的第10部分。因此,不論是MPEG-4 AVC、MPEG-4Part10,還是ISO/IEC 14496-10,都是指H.264。

H.264最大的優勢是具有很高的數據壓縮比率,在同等圖像質量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。舉個例子,原始文件的大小如果為88GB,採用MPEG-2壓縮標准壓縮後變成3.5GB,壓縮比為25∶1,而採用H.264壓縮標准壓縮後變為879MB,從88GB到879MB,H.264的壓縮比達到驚人的102∶1!H.264為什麼有那麼高的壓縮比?低碼率(LowBitRate)起了重要的作用,和MPEG-2和MPEG-4ASP等壓縮技術相比,H.264壓縮技術將大大節省用戶的下載時間和數據流量收費。尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質量流暢的圖像。

7. 如何將ffmpeg中h264解碼器抽取出來編譯,在vs上運行

如何將ffmpeg中h264解碼器抽取出來編譯
從ffmpeg中抽取的h264解碼器,是一個vc工程文件,但同樣經過修改後可以在Linux下運行,修改過程只需要對每個.c文件進行編譯即可

8. 如何使用FFMPEG+H264實現RTP傳輸數據

1、首先你要編譯好FFMPEG,
a) 方法一:可以去官網下載源碼,用MINGW編譯(編譯時記得支持H264,當然,事先得下載並編譯好libx264,視頻技術論壇里有很多介紹)
b) 方法二:更加省心省力的方法是,下載別人已經編譯好的資源,如ZeranoeFFmpeg的,下載他的dev版本,包含了頭文件,鏈接庫等必須的東西,當然,這東西已經是支持H264的了。
2、以下的就是代碼部分了:
a) 先聲明必要的變數:

AVFormatContext *fmtctx;

AVStream *video_st;

AVCodec *video_codec;

const int FPS = 25; /* 25 images/s */

const char *RDIP = 「127.0.0.1」;

unsigned int RDPORT = 5678;

const unsigned int OUTWIDTH = 720;

const unsigned int OUTHEIGHT = 480;

av_register_all();

avformat_network_init();
復制代碼

b) 初始化AV容器

fmtctx = avformat_alloc_context();
復制代碼

c) 獲得輸出格式,這里是RTP網路流

fmtctx->oformat = av_guess_format("rtp", NULL, NULL);
復制代碼

d)打開網路流

snprintf(fmtctx->filename, sizeof(fmtctx->filename),"rtp://%s:%d",RDIP,RDPORT);

avio_open(&fmtctx->pb,fmtctx->filename, AVIO_FLAG_WRITE)
復制代碼

e) 開始添加H264視頻流

video_st = NULL;video_st = add_video_stream(fmtctx, &video_codec, AV_CODEC_ID_H264);
復制代碼

其中,add_video_stream函數為:

add_video_stream(AVFormatContext *oc,AVCodec **codec, enum AVCodecID codec_id)

{

AVCodecContext *c;

AVStream *st;

/* find the video encoder */

*codec = avcodec_find_encoder(codec_id);

st = avformat_new_stream(oc, *codec);

c = st->codec;

avcodec_get_context_defaults3(c, *codec);

c->codec_id = codec_id;

c->width = OUTWIDTH;

c->height = OUTHEIGHT;

c->time_base.den = FPS;

c->time_base.num = 1;

c->pix_fmt = PIX_FMT_YUV420P;

if(oc->oformat->flags & AVFMT_GLOBALHEADER)

c->flags|= CODEC_FLAG_GLOBAL_HEADER;

av_opt_set(c->priv_data, "preset", "ultrafast", 0);

av_opt_set(c->priv_data, "tune","stillimage,fastdecode,zerolatency",0);

av_opt_set(c->priv_data, "x264opts","crf=26:vbv-maxrate=728:vbv-bufsize=364:keyint=25",0);return st;}

// OPEN THE CODE

avcodec_open2(video_st->codec, video_codec, NULL);

/* Write the stream header, if any. */

avformat_write_header(fmtctx, NULL);
復制代碼

f) 現在,就可以不斷的編碼數據,並發生數據了

AVFrame* m_pYUVFrame = avcodec_alloc_frame();

while(1) //這里設置成無限循環,你可以設置成250,或其他數進行測試,觀看結果

{

fill_yuv_image(m_pYUVFrame, video_st->codec->frame_number,OUTWIDTH, OUTHEIGHT);

/* encode the image */

AVPacket pkt;

int got_output = 0;

av_init_packet(&pkt);

pkt.data = NULL; // packet data will be allocated by the encoder

pkt.size = 0;

pkt.pts = AV_NOPTS_VALUE;

pkt.dts =AV_NOPTS_VALUE;

m_pYUVFrame->pts = video_st->codec->frame_number;

ret = avcodec_encode_video2(c, &pkt,frame, &got_output);

if (ret < 0) {fprintf(stderr, "Error encoding video frame: %s\n", av_err2str(ret));

exit(1);

}

/* If size is zero, it means the image was buffered. */

if (got_output)

{

if (c->coded_frame->key_frame)pkt.flags |= AV_PKT_FLAG_KEY;

pkt.stream_index = st->index;

if (pkt.pts != AV_NOPTS_VALUE )

{

pkt.pts = av_rescale_q(pkt.pts,video_st->codec->time_base, video_st->time_base);

}

if(pkt.dts !=AV_NOPTS_VALUE )

{

pkt.dts = av_rescale_q(pkt.dts,video_st->codec->time_base, video_st->time_base);

}

/* Write the compressed frame to the media file. */

ret = av_interleaved_write_frame(oc,&pkt);

}

else {

ret = 0;

}

}
復制代碼

g) Fill_yuv_image函數:

/* Prepare a mmy image. */

static void fill_yuv_image(AVPicture *pict,int frame_index,int width, int height)

{

int x, y, i;

i = frame_index;

/* Y */

for (y = 0; y < height; y++)

for (x = 0; x < width; x++)

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

/* Cb and Cr */

for (y = 0; y < height / 2; y++)

{

for (x = 0; x < width / 2; x++)

{

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

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

}

}

}
復制代碼

h) 列印sdp信息,僅需一次,列印的sdp信息,用在VLC播放器結束網路視頻流時用到

//列印sdp信息

char sdp[2048];

av_sdp_create(&fmtctx,1, sdp, sizeof(sdp));

printf("%s\n",sdp);

fflush(stdout);
復制代碼

i)最後,做一些清理工作

avcodec_free_frame(&m_pYUVFrame);

av_write_trailer(fmtctx);

/* Free the streams. */

for (unsigned int i = 0; i< fmtctx->nb_streams;i++)

{

av_freep(&fmtctx->streams->codec);

av_freep(&fmtctx->streams);

}

if(!(fmtctx->oformat->flags& AVFMT_NOFILE))

/* Close the output file. */

avio_close(fmtctx->pb);

/*free the stream */

av_free(fmtctx);
復制代碼

3、編譯代碼,記得添加庫文件,運行一次代碼,不用死循環,設置不用循環,因為是要讓他列印出sdp文件的信息。得到sdp信息,比如我精簡成如下:

c=IN IP4 127.0.0.1

m=video 56782 RTP/AVP 96

a=rtpmap:96 H264/90000

a=framerate:25

a=fmtp:96 packetization-mode=1
復制代碼

9. 在ubuntu12.04LTS下成功編譯安裝帶有h264和aac編碼的ffmpeg的完整過程(命令行)

先下載最少yasm、ffmpeg、x264的源碼,
具體步驟和這個差不多。
https://trac.ffmpeg.org/wiki/UbuntuCompilationGuide

h.264通常只用x264一種。
aac編碼器有fdk,visualon,faac,aacplus,內置的等5種選擇。
用fdk最好,其餘任一也夠。

先編譯組件,通常是

./configure 具體包的設置選項
make install

編譯好各個組件後,最後再設置和編譯ffmpeg。

c編譯器的選項CFLAGS最好一致。可以針對自己的cpu優化。比如加入
「-Ofast 」只為速度

-mtune core2 使用core2的優化。

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:642
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:368
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:89
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:312
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:794
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:347
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:213
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:818
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:369
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:596