首页 科技文章正文

psd-408(FFmpeg学习(1)开篇)

科技 2023年12月31日 00:41 726 之乾

FFmpeg学习(1)开篇


FFmpeg学习(2)源码编译,环境配置


为什么要学习FFmpeg


本人希望打算深入研究音视频领域,音视频领域的内容很多,我自己打算从几方面循序渐进:ffmpeg常用功能实践, FFmpeg源码研究, OpenGL, OpenGLES, Metal, AR, WebRTC, 直播架构等方向去研究。

音视频目前主要有哪些应用场景呢?


直播类:音视频会议,教育直播,娱乐/游戏直播等 (例如花椒,映客腾讯课堂腾讯会议斗鱼短视频:抖音,快手,小咖秀等, 这类应用主要是对声音和视频做特殊处理,如声音变声,变调,男声变女声,女声变童声;如视频处理有:美颜,滤镜处理。网络视频优酷腾讯视频爱奇艺等。音视频通话:微信,QQ, Skype等。视频监控网络摄像机IPC等人工智能:人脸识别,智能音箱等,这类应用更关注于算法。

从上面这么多应用场景,我们可以看出音视频技术是多么重要,特别是5G时代,网络传输问题大大提升,更多的音视频需求会爆发出来。


我们可以看一下一个简单播放器的架构,如下图:


音频解码,视频解码一般都用FFmpeg解码,在IOS8 之后提供了VideoToolBox框架支持硬解码。


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


音频视频播放涉及到音视频同步是一个 复杂的技术。
学习一个技术,需要一个高效的方法,只有不断的实践才能理解深刻。学习FFmpeg我们也需要好的文档来学习,下面列举一些必备的学习文档地址:


FFmpeg官方文档:ffmpeg.org/documentati…FFmpeg官方wiki: trac.ffmpeg.org


上述都是英文的文档,如果英文学习困难,可以参考下面的中文资料:


雷霄骅博士总结的资料: blog.csdn.net/leixiaohua1…罗索实验室:www.rosoo.netChinaFFmpeg: http://bbs/chinaffmpeg.com


此外推荐两本非常好的书籍:


FFmpeg从入门到精通音视频开发进阶指南:基于Android与iOS平台的实践

1. FFmpeg简介


FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPLGPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

FFmpeg在
Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括WindowsMac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"

一个伟大的软件产生必定有它的一段传奇历史,FFmpeg的创建者是法国天才程序员Fabrice Bellard (法布里斯*贝拉)在 2000年是开发出初版;


法布里斯*贝拉:


高中就读期间开发了著名的可执行压缩程序LZEXE2000年创建了FFmpeg项目2011年,他用JavaScript写了一个Linux虚拟机(JSLinux)他还是QEMUTinyCC 的作者

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合并一起发展。

相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】


音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发


【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C ,Linux,FFmpeg webRTC RTMP hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~


2. FFmpeg能做什么


多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等视频采集功能: ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

在Linux平台上,
ffmpegV4L2的视频设备提供了很好的支持,如:./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)。

我们先看一下一张FFmpeg的架构图:


下载好的源码,我们也可以看到大概的源码结构:


3. 1 libavutil

libavutil : 包含一些公共的工具函数; AVUtil是FFmepg的核心工具库,该模块是最基础的模块之一,下面的许多其他模块都会依赖该库做一些基本的音视频处理操作。

3. 2 libavformat


libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;AVFormat 是文件格式和协议库,封装了Protocol层和Demuxer,Muxer层,使得协议和格式对于开发者来说是透明的。AVFormat中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如MP4FLVKVTS 等文件封装格式, RTMPRTSPMMSHLS 等网络协议封装格式。

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 s302maac_at dvaudio mp1_at samiaac_fixed dvbsub mp1float sanmaac_latm dvdsub mp2 sbcaasc dvvideo mp2_at scprac3 dxa mp2float screenpressoac3_at dxtory mp3 sdx2_dpcmac3_fixed dxv mp3_at sgiacelp_kelvin eac3 mp3adu sgirleadpcm_4xm eac3_at mp3adufloat sheervideoadpcm_adx eacmv mp3float shortenadpcm_afc eamad mp3on4 sipradpcm_agm eatgq mp3on4float sirenadpcm_aica eatgv mpc7 smackaudadpcm_argo eatqi mpc8 smackeradpcm_ct eightbps mpeg1_cuvid smcadpcm_dtk eightsvx_exp mpeg1_v4l2m2m smvjpegadpcm_ea eightsvx_fib mpeg1video snowadpcm_ea_maxis_xa escape124 mpeg2_crystalhd sol_dpcmadpcm_ea_r1 escape130 mpeg2_cuvid sonicadpcm_ea_r2 evrc mpeg2_mediacodec sp5xadpcm_ea_r3 exr mpeg2_mmal speedhqadpcm_ea_xas ffv1 mpeg2_qsv srgcadpcm_g722 ffvhuff mpeg2_v4l2m2m srtadpcm_g726 ffwavesynth mpeg2video ssaadpcm_g726le fic mpeg4 stladpcm_ima_alp fits mpeg4_crystalhd subripadpcm_ima_amv flac mpeg4_cuvid subvieweradpcm_ima_apc flashsv mpeg4_mediacodec subviewer1adpcm_ima_apm flashsv2 mpeg4_mmal sunrastadpcm_ima_cunning flic mpeg4_v4l2m2m svq1adpcm_ima_dat4 flv mpegvideo svq3adpcm_ima_dk3 fmvc mpl2 takadpcm_ima_dk4 fourxm msa1 targaadpcm_ima_ea_eacs fraps mscc targa_y216adpcm_ima_ea_sead frwu msmpeg4_crystalhd tdscadpcm_ima_iss g2m msmpeg4v1 textadpcm_ima_mtf g723_1 msmpeg4v2 theoraadpcm_ima_oki g729 msmpeg4v3 thpadpcm_ima_qt gdv msrle tiertexseqvideoadpcm_ima_qt_at gif mss1 tiffadpcm_ima_rad gremlin_dpcm mss2 tmvadpcm_ima_smjpeg gsm msvideo1 truehdadpcm_ima_ssi gsm_ms mszh truemotion1adpcm_ima_wav gsm_ms_at mts2 truemotion2adpcm_ima_ws h261 mv30 truemotion2rtadpcm_ms h263 mvc1 truespeechadpcm_mtaf h263_v4l2m2m mvc2 tsccadpcm_psx h263i mvdv tscc2adpcm_sbpro_2 h263p mvha ttaadpcm_sbpro_3 h264 mwsc twinvqadpcm_sbpro_4 h264_crystalhd mxpeg txdadpcm_swf h264_cuvid nellymoser ultiadpcm_thp h264_mediacodec nuv utvideoadpcm_thp_le h264_mmal on2avc v210adpcm_vima h264_qsv opus v210xadpcm_xa h264_rkmpp paf_audio v308adpcm_yamaha h264_v4l2m2m paf_video v408adpcm_zork hap pam v410agm hca pbm vbaic hcom pcm_alaw vblealac hevc pcm_alaw_at vc1alac_at hevc_cuvid pcm_bluray vc1_crystalhdalias_pix hevc_mediacodec pcm_dvd vc1_cuvidals hevc_qsv pcm_f16le vc1_mmalamr_nb_at hevc_rkmpp pcm_f24le vc1_qsvamrnb hevc_v4l2m2m pcm_f32be vc1_v4l2m2mamrwb hnm4_video pcm_f32le vc1imageamv hq_hqa pcm_f64be vcr1anm hqx pcm_f64le vmdaudioansi huffyuv pcm_lxf vmdvideoape hymt pcm_mulaw vmncapng iac pcm_mulaw_at vorbisaptx idcin pcm_s16be vp3aptx_hd idf pcm_s16be_planar vp4arbc iff_ilbm pcm_s16le vp5ass ilbc pcm_s16le_planar vp6asv1 ilbc_at pcm_s24be vp6aasv2 imc pcm_s24daud vp6fatrac1 imm4 pcm_s24le vp7atrac3 imm5 pcm_s24le_planar vp8atrac3al indeo2 pcm_s32be vp8_cuvidatrac3p indeo3 pcm_s32le vp8_mediacodecatrac3pal indeo4 pcm_s32le_planar vp8_qsvatrac9 indeo5 pcm_s64be vp8_rkmppaura interplay_acm pcm_s64le vp8_v4l2m2maura2 interplay_dpcm pcm_s8 vp9avrn interplay_video pcm_s8_planar vp9_cuvidavrp jacosub pcm_u16be vp9_mediacodecavs jpeg2000 pcm_u16le vp9_qsvavui jpegls pcm_u24be vp9_rkmppayuv jv pcm_u24le vp9_v4l2m2mbethsoftvid kgv1 pcm_u32be vplayerbfi kmvc pcm_u32le vqabink lagarith pcm_u8 wavpackbinkaudio_dct libaom_av1 pcm_vidc wcmvbinkaudio_rdft libaribb24 pcx webpbintext libcelt pgm webvttbitpacked libcodec2 pgmyuv wmalosslessbmp libdav1d pgssub wmaprobmv_audio libdavs2 pictor wmav1bmv_video libfdk_aac pixlet wmav2brender_pix libgsm pjs wmavoicec93 libgsm_ms png wmv1cavs libilbc ppm wmv2ccaption libopencore_amrnb prores wmv3cdgraphics libopencore_amrwb prosumer wmv3_crystalhdcdtoons libopenh264 psd wmv3imagecdxl libopenjpeg ptx wnv1cfhd libopus qcelp wrapped_avframecinepak librsvg qdm2 ws_snd1clearvideo libspeex qdm2_at xan_dpcmcljr libvorbis qdmc xan_wc3cllc libvpx_vp8 qdmc_at xan_wc4comfortnoise libvpx_vp9 qdraw xbincook libzvbi_teletext qpeg xbmcpia loco qtrle xfacecscd lscr r10k xlcyuv m101 r210 xma1dca mace3 ra_144 xma2dds mace6 ra_288 xpmderf_dpcm magicyuv ralf xsubdfa mdec rasc xwddirac metasound rawvideo y41pdnxhd microdvd realtext ylcdolby_e mimic rl2 yopdpx mjpeg roq yuv4dsd_lsbf mjpeg_cuvid roq_dpcm zero12vdsd_lsbf_planar mjpeg_qsv rpza zerocodecdsd_msbf mjpegb rscc zlibdsd_msbf_planar mlp rv10 zmbvdsicinaudio mmvideo rv20dsicinvideo motionpixels rv30dss_sp movtext rv40

接下我们可以尝试输入:./configure --list-encoders查看所有编码器


接下我们可以尝试输入:./configure --list-filters查看所有滤镜器


abench colorhold il selectivecolorabitscope colorkey inflate sendcmdacompressor colorkey_opencl interlace separatefieldsacontrast colorlevels interleave setdaracopy colormatrix join setfieldacrossfade colorspace kerndeint setparamsacrossover compand ladspa setptsacrusher compensationdelay lagfun setrangeacue concat lenscorrection setsaraddroi convolution lensfun settbadeclick convolution_opencl libvmaf sharpness_vaapiadeclip convolve life showcqtadelay copy limiter showfreqsaderivative coreimage loop showinfoadrawgraph coreimagesrc loudnorm showpaletteaecho cover_rect lowpass showspatialaemphasis crop lowshelf showspectrumaeval cropdetect lumakey showspectrumpicaevalsrc crossfeed lut showvolumeafade crystalizer lut1d showwavesafftdn cue lut2 showwavespicafftfilt curves lut3d shuffleframesafifo datascope lutrgb shuffleplanesafir dcshift lutyuv sidechaincompressafirsrc dctdnoiz lv2 sidechaingateaformat deband mandelbrot sidedataagate deblock maskedclamp sierpinskiagraphmonitor decimate maskedmax signalstatsahistogram deconvolve maskedmerge signatureaiir dedot maskedmin silencedetectaintegral deesser maskedthreshold silenceremoveainterleave deflate maskfun sincalimiter deflicker mcdeint sineallpass deinterlace_qsv mcompand smartblurallrgb deinterlace_vaapi median smptebarsallyuv dejudder mergeplanes smptehdbarsaloop delogo mestimate sobelalphaextract denoise_vaapi metadata sobel_openclalphamerge derain midequalizer sofalizeramerge deshake minterpolate spectrumsynthametadata deshake_opencl mix splitamix despill movie sppamovie detelecine mpdecimate sramplify dilation mptestsrc ssimamultiply dilation_opencl negate stereo3danequalizer displace nlmeans stereotoolsanlmdn dnn_processing nlmeans_opencl stereowidenanlms doubleweave nnedi streamselectanoisesrc drawbox noformat subtitlesanull drawgraph noise super2xsaianullsink drawgrid normalize superequalizeranullsrc drawtext null surroundapad drmeter nullsink swaprectaperms dynaudnorm nullsrc swapuvaphasemeter earwax ocr tblendaphaser ebur128 ocv telecineapulsator edgedetect openclsrc testsrcarealtime elbg oscilloscope testsrc2aresample entropy overlay thistogramareverse eq overlay_cuda thresholdarnndn equalizer overlay_opencl thumbnailaselect erosion overlay_qsv thumbnail_cudaasendcmd erosion_opencl overlay_vulkan tileasetnsamples extractplanes owdenoise tinterlaceasetpts extrastereo pad tlut2asetrate fade pad_opencl tmedianasettb fftdnoiz pal100bars tmixashowinfo fftfilt pal75bars tonemapasidedata field palettegen tonemap_openclasoftclip fieldhint paletteuse tonemap_vaapiasplit fieldmatch pan tpadasr fieldorder perms transposeass fifo perspective transpose_nppastats fillborders phase transpose_openclastreamselect find_rect photosensitivity transpose_vaapiasubboost firequalizer pixdesctest trebleatadenoise flanger pixscope tremoloatempo flite pp trimatrim floodfill pp7 unpremultiplyavectorscope format premultiply unsharpavgblur fps prewitt unsharp_openclavgblur_opencl framepack prewitt_opencl usppavgblur_vulkan framerate procamp_vaapi v360axcorrelate framestep program_opencl vaguedenoiserazmq freezedetect pseudocolor vectorscopebandpass freezeframes psnr vflipbandreject frei0r pullup vfrdetbass frei0r_src qp vibrancebbox fspp random vibratobench gblur readeia608 vidstabdetectbilateral geq readvitc vidstabtransformbiquad gradfun realtime vignettebitplanenoise graphmonitor remap vmafmotionblackdetect greyedge removegrain volumeblackframe haas removelogo volumedetectblend haldclut repeatfields vpp_qsvbm3d haldclutsrc replaygain vstackboxblur hdcd resample w3fdifboxblur_opencl headphone reverse waveformbs2b hflip rgbashift weavebwdif highpass rgbtestsrc xbrcas highshelf roberts xfadecellauto hilbert roberts_opencl xfade_openclchannelmap histeq rotate xmedianchannelsplit histogram rubberband xstackchorus hqdn3d sab yadifchromaber_vulkan hqx scale yadif_cudachromahold hstack scale2ref yaepblurchromakey hue scale_cuda yuvtestsrcchromashift hwdownload scale_npp zmqciescope hwmap scale_qsv zoompancodecview hwupload scale_vaapi zscalecolor hwupload_cuda scale_vulkancolorbalance hysteresis scrollcolorchannelmixer 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 rsdaac fits lrc rsoac3 flac lvf rtpacm flic lxf rtspact flv m4v s337madf fourxm matroska samiadp frm mgsts sapads fsb microdvd sbcadx fwse mjpeg sbgaea g722 mjpeg_2000 sccafc g723_1 mlp sdpaiff g726 mlv sdr2aix g726le mm sdsalp g729 mmf sdxamr gdv mov segafilmamrnb genh mp3 seramrwb gif mpc shortenanm gsm mpc8 siffapc gxf mpegps slnape h261 mpegts smackerapm h263 mpegtsraw smjpegapng h264 mpegvideo smushaptx hca mpjpeg solaptx_hd hcom mpl2 soxaqtitle hevc mpsub spdifargo_asf hls msf srtasf hnm msnwc_tcp stlasf_o ico mtaf strass idcin mtv subviewerast idf musx subviewer1au iff mv supav1 ifv mvi svagavi ilbc mxf swfavisynth image2 mxg takavr image2_alias_pix nc tedcaptionsavs image2_brender_pix nistsphere thpavs2 image2pipe nsp threedostrbethsoftvid image_bmp_pipe nsv tiertexseqbfi image_dds_pipe nut tmvbfstm image_dpx_pipe nuv truehdbink image_exr_pipe ogg ttabintext image_gif_pipe oma ttybit image_j2k_pipe paf txdbmv image_jpeg_pipe pcm_alaw tyboa image_jpegls_pipe pcm_f32be v210brstm image_pam_pipe pcm_f32le v210xc93 image_pbm_pipe pcm_f64be vagcaf image_pcx_pipe pcm_f64le vapoursynthcavsvideo image_pgm_pipe pcm_mulaw vc1cdg image_pgmyuv_pipe pcm_s16be vc1tcdxl image_pictor_pipe pcm_s16le vividascine image_png_pipe pcm_s24be vivocodec2 image_ppm_pipe pcm_s24le vmdcodec2raw image_psd_pipe pcm_s32be vobsubconcat image_qdraw_pipe pcm_s32le vocdash image_sgi_pipe pcm_s8 vpkdata image_sunrast_pipe pcm_u16be vplayerdaud image_svg_pipe pcm_u16le vqfdcstr image_tiff_pipe pcm_u24be w64derf image_webp_pipe pcm_u24le wavdfa image_xpm_pipe pcm_u32be wc3dhav image_xwd_pipe pcm_u32le webm_dash_manifestdirac ingenient pcm_u8 webvttdnxhd ipmovie pcm_vidc wsauddsf ircam pjs wsddsicin iss pmp wsvqadss iv8 pp_bnk wtvdts ivf pva wvdtshd ivr pvf wvedv jacosub qcp xadvbsub jv r3d xbindvbtxt kux rawvideo xmvdxa kvag realtext xvagea libgme redspark xwmaea_cdata libmodplug rl2 yopeac3 libopenmpt rm yuv4mpegpipeepaf live_flv roqffmetadata lmlm4 rpl

从上面解封装又称为解复用格式的支持信息中可以看到,FFmpeg支持的demuxter非常多,包含图片image, MP3, FLV, MP4, MOV, AVI


接下我们可以尝试输入:./configure --list-protocols 查看FFmpeg的流媒体协议。(FFmpeg不仅仅支持本地的多媒体处理,而且还支持网络流媒体的处理):

从支持的协议列表中可以看到,FFmpeg支持的流媒体协议比较多,包括MMS, HTTP, HTTPS, HLS, RTMP, RTP,甚至支持TCPUDP,其也支持使用file协议的本地文件操作和使用concat协议支持的多个文件串流操作。


接下我们可以尝试输入:./configure --list-hwaccels 查看FFmpeg支持的硬件加速器

接下我们可以尝试输入:./configure --list-parsers 查看FFmpeg支持的解析器


接下我们可以尝试输入:./configure --list-bsfs 查看FFmpeg支持的字节流过滤器


接下我们可以尝试输入:./configure --list-indevs查看有效的输入设备


接下我们可以尝试输入:./configure --list-outdevs查看有效的输出设备


参考书籍:FFmpeg从入门到精通音视频开发进阶指南:基于Android与iOS平台的实践

原文 FFmpeg学习(1)开篇 - 掘金


中盟盛世科技网 网站地图 免责声明:本网站部分内容由用户自行上传,若侵犯了您的权益,请联系我们处理,联系QQ:2760375052 版权所有:中盟盛世科技网:沪ICP备2023024865号-1