日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

FFmpeg学习(一)开篇

發布時間:2024/3/24 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FFmpeg学习(一)开篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • FFmpeg學習(一)開篇
    • 為什么要學習FFmpeg
    • 1. FFmpeg簡介
    • 2. FFmpeg能做什么
    • 3. FFmpeg架構模塊組成
      • 3. 1 libavutil
      • 3. 2 libavformat
      • 3. 3 libavcodec
      • 3. 4 libavfilter
      • 3. 5 libavdevice
      • 3. 6 libswscale
      • 3. 7 libpostproc
      • 3. 8 libswrressample
      • 3. 9 ffmpeg
      • 3. 10 ffsever
      • 3. 11 ffplay
    • 4. FFmpeg安裝

FFmpeg學習(一)開篇

為什么要學習FFmpeg

本人希望打算深入研究音視頻領域,音視頻領域的內容很多,我自己打算從幾方面循序漸進:FFmpeg常用功能實踐, FFmpeg源碼研究, OpenGL, OpenGLES, Metal, AR, WebRTC, 直播架構等方向去研究。

音視頻目前主要有哪些應用場景呢?

  • 直播類:音視頻會議,教育直播,娛樂/游戲直播等 (例如花椒,映客,騰訊課堂,騰訊會議, 斗魚)
  • 短視頻:抖音,快手,小咖秀等, 這類應用主要是對聲音和視頻做特殊處理,如聲音變聲,變調,男聲變女聲,女聲變童聲;如視頻處理有:美顏,濾鏡處理。
  • 網絡視頻: 優酷,騰訊視頻,愛奇藝等。
  • 音視頻通話:微信,QQ, Skype等。
  • 視頻監控: 網絡攝像機IPC等
  • 人工智能:人臉識別,智能音箱等,這類應用更關注于算法。

從上面這么多應用場景,我們可以看出音視頻技術是多么重要,特別是5G時代,網絡傳輸問題大大提升,更多的音視頻需求會爆發出來。

我們可以看一下一個簡單播放器的架構,如下圖:

音頻解碼,視頻解碼一般都用FFmpeg解碼,在IOS8 之后提供了VideoToolBox框架支持硬解碼。

而視頻渲染一般使用OpenGL直接用GPU渲染,視頻渲染第三方框架有GPUImage, SDL, VLC

音頻視頻播放涉及到音視頻同步是一個 復雜的技術。

學習一個技術,需要一個高效的方法,只有不斷的實踐才能理解深刻。學習FFmpeg我們也需要好的文檔來學習,下面列舉一些必備的學習文檔地址:

  • FFmpeg官方文檔:http://ffmpeg.org/documentation.html
  • FFmpeg官方wiki: https://trac.ffmpeg.org

上述都是英文的文檔,如果英文學習困難,可以參考下面的中文資料:

  • 雷霄驊博士總結的資料: http://blog.csdn.net/leixiaohua1020
  • 羅索實驗室:http://www.rosoo.net
  • ChinaFFmpeg: http://bbs/chinaffmpeg.com

此外推薦兩本非常好的書籍:

  • FFmpeg從入門到精通
  • 音視頻開發進階指南:基于Android與iOS平臺的實踐

1. FFmpeg簡介

FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,并能將其轉化為流的開源計算機程序。采用LGPL或GPL許可證。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多code都是從頭開發的。

FFmpeg在Linux平臺下開發,但它同樣也可以在其它操作系統環境中編譯運行,包括Windows、Mac OS X等。這個項目最早由Fabrice Bellard發起,2004年至2015年間由Michael Niedermayer主要負責維護。許多FFmpeg的開發人員都來自MPlayer項目,而且當前FFmpeg也是放在MPlayer項目組的服務器上。項目的名稱來自MPEG視頻編碼標準,前面的"FF"代表"Fast Forward"

  • 一個偉大的軟件產生必定有它的一段傳奇歷史,FFmpeg的創建者是法國天才程序員Fabrice Bellard (法布里斯*貝拉)在 2000年是開發出初版;

法布里斯*貝拉:

  • 高中就讀期間開發了著名的可執行壓縮程序LZEXE
  • 2000年創建了FFmpeg項目
  • 2011年,他用JavaScript寫了一個Linux虛擬機(JSLinux)
  • 他還是QEMU,TinyCC 的作者
    • 2004年,邁克爾(Michael Niedermayer)接管FFmpeg, 邁克爾將濾鏡子系統libavfilter 加入FFmepg項目中,使得FFmpeg的多媒體處理更加多樣,更加方便。在FFmpeg發布了0.5版本后,很長一段時間沒有進行新版本的發布,直到后來FFmpeg采用Git作為版本控制服務器以后才開始繼續更新發布版本。

    • 2011年3月, 由于FFmpeg項目中有一些提交者對FFmpeg的項目管理方式和發展方向不一致,FFmpeg團隊分成了兩派,其中一派認為FFmpeg應該更加專注于音視頻開發,研究更新先進的音視頻技術,這些人重新創建了一個新的項目叫Libav。 另外一派認為他們要兼顧老的FFmpeg技術,然后逐步發展。

    • 2015年8月邁克爾主動辭去FFmpeg項目負責人的職務。邁克爾從Libav中移植了大量的代碼和功能到FFmpegZhong , 從此Libav又和FFmpeg合并一起發展。

    2. FFmpeg能做什么

    • 多媒體視頻處理工具FFmpeg有非常強大的功能包括視頻采集功能、視頻格式轉換、視頻抓圖、給視頻加水印等
    • 視頻采集功能:
      ffmpeg視頻采集功能非常強大,不僅可以采集視頻采集卡或USB攝像頭的圖像,還可以進行屏幕錄制,同時還支持以RTP方式將視頻流傳送給支持RTSP的流媒體服務器,支持直播應用。
  • 在Linux平臺上,ffmpeg對V4L2的視頻設備提供了很好的支持,如:./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0 -vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp 以上命令表示:采集10秒鐘視頻,對video4linux2視頻設備進行采集,采集QCIF(176*144)的視頻,每秒8幀,視頻設備為/dev/video0,視頻編碼為H263,輸出格式為RTP,后面定義了IP地址及端口,將該碼流所對應的SDP文件重定向到/tmp/ffmpeg.sdp中,將此SDP文件上傳到流媒體服務器就可以實現直播了。
  • 在windows下關于ffmpeg視頻采集的資料非常少,但是ffmpeg還是支持windows下視頻采集的。ffmpeg支持windows下video for windows(VFW)設備的視頻采集,不過VFW設備已經過時,正在被WDM的視頻設備所取代,但是ffmpeg還沒有支持WDM的計劃,不過好像有將WDM轉為VFW的工具,因此ffmpeg還是可以在windows下進行視頻采集的。
    • 視頻格式轉換功能:
  • ffmpeg視頻轉換功能。視頻格式轉換,比如可以將多種視頻格式轉換為flv格式,可不是視頻信號轉換 。
  • ffmpeg可以輕易地實現多種視頻格式之間的相互轉換(wma,rm,avi,mod等),例如可以將攝錄下的視頻avi等轉成視頻網站所采用的flv格式。
    • 視頻截圖功能:
  • 對于選定的視頻,截取指定時間的縮略圖。視頻抓圖,獲取靜態圖和動態圖,不提倡抓gif文件;因為抓出的gif文件大而播放不流暢。
  • 給視頻加水印功能
  • 使用ffmpeg 視頻添加水印(logo)。
  • 3. FFmpeg架構模塊組成

    我們先看一下一張FFmpeg的架構圖:

    下載好的源碼,我們也可以看到大概的源碼結構:

    3. 1 libavutil

    • libavutil : 包含一些公共的工具函數;
      AVUtil是FFmepg的核心工具庫,該模塊是最基礎的模塊之一,下面的許多其他模塊都會依賴該庫做一些基本的音視頻處理操作。

    3. 2 libavformat

    • libavformat:用于各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結構和讀取音視頻幀等功能;
    • AVFormat 是文件格式和協議庫,封裝了Protocol層和Demuxer,Muxer層,使得協議和格式對于開發者來說是透明的。AVFormat中實現了目前多媒體領域中的絕大多數媒體封裝格式,包括封裝和解封裝,如MP4, FLV, KV, TS 等文件封裝格式, RTMP, RTSP, MMS, HLS 等網絡協議封裝格式。

    FFmpeg是否支持某種媒體封裝格式,取決于編譯時是否包含了該格式的封裝庫。根據實際需求,可進行媒體封裝格式的擴展,增加自己定制的封裝格式,即在AVFormat中增加自己的封裝處理模塊。

    3. 3 libavcodec

    • libavcodec:用于各種類型聲音/圖像編解碼;
      AVCodec是編解碼庫,該模塊封裝了Codec層,但是有一些Codec是具備自己的License的,FFmpeg是不會默認添加像libx264,FDK-AAC,lame等庫的,但是FFmpeg就像一個平臺一樣,可以將其他的第三方的Codec以插件的方式添加進來,然后為開發者提供統一的接口。

    AVCodec中實現了目前多媒體絕大多數的編解碼格式,既支持編碼,也支持解碼。

    AVCodec除了支持MPEG4,AAC, MJPEG等自帶的媒體編解碼格式之外,還支持第三方的編解碼器,如H.264(AVC)編碼,需要使用x264編碼器; H.265(HEVC)編碼,需要使用x265編碼器; MP3(mp3lame)編碼,需要使用libmp3lame編碼器。如果希望增加自己的編碼格式,或者硬件編解碼,則需要在AVCodec中增加相應的編解碼模塊。

    3. 4 libavfilter

    • AVFilter : 是音視頻濾鏡庫,該模塊提供了包括音頻特性和視頻特效的處理,在使用FFmpeg的API進行編解碼的過程中,直接使用該模塊為音視頻數據做特效處理時非常方便同時也非常高效的一種方式。

    3. 5 libavdevice

    • AVDevice : 輸入輸出設備,比如,需要編譯出播放聲音或者視頻的工具ffplay,就需要確保該模塊是打開的,同時也需要libSDL的預先編譯,因為該設備模塊播放聲音與播放視頻使用的都是libSDL庫。

    3. 6 libswscale

    • libswscale : 用于視頻場景比例縮放、色彩映射轉換;
      SWScale 模塊是將圖像進行格式轉換的模塊,例如,可以將YUV的數據轉換為RGB的數據。

    3. 7 libpostproc

    • libpostproc : 用于后期效果處理;
    • PostProc模塊用來進行后期處理,當我們使用AVFilter的時候需要打開該模塊的開關,因為Filter中會使用到該模塊的一些基礎函數。如果是比較老的FFmpeg版本,那么有可能還會編譯處理avresample模塊,該模塊其實也是用于對音頻原始數據進行重采樣,但是現在已經被廢棄了,不再推薦使用該庫,而是使用swrresample庫進行替代。

    3. 8 libswrressample

    • SwrRessample 模塊可用于音頻重采樣,可以對數字音頻進行聲道數,數據格式,采樣率等多種基本信息的轉換。

    3. 9 ffmpeg

    • ffmpeg : 該項目提供的一個工具,可用于格式轉換、解碼或電視卡即時編碼等;

    3. 10 ffsever

    • ffsever : 一個 HTTP 多媒體即時廣播串流服務器;

    3. 11 ffplay

    • ffplay : 是一個簡單的播放器,使用ffmpeg 庫解析和解碼,通過SDL顯示;

    4. FFmpeg安裝

    • 從git 下載源碼:
    git clone https://gitfmpeg.org/ffmpeg.git

    • 下載源碼后,我們可以查看一下目錄結構:

    • 輸入./configure --help 命令查看配置信息

    • 內容太多需要分頁,輸入./configure --help | more

    從上面的幫助,我們可以嘗試輸入:./configure --list-decoders 查看所有解碼器

    aac dst mp1 s302m aac_at dvaudio mp1_at sami aac_fixed dvbsub mp1float sanm aac_latm dvdsub mp2 sbc aasc dvvideo mp2_at scpr ac3 dxa mp2float screenpresso ac3_at dxtory mp3 sdx2_dpcm ac3_fixed dxv mp3_at sgi acelp_kelvin eac3 mp3adu sgirle adpcm_4xm eac3_at mp3adufloat sheervideo adpcm_adx eacmv mp3float shorten adpcm_afc eamad mp3on4 sipr adpcm_agm eatgq mp3on4float siren adpcm_aica eatgv mpc7 smackaud adpcm_argo eatqi mpc8 smacker adpcm_ct eightbps mpeg1_cuvid smc adpcm_dtk eightsvx_exp mpeg1_v4l2m2m smvjpeg adpcm_ea eightsvx_fib mpeg1video snow adpcm_ea_maxis_xa escape124 mpeg2_crystalhd sol_dpcm adpcm_ea_r1 escape130 mpeg2_cuvid sonic adpcm_ea_r2 evrc mpeg2_mediacodec sp5x adpcm_ea_r3 exr mpeg2_mmal speedhq adpcm_ea_xas ffv1 mpeg2_qsv srgc adpcm_g722 ffvhuff mpeg2_v4l2m2m srt adpcm_g726 ffwavesynth mpeg2video ssa adpcm_g726le fic mpeg4 stl adpcm_ima_alp fits mpeg4_crystalhd subrip adpcm_ima_amv flac mpeg4_cuvid subviewer adpcm_ima_apc flashsv mpeg4_mediacodec subviewer1 adpcm_ima_apm flashsv2 mpeg4_mmal sunrast adpcm_ima_cunning flic mpeg4_v4l2m2m svq1 adpcm_ima_dat4 flv mpegvideo svq3 adpcm_ima_dk3 fmvc mpl2 tak adpcm_ima_dk4 fourxm msa1 targa adpcm_ima_ea_eacs fraps mscc targa_y216 adpcm_ima_ea_sead frwu msmpeg4_crystalhd tdsc adpcm_ima_iss g2m msmpeg4v1 text adpcm_ima_mtf g723_1 msmpeg4v2 theora adpcm_ima_oki g729 msmpeg4v3 thp adpcm_ima_qt gdv msrle tiertexseqvideo adpcm_ima_qt_at gif mss1 tiff adpcm_ima_rad gremlin_dpcm mss2 tmv adpcm_ima_smjpeg gsm msvideo1 truehd adpcm_ima_ssi gsm_ms mszh truemotion1 adpcm_ima_wav gsm_ms_at mts2 truemotion2 adpcm_ima_ws h261 mv30 truemotion2rt adpcm_ms h263 mvc1 truespeech adpcm_mtaf h263_v4l2m2m mvc2 tscc adpcm_psx h263i mvdv tscc2 adpcm_sbpro_2 h263p mvha tta adpcm_sbpro_3 h264 mwsc twinvq adpcm_sbpro_4 h264_crystalhd mxpeg txd adpcm_swf h264_cuvid nellymoser ulti adpcm_thp h264_mediacodec nuv utvideo adpcm_thp_le h264_mmal on2avc v210 adpcm_vima h264_qsv opus v210x adpcm_xa h264_rkmpp paf_audio v308 adpcm_yamaha h264_v4l2m2m paf_video v408 adpcm_zork hap pam v410 agm hca pbm vb aic hcom pcm_alaw vble alac hevc pcm_alaw_at vc1 alac_at hevc_cuvid pcm_bluray vc1_crystalhd alias_pix hevc_mediacodec pcm_dvd vc1_cuvid als hevc_qsv pcm_f16le vc1_mmal amr_nb_at hevc_rkmpp pcm_f24le vc1_qsv amrnb hevc_v4l2m2m pcm_f32be vc1_v4l2m2m amrwb hnm4_video pcm_f32le vc1image amv hq_hqa pcm_f64be vcr1 anm hqx pcm_f64le vmdaudio ansi huffyuv pcm_lxf vmdvideo ape hymt pcm_mulaw vmnc apng iac pcm_mulaw_at vorbis aptx idcin pcm_s16be vp3 aptx_hd idf pcm_s16be_planar vp4 arbc iff_ilbm pcm_s16le vp5 ass ilbc pcm_s16le_planar vp6 asv1 ilbc_at pcm_s24be vp6a asv2 imc pcm_s24daud vp6f atrac1 imm4 pcm_s24le vp7 atrac3 imm5 pcm_s24le_planar vp8 atrac3al indeo2 pcm_s32be vp8_cuvid atrac3p indeo3 pcm_s32le vp8_mediacodec atrac3pal indeo4 pcm_s32le_planar vp8_qsv atrac9 indeo5 pcm_s64be vp8_rkmpp aura interplay_acm pcm_s64le vp8_v4l2m2m aura2 interplay_dpcm pcm_s8 vp9 avrn interplay_video pcm_s8_planar vp9_cuvid avrp jacosub pcm_u16be vp9_mediacodec avs jpeg2000 pcm_u16le vp9_qsv avui jpegls pcm_u24be vp9_rkmpp ayuv jv pcm_u24le vp9_v4l2m2m bethsoftvid kgv1 pcm_u32be vplayer bfi kmvc pcm_u32le vqa bink lagarith pcm_u8 wavpack binkaudio_dct libaom_av1 pcm_vidc wcmv binkaudio_rdft libaribb24 pcx webp bintext libcelt pgm webvtt bitpacked libcodec2 pgmyuv wmalossless bmp libdav1d pgssub wmapro bmv_audio libdavs2 pictor wmav1 bmv_video libfdk_aac pixlet wmav2 brender_pix libgsm pjs wmavoice c93 libgsm_ms png wmv1 cavs libilbc ppm wmv2 ccaption libopencore_amrnb prores wmv3 cdgraphics libopencore_amrwb prosumer wmv3_crystalhd cdtoons libopenh264 psd wmv3image cdxl libopenjpeg ptx wnv1 cfhd libopus qcelp wrapped_avframe cinepak librsvg qdm2 ws_snd1 clearvideo libspeex qdm2_at xan_dpcm cljr libvorbis qdmc xan_wc3 cllc libvpx_vp8 qdmc_at xan_wc4 comfortnoise libvpx_vp9 qdraw xbin cook libzvbi_teletext qpeg xbm cpia loco qtrle xface cscd lscr r10k xl cyuv m101 r210 xma1 dca mace3 ra_144 xma2 dds mace6 ra_288 xpm derf_dpcm magicyuv ralf xsub dfa mdec rasc xwd dirac metasound rawvideo y41p dnxhd microdvd realtext ylc dolby_e mimic rl2 yop dpx mjpeg roq yuv4 dsd_lsbf mjpeg_cuvid roq_dpcm zero12v dsd_lsbf_planar mjpeg_qsv rpza zerocodec dsd_msbf mjpegb rscc zlib dsd_msbf_planar mlp rv10 zmbv dsicinaudio mmvideo rv20 dsicinvideo motionpixels rv30 dss_sp movtext rv40
    • 接下我們可以嘗試輸入:./configure --list-encoders 查看所有編碼器

    • 接下我們可以嘗試輸入:./configure --list-filters 查看所有濾鏡器

    abench colorhold il selectivecolor abitscope colorkey inflate sendcmd acompressor colorkey_opencl interlace separatefields acontrast colorlevels interleave setdar acopy colormatrix join setfield acrossfade colorspace kerndeint setparams acrossover compand ladspa setpts acrusher compensationdelay lagfun setrange acue concat lenscorrection setsar addroi convolution lensfun settb adeclick convolution_opencl libvmaf sharpness_vaapi adeclip convolve life showcqt adelay copy limiter showfreqs aderivative coreimage loop showinfo adrawgraph coreimagesrc loudnorm showpalette aecho cover_rect lowpass showspatial aemphasis crop lowshelf showspectrum aeval cropdetect lumakey showspectrumpic aevalsrc crossfeed lut showvolume afade crystalizer lut1d showwaves afftdn cue lut2 showwavespic afftfilt curves lut3d shuffleframes afifo datascope lutrgb shuffleplanes afir dcshift lutyuv sidechaincompress afirsrc dctdnoiz lv2 sidechaingate aformat deband mandelbrot sidedata agate deblock maskedclamp sierpinski agraphmonitor decimate maskedmax signalstats ahistogram deconvolve maskedmerge signature aiir dedot maskedmin silencedetect aintegral deesser maskedthreshold silenceremove ainterleave deflate maskfun sinc alimiter deflicker mcdeint sine allpass deinterlace_qsv mcompand smartblur allrgb deinterlace_vaapi median smptebars allyuv dejudder mergeplanes smptehdbars aloop delogo mestimate sobel alphaextract denoise_vaapi metadata sobel_opencl alphamerge derain midequalizer sofalizer amerge deshake minterpolate spectrumsynth ametadata deshake_opencl mix split amix despill movie spp amovie detelecine mpdecimate sr amplify dilation mptestsrc ssim amultiply dilation_opencl negate stereo3d anequalizer displace nlmeans stereotools anlmdn dnn_processing nlmeans_opencl stereowiden anlms doubleweave nnedi streamselect anoisesrc drawbox noformat subtitles anull drawgraph noise super2xsai anullsink drawgrid normalize superequalizer anullsrc drawtext null surround apad drmeter nullsink swaprect aperms dynaudnorm nullsrc swapuv aphasemeter earwax ocr tblend aphaser ebur128 ocv telecine apulsator edgedetect openclsrc testsrc arealtime elbg oscilloscope testsrc2 aresample entropy overlay thistogram areverse eq overlay_cuda threshold arnndn equalizer overlay_opencl thumbnail aselect erosion overlay_qsv thumbnail_cuda asendcmd erosion_opencl overlay_vulkan tile asetnsamples extractplanes owdenoise tinterlace asetpts extrastereo pad tlut2 asetrate fade pad_opencl tmedian asettb fftdnoiz pal100bars tmix ashowinfo fftfilt pal75bars tonemap asidedata field palettegen tonemap_opencl asoftclip fieldhint paletteuse tonemap_vaapi asplit fieldmatch pan tpad asr fieldorder perms transpose ass fifo perspective transpose_npp astats fillborders phase transpose_opencl astreamselect find_rect photosensitivity transpose_vaapi asubboost firequalizer pixdesctest treble atadenoise flanger pixscope tremolo atempo flite pp trim atrim floodfill pp7 unpremultiply avectorscope format premultiply unsharp avgblur fps prewitt unsharp_opencl avgblur_opencl framepack prewitt_opencl uspp avgblur_vulkan framerate procamp_vaapi v360 axcorrelate framestep program_opencl vaguedenoiser azmq freezedetect pseudocolor vectorscope bandpass freezeframes psnr vflip bandreject frei0r pullup vfrdet bass frei0r_src qp vibrance bbox fspp random vibrato bench gblur readeia608 vidstabdetect bilateral geq readvitc vidstabtransform biquad gradfun realtime vignette bitplanenoise graphmonitor remap vmafmotion blackdetect greyedge removegrain volume blackframe haas removelogo volumedetect blend haldclut repeatfields vpp_qsv bm3d haldclutsrc replaygain vstack boxblur hdcd resample w3fdif boxblur_opencl headphone reverse waveform bs2b hflip rgbashift weave bwdif highpass rgbtestsrc xbr cas highshelf roberts xfade cellauto hilbert roberts_opencl xfade_opencl channelmap histeq rotate xmedian channelsplit histogram rubberband xstack chorus hqdn3d sab yadif chromaber_vulkan hqx scale yadif_cuda chromahold hstack scale2ref yaepblur chromakey hue scale_cuda yuvtestsrc chromashift hwdownload scale_npp zmq ciescope hwmap scale_qsv zoompan codecview hwupload scale_vaapi zscale color hwupload_cuda scale_vulkan colorbalance hysteresis scroll colorchannelmixer idet select
    • 接下我們可以嘗試輸入:./configure --list-muxers 查看FFmpeg的封裝,封裝Muxing是指將壓縮后的編碼封裝到一個容器格式中,我們輸入./configure --list-muxers 來查看FFmpeg支持哪些容器格式:


    從上面打印信息來看,FFmpeg支持生成裸流文件,如H.264,AAC, PCM, 也支持一些常見的格式,如MP3, MP4, FLV, M3U8, WEBM等

    • 接下我們可以嘗試輸入:./configure --list-demuxers 查看FFmpeg的解封裝。
      FFmpeg的解封裝(Demuxing)是指將讀入的容器格式拆解開,將里面的壓縮的音頻流,視頻流,字幕流,數據流等提取出來。

    aa filmstrip loas rsd aac fits lrc rso ac3 flac lvf rtp acm flic lxf rtsp act flv m4v s337m adf fourxm matroska sami adp frm mgsts sap ads fsb microdvd sbc adx fwse mjpeg sbg aea g722 mjpeg_2000 scc afc g723_1 mlp sdp aiff g726 mlv sdr2 aix g726le mm sds alp g729 mmf sdx amr gdv mov segafilm amrnb genh mp3 ser amrwb gif mpc shorten anm gsm mpc8 siff apc gxf mpegps sln ape h261 mpegts smacker apm h263 mpegtsraw smjpeg apng h264 mpegvideo smush aptx hca mpjpeg sol aptx_hd hcom mpl2 sox aqtitle hevc mpsub spdif argo_asf hls msf srt asf hnm msnwc_tcp stl asf_o ico mtaf str ass idcin mtv subviewer ast idf musx subviewer1 au iff mv sup av1 ifv mvi svag avi ilbc mxf swf avisynth image2 mxg tak avr image2_alias_pix nc tedcaptions avs image2_brender_pix nistsphere thp avs2 image2pipe nsp threedostr bethsoftvid image_bmp_pipe nsv tiertexseq bfi image_dds_pipe nut tmv bfstm image_dpx_pipe nuv truehd bink image_exr_pipe ogg tta bintext image_gif_pipe oma tty bit image_j2k_pipe paf txd bmv image_jpeg_pipe pcm_alaw ty boa image_jpegls_pipe pcm_f32be v210 brstm image_pam_pipe pcm_f32le v210x c93 image_pbm_pipe pcm_f64be vag caf image_pcx_pipe pcm_f64le vapoursynth cavsvideo image_pgm_pipe pcm_mulaw vc1 cdg image_pgmyuv_pipe pcm_s16be vc1t cdxl image_pictor_pipe pcm_s16le vividas cine image_png_pipe pcm_s24be vivo codec2 image_ppm_pipe pcm_s24le vmd codec2raw image_psd_pipe pcm_s32be vobsub concat image_qdraw_pipe pcm_s32le voc dash image_sgi_pipe pcm_s8 vpk data image_sunrast_pipe pcm_u16be vplayer daud image_svg_pipe pcm_u16le vqf dcstr image_tiff_pipe pcm_u24be w64 derf image_webp_pipe pcm_u24le wav dfa image_xpm_pipe pcm_u32be wc3 dhav image_xwd_pipe pcm_u32le webm_dash_manifest dirac ingenient pcm_u8 webvtt dnxhd ipmovie pcm_vidc wsaud dsf ircam pjs wsd dsicin iss pmp wsvqa dss iv8 pp_bnk wtv dts ivf pva wv dtshd ivr pvf wve dv jacosub qcp xa dvbsub jv r3d xbin dvbtxt kux rawvideo xmv dxa kvag realtext xvag ea libgme redspark xwma ea_cdata libmodplug rl2 yop eac3 libopenmpt rm yuv4mpegpipe epaf live_flv roq ffmetadata lmlm4 rpl

    從上面解封裝又稱為解復用格式的支持信息中可以看到,FFmpeg支持的demuxter非常多,包含圖片image, MP3, FLV, MP4, MOV, AVI等

    • 接下我們可以嘗試輸入:./configure --list-protocols 查看FFmpeg的流媒體協議。(FFmpeg不僅僅支持本地的多媒體處理,而且還支持網絡流媒體的處理):

    從支持的協議列表中可以看到,FFmpeg支持的流媒體協議比較多,包括MMS, HTTP, HTTPS, HLS, RTMP, RTP,甚至支持TCP,UDP,其也支持使用file協議的本地文件操作和使用concat協議支持的多個文件串流操作。

    • 接下我們可以嘗試輸入:./configure --list-hwaccels 查看FFmpeg支持的硬件加速器

    • 接下我們可以嘗試輸入:./configure --list-parsers 查看FFmpeg支持的解析器

    • 接下我們可以嘗試輸入:./configure --list-bsfs 查看FFmpeg支持的字節流過濾器

    • 接下我們可以嘗試輸入:./configure --list-indevs 查看有效的輸入設備

    • 接下我們可以嘗試輸入:./configure --list-outdevs 查看有效的輸出設備

      參考書籍:

    • FFmpeg從入門到精通

    • 音視頻開發進階指南:基于Android與iOS平臺的實踐

    總結

    以上是生活随笔為你收集整理的FFmpeg学习(一)开篇的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。