av_register_all();//初始化ffmpeg庫,若是系統裏面的ffmpeg沒配置好這裏會出錯 avformat_open_input(); avformat_find_stream_info();//查找文件的流信息 av_dump_format();//dump只是個調試函數,輸出文件的音、視頻流的基本信息了,幀率、分辨率、音頻採樣等等 for(...);//遍歷文件的各個流,找到第一個視頻流,並記錄該流的編碼信息 sws_getContext();//根據編碼信息設置渲染格式 avcodec_find_decoder();//在庫裏面查找支持該格式的解碼器 avcodec_open2();//打開解碼器 pFrame=avcodec_alloc_frame();//分配一個幀指針,指向解碼後的原始幀 pFrameRGB=avcodec_alloc_frame();//分配一個幀指針,指向存放轉換成RGB後的幀 avpicture_fill(pFrameRGB);//給pFrameRGB幀加上分配的內存; while true{ av_read_frame();//讀取一個幀(到最後幀則break) avcodec_decode_video2();//解碼該幀 sws_getCachedContext()sws_scale();//把該幀轉換(渲染)成RGB SaveFrame();//對前5幀保存成ppm圖形文件(這個是自定義函數,非API) av_free_packet();//釋放本次讀取的幀內存 }
av_free(buffer); av_free(pFrameRGB); av_free(pFrame); avcodec_close(pCodecCtx); avformat_close_input(&pFormatCtx);
libavcodec:CODEC實際上是Coder/Decoder的縮寫,也就是編碼解碼器; libavdevice:對輸出輸入設備的支持; libavformat:對音頻視頻格式的解析 libavutil:集項工具; libpostproc:後期效果處理; libswscale:視頻場景比例縮放、色彩映射轉換;