導航:首頁 > 地理科目 > ffmpeg怎麼看地理位置

ffmpeg怎麼看地理位置

發布時間:2022-06-09 10:02:01

㈠ 如何學習ffmpeg

ffmpeg 官方資料 維護的不是很好,很多函數的說明都不夠明確。所以學習ffmpeg的最好的方式是看源碼。ffmpeg的源碼結構還是挺清晰的,可讀性比較強,可以從官方的幾個常式開始看。網上也有中文的ffmpeg教程,講解了幾個主要函數,可以作為一個參考。如果只是應用的話,光看命令就行了。

㈡ FFmpeg是不是比X264快

FFMPEG是目前被應用最廣泛的編解碼軟體庫,支持多種流行的編解碼器,它是C語言實現的,不僅被集成到各種PC軟體,也經常被移植到多種嵌入式設備中。使用面向對象的辦法來設想這樣一個編解碼庫,首先讓人想到的是構造各種編解碼器的類,然後對於它們的抽象基類確定運行數據流的規則,根據演算法轉換輸入輸出對象。
在實際的代碼,將這些編解碼器分成encoder/decoder,muxer/demuxer和device三種對象,分別對應於編解碼,輸入輸出格式和設備。在main函數的開始,就是初始化這三類對象。在avcodec_register_all中,很多編解碼器被注冊,包括視頻的H.264解碼器和X264編碼器等,
REGISTER_DECODER (H264, h264);
REGISTER_ENCODER (LIBX264, libx264);
找到相關的宏代碼如下
#define REGISTER_ENCODER(X,x) { /
extern AVCodec x##_encoder; /
if(CONFIG_##X##_ENCODER) avcodec_register(&x##_encoder); }
#define REGISTER_DECODER(X,x) { /
extern AVCodec x##_decoder; /
if(CONFIG_##X##_DECODER) avcodec_register(&x##_decoder); }
這樣就實際在代碼中根據CONFIG_##X##_ENCODER這樣的編譯選項來注冊libx264_encoder和h264_decoder,注冊的過程發生在avcodec_register(AVCodec *codec)函數中,實際上就是向全局鏈表first_avcodec中加入libx264_encoder、h264_decoder特定的編解碼器,輸入參數AVCodec是一個結構體,可以理解為編解碼器的基類,其中不僅包含了名稱,id等屬性,而且包含了如下函數指針,讓每個具體的編解碼器擴展類實現。
int (*init)(AVCodecContext *);
int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
int (*close)(AVCodecContext *);
int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
const uint8_t *buf, int buf_size);
void (*flush)(AVCodecContext *);
繼續追蹤libx264,也就是X264的靜態編碼庫,它在FFMPEG編譯的時候被引入作為H.264編碼器。在libx264.c中有如下代碼
AVCodec libx264_encoder = {
.name = "libx264",
.type = CODEC_TYPE_VIDEO,
.id = CODEC_ID_H264,
.priv_data_size = sizeof(X264Context),
.init = X264_init,
.encode = X264_frame,
.close = X264_close,
.capabilities = CODEC_CAP_DELAY,
.pix_fmts = (enum PixelFormat[]) { PIX_FMT_YUV420P, PIX_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
};

這里具體對來自AVCodec得屬性和方法賦值。其中
.init = X264_init,
.encode = X264_frame,
.close = X264_close,
將函數指針指向了具體函數,這三個函數將使用libx264靜態庫中提供的API,也就是X264的主要介面函數進行具體實現。pix_fmts定義了所支持的輸入格式,這里4:2:0
PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)

上面看到的X264Context封裝了X264所需要的上下文管理數據,
typedef struct X264Context {
x264_param_t params;
x264_t *enc;
x264_picture_t pic;
AVFrame out_pic;
} X264Context;
它屬於結構體AVCodecContext的void *priv_data變數,定義了每種編解碼器私有的上下文屬性,AVCodecContext也類似上下文基類一樣,還提供其他表示屏幕解析率、量化范圍等的上下文屬性和rtp_callback等函數指針供編解碼使用。
回到main函數,可以看到完成了各類編解碼器,輸入輸出格式和設備注冊以後,將進行上下文初始化和編解碼參數讀入,然後調用av_encode()函數進行具體的編解碼工作。根據該函數的注釋一路查看其過程:
1. 輸入輸出流初始化。
2. 根據輸入輸出流確定需要的編解碼器,並初始化。
3. 寫輸出文件的各部分

重點關注一下step2和3,看看怎麼利用前面分析的編解碼器基類來實現多態。大概查看一下這段代碼的關系,發現在FFMPEG里,可以用類圖來表示大概的編解碼器組合。
可以參考【3】來了解這些結構的含義(見附錄)。在這里會調用一系列來自utils.c的函數,這里的avcodec_open()函數,在打開編解碼器都會調用到,它將運行如下代碼:
avctx->codec = codec;
avctx->codec_id = codec->id;
avctx->frame_number = 0;
if(avctx->codec->init){
ret = avctx->codec->init(avctx);
進行具體適配的編解碼器初始化,而這里的avctx->codec->init(avctx)就是調用AVCodec中函數指針定義的具體初始化函數,例如X264_init。

在avcodec_encode_video()和avcodec_encode_audio()被output_packet()調用進行音視頻編碼,將同樣利用函數指針avctx->codec->encode()調用適配編碼器的編碼函數,如X264_frame進行具體工作。

從上面的分析,我們可以看到FFMPEG怎麼利用面向對象來抽象編解碼器行為,通過組合和繼承關系具體化每個編解碼器實體。設想要在FFMPEG中加入新的解碼器H265,要做的事情如下:
1. 在config編譯配置中加入CONFIG_H265_DECODER
2. 利用宏注冊H265解碼器
3. 定義AVCodec 265_decoder變數,初始化屬性和函數指針
4. 利用解碼器API具體化265_decoder的init等函數指針

完成以上步驟,就可以把新的解碼器放入FFMPEG,外部的匹配和運行規則由基類的多態實現了。

4. X264架構分析

X264是一款從2004年有法國大學生發起的開源H.264編碼器,對PC進行匯編級代碼優化,舍棄了片組和多參考幀等性能效率比不高的功能來提高編碼效率,它被FFMPEG作為引入的.264編碼庫,也被移植到很多DSP嵌入平台。前面第三節已經對FFMPEG中的X264進行舉例分析,這里將繼續結合X264框架加深相關內容的了解。

查看代碼前,還是思考一下對於一款具體的編碼器,怎麼面向對象分析呢?對熵編碼部分對不同演算法的抽象,還有幀內或幀間編碼各種估計演算法的抽象,都可以作為類來構建。
在X264中,我們看到的對外API和上下文變數都聲明在X264.h中,API函數中,關於輔助功能的函數在common.c中定義
void x264_picture_alloc( x264_picture_t *pic, int i_csp, int i_width, int i_height );
void x264_picture_clean( x264_picture_t *pic );
int x264_nal_encode( void *, int *, int b_annexeb, x264_nal_t *nal );
而編碼功能函數定義在encoder.c
x264_t *x264_encoder_open ( x264_param_t * );
int x264_encoder_reconfig( x264_t *, x264_param_t * );
int x264_encoder_headers( x264_t *, x264_nal_t **, int * );
int x264_encoder_encode ( x264_t *, x264_nal_t **, int *, x264_picture_t *, x264_picture_t * );
void x264_encoder_close ( x264_t * );
在x264.c文件中,有程序的main函數,可以看作做API使用的例子,它也是通過調用X264.h中的API和上下文變數來實現實際功能。
X264最重要的記錄上下文數據的結構體x264_t定義在common.h中,它包含了從線程式控制制變數到具體的SPS、PPS、量化矩陣、cabac上下文等所有的H.264編碼相關變數。其中包含如下的結構體
x264_predict_t predict_16x16[4+3];
x264_predict_t predict_8x8c[4+3];
x264_predict8x8_t predict_8x8[9+3];
x264_predict_t predict_4x4[9+3];
x264_predict_8x8_filter_t predict_8x8_filter;
x264_pixel_function_t pixf;
x264_mc_functions_t mc;
x264_dct_function_t dctf;
x264_zigzag_function_t zigzagf;
x264_quant_function_t quantf;
x264_deblock_function_t loopf;
跟蹤查看可以看到它們或是一個函數指針,或是由函數指針組成的結構,這樣的用法很想面向對象中的interface介面聲明。這些函數指針將在x264_encoder_open()函數中被初始化,這里的初始化首先根據CPU的不同提供不同的函數實現代碼段,很多與可能是匯編實現,以提高代碼運行效率。其次把功能相似的函數集中管理,例如類似intra16的4種和intra4的九種預測函數都被用函數指針數組管理起來。

x264_encoder_encode()是負責編碼的主要函數,而其內包含的x264_slice_write()負責片層一下的具體編碼,包括了幀內和幀間宏塊編碼。在這里,cabac和cavlc的行為是根據h->param.b_cabac來區別的,分別運行x264_macroblock_write_cabac()和x264_macroblock_write_cavlc()來寫碼流,在這一部分,功能函數按文件定義歸類,基本按照編碼流程圖運行,看起來更像面向過程的寫法,在已經初始化了具體的函數指針,程序就一直按編碼過程的邏輯實現。如果從整體架構來看,x264利用這種類似介面的形式實現了弱耦合和可重用,利用x264_t這個貫穿始終的上下文,實現信息封裝和多態。
本文大概分析了FFMPEG/X264的代碼架構,重點探討用C語言來實現面向對象編碼,雖不至於強行向C++靠攏,但是也各有實現特色,保證實用性。值得規劃C語言軟體項目所借鑒。

㈢ 怎麼查看ffmpeg源碼版本號

桌面上右鍵「打開終端」。 也可以使用ctrl+alt+t就可以打開終端窗口。 在裡面輸入查看版本的命令。 $ffmpeg -version 回車執行命令,我們會發現第一行就是ffmpeg的版本。 如果在windows系統下,我們可以WIN+R打開左下角的運行窗口,在裡面輸入cmd...

㈣ ffmpeg在不安裝dshow的情況下如何查看設備列表

fmpeg已經能支持dshow設備了!

但編譯時會遇到一些麻煩.在此把我的編譯歷程總結一下,以使後來者的心靈免遭蹂躪.

先說一下我的編譯環境:
mingw+msys,ffmpeg用最新版.

在configure ffmpeg工程時,如果不特別指定,默認fdshow設備是被支持的,但編譯後卻沒有.可以查看configure的日誌文件,會發現找不到一些依賴的頭文件.所以最終編譯出來的ffmpeg.exe,
用ffmpeg -formats來看,在indev一項中,一般只有vfwcap,而沒有dshow.

為什麼會缺頭文件呢?好像是有些文件中的內容是侵權的,所以mingw本身不提供,需要你自己把它搞過來.

㈤ 如何使用ffmpeg查看html5的codec

在系統環境變數的path中添加FFMPEG可執行程序的的目錄。
例如FFMPEG位於D:\ffmpeg\bin中。右鍵「我的電腦」->屬性->高級系統設置->高級->環境變數,找到名字為path的變數,在其後追加字元串:D:\ffmpeg\bin;(結尾是有分號的)。設置完一般重啟後生效。
設置後,在任意目錄下都可以用ffmpeg.exe(ffplay.exe)轉碼(播放)。

㈥ 用過ffmpeg的看一下

這么不詳細。。。

㈦ 請教ffmpeg在centeOS 64位下的編譯問題

軟體安裝


(1). MinGW+Msys安裝


下載MSYS,解壓到E:/ffmpeg64/msys目錄。


下載MinGW-w64,解到E:/ffmpeg64/msys/mingw64目錄。


啟動msys.bat,打開類似於Linux的終端,並導入mingw64的環境變數。


echo 'export PATH=.:/local/bin:/mingw64/bin:/bin' > .profile

source .profile

(2). SDL安裝


下載SDL1.2.14,解壓到E:/ffmpeg64/SDL-1.2.14目錄。


進入SDL-1.2.14目錄,依次執行:


./configure --host=x86_64-w64-mingw32

make

make install

編譯過程中,出現如下錯誤:

㈧ ffmpeg怎麼看這個圖啊,我想知道他的碼流是多少

視頻碼率約11.7Mbps,音頻碼率384Kbps

㈨ 怎麼查看ffmpeg源文件存放的位置

源文件指
Database應文件(.MDF, .LDF)

㈩ 如何查看ffmpeg版本號

桌面上右鍵「打開終端」。

也可以使用ctrl+alt+t就可以打開終端窗口。

在裡面輸入查看版本的命令。
$ffmpeg -version

回車執行命令,我們會發現第一行就是ffmpeg的版本。

如果在windows系統下,我們可以WIN+R打開左下角的運行窗口,在裡面輸入cmd回車。

同樣在裡面輸入ffmpeg -version命令就可以顯示版本信息了。

閱讀全文

與ffmpeg怎麼看地理位置相關的資料

熱點內容
word中化學式的數字怎麼打出來 瀏覽:746
乙酸乙酯化學式怎麼算 瀏覽:1411
沈陽初中的數學是什麼版本的 瀏覽:1363
華為手機家人共享如何查看地理位置 瀏覽:1054
一氧化碳還原氧化鋁化學方程式怎麼配平 瀏覽:894
數學c什麼意思是什麼意思是什麼 瀏覽:1422
中考初中地理如何補 瀏覽:1312
360瀏覽器歷史在哪裡下載迅雷下載 瀏覽:712
數學奧數卡怎麼辦 瀏覽:1402
如何回答地理是什麼 瀏覽:1035
win7如何刪除電腦文件瀏覽歷史 瀏覽:1063
大學物理實驗干什麼用的到 瀏覽:1494
二年級上冊數學框框怎麼填 瀏覽:1713
西安瑞禧生物科技有限公司怎麼樣 瀏覽:1006
武大的分析化學怎麼樣 瀏覽:1256
ige電化學發光偏高怎麼辦 瀏覽:1345
學而思初中英語和語文怎麼樣 瀏覽:1667
下列哪個水飛薊素化學結構 瀏覽:1430
化學理學哪些專業好 瀏覽:1493
數學中的棱的意思是什麼 瀏覽:1071