赞
踩
当下直播应用很火,在音视频领域,FFmpeg相当知名。可能你用的一些视频播放器背后都有它的身影。FFmpeg是一个开源的跨平台多媒体处理工具,可以用于处理音视频流、转码、封装、解封装等操作,且支持多种格式和协议。它的视频采集功能也非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,且支持直播应用。
1. 转码:将一种格式的音视频文件转换为另一种格式,例如将MP4文件转换为AVI文件,或将H.264编码的视频转换为VP9编码的视频等。(解码,音视频播放器内核)
2. 剪辑:从一个音视频文件中截取出一段或多段内容,例如将一个长视频剪辑成多个短视频,或将一段音频剪辑出来作为铃声等。
3. 抓取:从摄像头或屏幕等设备中抓取音视频流,例如将摄像头的视频流抓取下来进行录制或直播等。(音视频采集)
4. 处理:对音视频流进行处理,例如添加水印、字幕、特效等,或进行降噪、去抖动、降低码率等处理。
5. 分离和合并:将一个音视频文件中的音频和视频分离出来,或将多个音视频文件合并成一个文件。(格式转换)
6. 直播:将音视频流实时推送到服务器上,或从服务器上拉取音视频流进行实时播放。
举例:在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文件上传到流媒体服务器(如live555)就可以实现直播了。
FFmpeg提供了libavformat库,其中包含了RTSP协议的实现,可以直接使用该库来拉取RTSP流。在使用FFmpeg拉取RTSP流时,可以使用类似如下的命令:
ffmpeg -i rtsp://xxx.xxx.xxx.xxx/xxx -c copy output.mp4
其中, rtsp://xxx.xxx.xxx.xxx/xxx 是RTSP流的URL地址, -c copy
表示直接复制流数据,不进行编解码, output.mp4
是输出文件名。除了命令行方式,FFmpeg还提供了API接口,可以在程序中使用该接口来拉取RTSP流。
总之,FFmpeg是一个功能强大的多媒体处理工具,可以用于处理各种音视频文件,提供了丰富的功能和API,可以满足各种多媒体处理需求。
GitHub - FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源工具组合。
它包含一系列的模块。
1. libavcodec:音视频编解码库,提供了多种编解码器,可以支持多种音视频格式的编解码操作。
2. libavformat:音视频封装和解封装库,提供了多种封装格式的支持,可以读取和写入多种音视频文件格式。
3. libavfilter:音视频过滤器库,提供了多种音视频过滤器,可以对音视频流进行各种处理,如添加水印、调整亮度、对比度等。
4. libavdevice:音视频输入输出设备库,提供了多种输入输出设备的支持,如摄像头、麦克风等。
5. libswscale:视频图像缩放库,提供了多种图像缩放算法,可以对视频图像进行缩放操作。
6. libswresample:音频重采样库,提供了多种音频重采样算法,可以对音频进行重采样操作。
7.libavutil:包含一些公共的工具函数。
8. libswscale:用于视频场景比例缩放、色彩映射转换。
9.libpostproc:用于后期效果处理。
10.ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等。
11.ffsever:一个 HTTP 多媒体即时广播串流服务器。
12.ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示。
这些模块可以单独使用,也可以组合使用,实现各种音视频处理操作。例如,可以使用libavcodec进行音视频编解码,使用libavformat进行音视频封装和解封装,使用libavfilter进行音视频过滤操作等。FFmpeg提供了丰富的模块组合。
以下是使用ffmpeg编译的步骤:
1.首先,您需要下载ffmpeg的源代码。您可以从官方网站(https://ffmpeg.org/download.html)下载最新版本的源代码。
2. 下载完成后,您需要解压缩源代码。可以使用以下命令解压缩: tar -zxvf ffmpeg-xxx.tar.gz 其中,xxx是ffmpeg版本号。
3. 接下来,您需要安装一些编译工具和依赖库。您可以使用以下命令安装: sudo apt-get install build-essential sudo apt-get install libmp3lame-dev libx264-dev libopus-dev libvpx-dev libssl-dev
4. 安装完成后,您可以进入解压缩后的ffmpeg目录,并使用以下命令编译: ./configure --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libopus --enable-libvpx --enable-openssl
make, make install
以上命令将启用一些常用的编解码器和库,如MP3、H.264、Opus和VP8/VP9。如果您需要其他功能,请查看ffmpeg文档并相应地配置。libopus是一个开源的音频编解码器,它提供了高质量的语音和音乐编码。libvpx是一个开源的视频编解码器,它提供了高质量的视频编码和解码。它们都是在ffmpeg中支持的编解码器之一。 libssl是一个加密库,它提供了安全的套接字层(SSL)和传输层安全(TLS)协议的实现。在ffmpeg中使用libssl可以支持HTTPS协议。 如果您需要支持HTTPS协议,则需要安装libssl。如果您不需要支持HTTPS协议,则可以不安装libssl。
5. 编译完成后,您可以使用以下命令验证是否成功安装: ffmpeg -version 如果成功安装,将显示ffmpeg的版本信息。
注:(视频用 libx264,音频用 libmp3lame。但是基于默认配置而编译的 ffmpeg 不包含这俩编码器,他们属于第三方编码器,linux的x64直接sudo安装依赖即可,但若交叉编译,则需要自己下载这俩编码器的源码,自己先编译成库供FFmpeg使用。)
lame:
官网在这里 https://lame.sourceforge.io/
页面链接到这里:https://sourceforge.net/projects/lame/files/lame/
本人下载的版本是 3.100 ( lame-3.100.tar.gz )
x264:
通过 git 克隆一份
git clone http://git.videolan.org/git/x264.git
以下使用的FFmpeg,用的 ffmpeg 4.4版本为例。
fmpeg的常用编译参数如下:
- --enable-shared:启用共享库的编译,生成.so文件,可以被其他程序调用。
- --enable-static:启用静态库的编译,生成.a文件,可以被其他程序静态链接。 - --enable-gpl:启用GPL许可证的代码。
- --enable-version3:启用LGPLv3许可证的代码。
- --enable-libx264:启用x264编解码器。
- --enable-libx265:启用x265编解码器。
- --enable-libvpx:启用VP8/VP9编解码器。
- --enable-libopus:启用Opus编解码器。
- --enable-libmp3lame:启用MP3编码器。
- --enable-libfdk-aac:启用AAC编码器。
- --enable-libvorbis:启用Vorbis编码器。
- --enable-libtheora:启用Theora编码器。
- --disable-yasm:禁用yasm汇编优化。
- --disable-asm:禁用汇编优化。
其中,--enable-shared、--enable-static、--enable-gpl、--enable-version3、--disable-yasm这些选项是比较重要的。
如果需要使用x264、x265、VP8/VP9、Opus等编解码器,则需要启用相应的选项。如果需要精简体积和提高速度,可以禁用一些不必要的编解码器和过滤器,例如--disable-libvpx、--disable-libtheora等。但是,禁用汇编优化可能会影响编解码性能,因此x86或x64下不建议禁用汇编优化。若是嵌入式平台移植需要,则需要禁用汇编。
配置参数
- #!/bin/sh
-
- ../ffmpeg-4.4/configure \
- --prefix=`pwd`/../ffmpegbuild \
- --target-os=linux
- --arch=x86_64
- --enable-gpl \
- --enable-version3 \
- --disable-stripping \
- --disable-asm \
- --enable-shared \
- --enable-libmp3lame \
- --extra-cflags="-I`pwd`/../lamebuild/include" \
- --extra-ldflags="-LIBPATH:`pwd`/../lamebuild/lib" \
- --enable-libx264 \
- --extra-cflags="-I`pwd`/../x264build/include" \
- --extra-ldflags="-LIBPATH:`pwd`/../x264build/lib"
-
- make -j6 && make install && echo OOOOOOOOKKKKKKKKKKKKKK!!!!!!!!!!
注:--enable-gpl含义,该选项启用了GPL许可证的代码。--enable-version3选项是与--enable-gpl选项相关的。如果您启用了--enable-gpl选项,那么您可以选择启用--enable-version3选项,以允许使用LGPLv3许可证的代码。LGPLv3是一种自由软件许可证,它比GPLv2更严格,并且允许链接到不同的库。如果您不启用--enable-version3选项,则只能使用LGPLv2.1许可证的代码。
如果不启用--enable-gpl和--enable-version3选项,您仍然可以编译成功,但将无法使用一些GPL许可证或LGPLv3许可证的代码,例如x264、x265、libvpx等编解码器和一些过滤器。这意味着您将无法进行H.264、H.265等常见的视频编码和解码,也无法应用某些过滤器。 如果您只需要使用一些基本的编解码器和过滤器,那么禁用--enable-gpl和--enable-version3选项可能不会对您的应用程序造成太大影响。但是,如果您需要使用某些高级编解码器或过滤器,则必须启用这些选项以便使用它们。此外,如果您使用了启用了GPL许可证的代码,那么您的代码也必须使用GPL许可证发布。
--extra-cflags、 --extra-ldflags 是显示指示模块的头文件与库文件的位置。
--extra-libs 是指定链接到哪个库文件,如果不指定,应该是使用在配置文件里已经设置了的默认值。
在x64平台西编译很简单,安装两个依赖库:
- sudo apt-get install libx264-dev
- sudo apt-get install libmp3lame-dev
执行configure配置:
root@hecs-287347:~/test/ffmpeg/ffmpeg-4.4.4$ ./configure --prefix=../ffmpegbuild --enable-shared --enable-libmp3lame --enable-libx264 --enable-gpl --disable-asm --enable-version3
如果要支持alsa声卡设备,还需要安装依赖:sudo apt-get install libasound-dev
并增加配置选项:--enable-alsa:开启ALSA音频驱动程序支持;
如果要想生成ffplay,需要SDL2库的支持。sudo apt-get install libsdl2-dev
日志:
-
- root@hecs-287347:~/test/ffmpeg/ffmpeg-4.4.4#
- root@hecs-287347:~/test/ffmpeg/ffmpeg-4.4.4# ./configure --prefix=../ffmpegbuild --enable-shared --enable-libmp3lame --e nable-libx264 --enable-gpl --disable-asm --enable-version3
- install prefix ../ffmpegbuild
- source path .
- C compiler gcc
- C library glibc
- ARCH c (generic)
- big-endian no
- runtime cpu detection yes
- debug symbols yes
- strip symbols yes
- optimize for size no
- optimizations yes
- static yes
- shared yes
- postprocessing support yes
- network support yes
- threading support pthreads
- safe bitstream reader yes
- texi2html enabled no
- perl enabled yes
- pod2man enabled yes
- makeinfo enabled no
- makeinfo supports HTML no
-
- External libraries:
- iconv libmp3lame libx264 zlib
-
- External libraries providing hardware acceleration:
- v4l2_m2m
-
- Libraries:
- avcodec avfilter avutil swresample
- avdevice avformat postproc swscale
-
- Programs:
- ffmpeg ffprobe
-
- Enabled decoders:
- aac bitpacked huffyuv pcm_f32le subrip
- aac_fixed bmp hymt pcm_f64be subviewer
- aac_latm bmv_audio iac pcm_f64le subviewer1
- aasc bmv_video idcin pcm_lxf sunrast
- ac3 brender_pix idf pcm_mulaw svq1
- ac3_fixed c93 iff_ilbm pcm_s16be svq3
- acelp_kelvin cavs ilbc pcm_s16be_planar tak
- adpcm_4xm ccaption imc pcm_s16le targa
- adpcm_adx cdgraphics imm4 pcm_s16le_planar targa_y216
- adpcm_afc cdtoons imm5 pcm_s24be tdsc
- adpcm_agm cdxl indeo2 pcm_s24daud text
- adpcm_aica cfhd indeo3 pcm_s24le theora
- adpcm_argo cinepak indeo4 pcm_s24le_planar thp
- adpcm_ct clearvideo indeo5 pcm_s32be tiertexseqvideo
- adpcm_dtk cljr interplay_acm pcm_s32le tiff
- adpcm_ea cllc interplay_dpcm pcm_s32le_planar tmv
- adpcm_ea_maxis_xa comfortnoise interplay_video pcm_s64be truehd
- adpcm_ea_r1 cook ipu pcm_s64le truemotion1
- adpcm_ea_r2 cpia jacosub pcm_s8 truemotion2
- adpcm_ea_r3 cri jpeg2000 pcm_s8_planar truemotion2rt
- adpcm_ea_xas cscd jpegls pcm_sga truespeech
- adpcm_g722 cyuv jv pcm_u16be tscc
- adpcm_g726 dca kgv1 pcm_u16le tscc2
- adpcm_g726le dds kmvc pcm_u24be tta
- adpcm_ima_alp derf_dpcm lagarith pcm_u24le twinvq
- adpcm_ima_amv dfa loco pcm_u32be txd
- adpcm_ima_apc dirac lscr pcm_u32le ulti
- adpcm_ima_apm dnxhd m101 pcm_u8 utvideo
- adpcm_ima_cunning dolby_e mace3 pcm_vidc v210
- adpcm_ima_dat4 dpx mace6 pcx v210x
- adpcm_ima_dk3 dsd_lsbf magicyuv pfm v308
- adpcm_ima_dk4 dsd_lsbf_planar mdec pgm v408
- adpcm_ima_ea_eacs dsd_msbf metasound pgmyuv v410
- adpcm_ima_ea_sead dsd_msbf_planar microdvd pgssub vb
- adpcm_ima_iss dsicinaudio mimic pgx vble
- adpcm_ima_moflex dsicinvideo mjpeg photocd vc1
- adpcm_ima_mtf dss_sp mjpegb pictor vc1_v4l2m2m
- adpcm_ima_oki dst mlp pixlet vc1image
- adpcm_ima_qt dvaudio mmvideo pjs vcr1
- adpcm_ima_rad dvbsub mobiclip png vmdaudio
- adpcm_ima_smjpeg dvdsub motionpixels ppm vmdvideo
- adpcm_ima_ssi dvvideo movtext prores vmnc
- adpcm_ima_wav dxa mp1 prosumer vorbis
- adpcm_ima_ws dxtory mp1float psd vp3
- adpcm_ms dxv mp2 ptx vp4
- adpcm_mtaf eac3 mp2float qcelp vp5
- adpcm_psx eacmv mp3 qdm2 vp6
- adpcm_sbpro_2 eamad mp3adu qdmc vp6a
- adpcm_sbpro_3 eatgq mp3adufloat qdraw vp6f
- adpcm_sbpro_4 eatgv mp3float qpeg vp7
- adpcm_swf eatqi mp3on4 qtrle vp8
- adpcm_thp eightbps mp3on4float r10k vp8_v4l2m2m
- adpcm_thp_le eightsvx_exp mpc7 r210 vp9
- adpcm_vima eightsvx_fib mpc8 ra_144 vp9_v4l2m2m
- adpcm_xa escape124 mpeg1_v4l2m2m ra_288 vplayer
- adpcm_yamaha escape130 mpeg1video ralf vqa
- adpcm_zork evrc mpeg2_v4l2m2m rasc wavpack
- agm exr mpeg2video rawvideo wcmv
- aic fastaudio mpeg4 realtext webp
- alac ffv1 mpeg4_v4l2m2m rl2 webvtt
- alias_pix ffvhuff mpegvideo roq wmalossless
- als ffwavesynth mpl2 roq_dpcm wmapro
- amrnb fic msa1 rpza wmav1
- amrwb fits mscc rscc wmav2
- amv flac msmpeg4v1 rv10 wmavoice
- anm flashsv msmpeg4v2 rv20 wmv1
- ansi flashsv2 msmpeg4v3 rv30 wmv2
- ape flic msp2 rv40 wmv3
- apng flv msrle s302m wmv3image
- aptx fmvc mss1 sami wnv1
- aptx_hd fourxm mss2 sanm wrapped_avframe
- arbc fraps msvideo1 sbc ws_snd1
- argo frwu mszh scpr xan_dpcm
- ass g2m mts2 screenpresso xan_wc3
- asv1 g723_1 mv30 sdx2_dpcm xan_wc4
- asv2 g729 mvc1 sga xbin
- atrac1 gdv mvc2 sgi xbm
- atrac3 gif mvdv sgirle xface
- atrac3al gremlin_dpcm mvha sheervideo xl
- atrac3p gsm mwsc shorten xma1
- atrac3pal gsm_ms mxpeg simbiosis_imx xma2
- atrac9 h261 nellymoser sipr xpm
- aura h263 notchlc siren xsub
- aura2 h263_v4l2m2m nuv smackaud xwd
- av1 h263i on2avc smacker y41p
- avrn h263p opus smc ylc
- avrp h264 paf_audio smvjpeg yop
- avs h264_v4l2m2m paf_video snow yuv4
- avui hap pam sol_dpcm zero12v
- ayuv hca pbm sonic zerocodec
- bethsoftvid hcom pcm_alaw sp5x zlib
- bfi hevc pcm_bluray speedhq zmbv
- bink hevc_v4l2m2m pcm_dvd srgc
- binkaudio_dct hnm4_video pcm_f16le srt
- binkaudio_rdft hq_hqa pcm_f24le ssa
- bintext hqx pcm_f32be stl
-
- Enabled encoders:
- a64multi comfortnoise mp2 pcm_u16be ssa
- a64multi5 dca mp2fixed pcm_u16le subrip
- aac dnxhd mpeg1video pcm_u24be sunrast
- ac3 dpx mpeg2video pcm_u24le svq1
- ac3_fixed dvbsub mpeg4 pcm_u32be targa
- adpcm_adx dvdsub mpeg4_v4l2m2m pcm_u32le text
- adpcm_argo dvvideo msmpeg4v2 pcm_u8 tiff
- adpcm_g722 eac3 msmpeg4v3 pcm_vidc truehd
- adpcm_g726 exr msvideo1 pcx tta
- adpcm_g726le ffv1 nellymoser pfm ttml
- adpcm_ima_alp ffvhuff opus pgm utvideo
- adpcm_ima_amv fits pam pgmyuv v210
- adpcm_ima_apm flac pbm png v308
- adpcm_ima_qt flashsv pcm_alaw ppm v408
- adpcm_ima_ssi flashsv2 pcm_dvd prores v410
- adpcm_ima_wav flv pcm_f32be prores_aw vc2
- adpcm_ms g723_1 pcm_f32le prores_ks vorbis
- adpcm_swf gif pcm_f64be qtrle vp8_v4l2m2m
- adpcm_yamaha h261 pcm_f64le r10k wavpack
- alac h263 pcm_mulaw r210 webvtt
- alias_pix h263_v4l2m2m pcm_s16be ra_144 wmav1
- amv h263p pcm_s16be_planar rawvideo wmav2
- apng h264_v4l2m2m pcm_s16le roq wmv1
- aptx hevc_v4l2m2m pcm_s16le_planar roq_dpcm wmv2
- aptx_hd huffyuv pcm_s24be rpza wrapped_avframe
- ass jpeg2000 pcm_s24daud rv10 xbm
- asv1 jpegls pcm_s24le rv20 xface
- asv2 libmp3lame pcm_s24le_planar s302m xsub
- avrp libx264 pcm_s32be sbc xwd
- avui libx264rgb pcm_s32le sgi y41p
- ayuv ljpeg pcm_s32le_planar snow yuv4
- bmp magicyuv pcm_s64be sonic zlib
- cfhd mjpeg pcm_s64le sonic_ls zmbv
- cinepak mlp pcm_s8 speedhq
- cljr movtext pcm_s8_planar srt
-
- Enabled hwaccels:
-
- Enabled parsers:
- aac dca g729 mpeg4video vc1
- aac_latm dirac gif mpegaudio vorbis
- ac3 dnxhd gsm mpegvideo vp3
- adx dolby_e h261 opus vp8
- av1 dpx h263 png vp9
- avs2 dvaudio h264 pnm webp
- avs3 dvbsub hevc rv30 xbm
- bmp dvd_nav ipu rv40 xma
- cavsvideo dvdsub jpeg2000 sbc
- cook flac mjpeg sipr
- cri g723_1 mlp tak
-
- Enabled demuxers:
- aa dirac image_pgm_pipe mtv segafilm
- aac dnxhd image_pgmyuv_pipe musx ser
- aax dsf image_pgx_pipe mv sga
- ac3 dsicin image_photocd_pipe mvi shorten
- ace dss image_pictor_pipe mxf siff
- acm dts image_png_pipe mxg simbiosis_imx
- act dtshd image_ppm_pipe nc sln
- adf dv image_psd_pipe nistsphere smacker
- adp dvbsub image_qdraw_pipe nsp smjpeg
- ads dvbtxt image_sgi_pipe nsv smush
- adx dxa image_sunrast_pipe nut sol
- aea ea image_svg_pipe nuv sox
- afc ea_cdata image_tiff_pipe obu spdif
- aiff eac3 image_webp_pipe ogg srt
- aix epaf image_xbm_pipe oma stl
- alp ffmetadata image_xpm_pipe paf str
- amr filmstrip image_xwd_pipe pcm_alaw subviewer
- amrnb fits ingenient pcm_f32be subviewer1
- amrwb flac ipmovie pcm_f32le sup
- anm flic ipu pcm_f64be svag
- apc flv ircam pcm_f64le svs
- ape fourxm iss pcm_mulaw swf
- apm frm iv8 pcm_s16be tak
- apng fsb ivf pcm_s16le tedcaptions
- aptx fwse ivr pcm_s24be thp
- aptx_hd g722 jacosub pcm_s24le threedostr
- aqtitle g723_1 jv pcm_s32be tiertexseq
- argo_asf g726 kux pcm_s32le tmv
- argo_brp g726le kvag pcm_s8 truehd
- asf g729 live_flv pcm_u16be tta
- asf_o gdv lmlm4 pcm_u16le tty
- ass genh loas pcm_u24be txd
- ast gif lrc pcm_u24le ty
- au gsm luodat pcm_u32be v210
- av1 gxf lvf pcm_u32le v210x
- avi h261 lxf pcm_u8 vag
- avr h263 m4v pcm_vidc vc1
- avs h264 matroska pjs vc1t
- avs2 hca mca pmp vividas
- avs3 hcom mcc pp_bnk vivo
- bethsoftvid hevc mgsts pva vmd
- bfi hls microdvd pvf vobsub
- bfstm hnm mjpeg qcp voc
- bink ico mjpeg_2000 r3d vpk
- binka idcin mlp rawvideo vplayer
- bintext idf mlv realtext vqf
- bit iff mm redspark w64
- bmv ifv mmf rl2 wav
- boa ilbc mods rm wc3
- brstm image2 moflex roq webm_dash_manifest
- c93 image2_alias_pix mov rpl webvtt
- caf image2_brender_pix mp3 rsd wsaud
- cavsvideo image2pipe mpc rso wsd
- cdg image_bmp_pipe mpc8 rtp wsvqa
- cdxl image_cri_pipe mpegps rtsp wtv
- cine image_dds_pipe mpegts s337m wv
- codec2 image_dpx_pipe mpegtsraw sami wve
- codec2raw image_exr_pipe mpegvideo sap xa
- concat image_gif_pipe mpjpeg sbc xbin
- data image_j2k_pipe mpl2 sbg xmv
- daud image_jpeg_pipe mpsub scc xvag
- dcstr image_jpegls_pipe msf sdp xwma
- derf image_pam_pipe msnwc_tcp sdr2 yop
- dfa image_pbm_pipe msp sds yuv4mpegpipe
- dhav image_pcx_pipe mtaf sdx
-
- Enabled muxers:
- a64 eac3 jacosub oma segafilm
- ac3 f4v kvag opus segment
- adts ffmetadata latm pcm_alaw singlejpeg
- adx fifo lrc pcm_f32be smjpeg
- aiff fifo_test m4v pcm_f32le smoothstreaming
- alp filmstrip matroska pcm_f64be sox
- amr fits matroska_audio pcm_f64le spdif
- amv flac md5 pcm_mulaw spx
- apm flv microdvd pcm_s16be srt
- apng framecrc mjpeg pcm_s16le stream_segment
- aptx framehash mkvtimestamp_v2 pcm_s24be streamhash
- aptx_hd framemd5 mlp pcm_s24le sup
- argo_asf g722 mmf pcm_s32be swf
- asf g723_1 mov pcm_s32le tee
- asf_stream g726 mp2 pcm_s8 tg2
- ass g726le mp3 pcm_u16be tgp
- ast gif mp4 pcm_u16le truehd
- au gsm mpeg1system pcm_u24be tta
- avi gxf mpeg1vcd pcm_u24le ttml
- avm2 h261 mpeg1video pcm_u32be uncodedframecrc
- avs2 h263 mpeg2dvd pcm_u32le vc1
- bit h264 mpeg2svcd pcm_u8 vc1t
- caf hash mpeg2video pcm_vidc voc
- cavsvideo hds mpeg2vob psp w64
- codec2 hevc mpegts rawvideo wav
- codec2raw hls mpjpeg rm webm
- crc ico mxf roq webm_chunk
- dash ilbc mxf_d10 rso webm_dash_manifest
- data image2 mxf_opatom rtp webp
- daud image2pipe null rtp_mpegts webvtt
- dirac ipod nut rtsp wtv
- dnxhd ircam oga sap wv
- dts ismv ogg sbc yuv4mpegpipe
- dv ivf ogv scc
-
- Enabled protocols:
- async file icecast rtmp tee
- cache ftp md5 rtmpt udp
- concat gopher mmsh rtp udplite
- crypto hls mmst srtp unix
- data http pipe subfile
- ffrtmphttp httpproxy prompeg tcp
-
- Enabled filters:
- abench avectorscope epx mcdeint showwaves
- abitscope avgblur eq mcompand showwavespic
- acompressor axcorrelate equalizer median shuffleframes
- acontrast bandpass erosion mergeplanes shufflepixels
- acopy bandreject estdif mestimate shuffleplanes
- acrossfade bass exposure metadata sidechaincompress
- acrossover bbox extractplanes midequalizer sidechaingate
- acrusher bench extrastereo minterpolate sidedata
- acue bilateral fade mix sierpinski
- addroi biquad fftdnoiz monochrome signalstats
- adeclick bitplanenoise fftfilt movie signature
- adeclip blackdetect field mpdecimate silencedetect
- adelay blackframe fieldhint mptestsrc silenceremove
- adenorm blend fieldmatch msad sinc
- aderivative bm3d fieldorder negate sine
- adrawgraph boxblur fifo nlmeans smartblur
- aecho bwdif fillborders nnedi smptebars
- aemphasis cas find_rect noformat smptehdbars
- aeval cellauto firequalizer noise sobel
- aevalsrc channelmap flanger normalize spectrumsynth
- aexciter channelsplit floodfill null speechnorm
- afade chorus format nullsink split
- afftdn chromahold fps nullsrc spp
- afftfilt chromakey framepack oscilloscope sr
- afifo chromanr framerate overlay ssim
- afir chromashift framestep owdenoise stereo3d
- afirsrc ciescope freezedetect pad stereotools
- aformat codecview freezeframes pal100bars stereowiden
- afreqshift color fspp pal75bars streamselect
- agate colorbalance gblur palettegen super2xsai
- agraphmonitor colorchannelmixer geq paletteuse superequalizer
- ahistogram colorcontrast gradfun pan surround
- aiir colorcorrect gradients perms swaprect
- aintegral colorhold graphmonitor perspective swapuv
- ainterleave colorize greyedge phase tblend
- alimiter colorkey haas photosensitivity telecine
- allpass colorlevels haldclut pixdesctest testsrc
- allrgb colormatrix haldclutsrc pixscope testsrc2
- allyuv colorspace hdcd pp thistogram
- aloop colortemperature headphone pp7 threshold
- alphaextract compand hflip premultiply thumbnail
- alphamerge compensationdelay highpass prewitt tile
- amerge concat highshelf pseudocolor tinterlace
- ametadata convolution hilbert psnr tlut2
- amix convolve histeq pullup tmedian
- amovie copy histogram qp tmidequalizer
- amplify cover_rect hqdn3d random tmix
- amultiply crop hqx readeia608 tonemap
- anequalizer cropdetect hstack readvitc tpad
- anlmdn crossfeed hue realtime transpose
- anlms crystalizer hwdownload remap treble
- anoisesrc cue hwmap removegrain tremolo
- anull curves hwupload removelogo trim
- anullsink datascope hysteresis repeatfields unpremultiply
- anullsrc dblur identity replaygain unsharp
- apad dcshift idet reverse untile
- aperms dctdnoiz il rgbashift uspp
- aphasemeter deband inflate rgbtestsrc v360
- aphaser deblock interlace roberts vaguedenoiser
- aphaseshift decimate interleave rotate vectorscope
- apulsator deconvolve join sab vflip
- arealtime dedot kerndeint scale vfrdet
- aresample deesser kirsch scale2ref vibrance
- areverse deflate lagfun scdet vibrato
- arnndn deflicker lenscorrection scroll vif
- aselect dejudder life select vignette
- asendcmd delogo limiter selectivecolor vmafmotion
- asetnsamples derain loop sendcmd volume
- asetpts deshake loudnorm separatefields volumedetect
- asetrate despill lowpass setdar vstack
- asettb detelecine lowshelf setfield w3fdif
- ashowinfo dilation lumakey setparams waveform
- asidedata displace lut setpts weave
- asoftclip dnn_processing lut1d setrange xbr
- asplit doubleweave lut2 setsar xfade
- astats drawbox lut3d settb xmedian
- astreamselect drawgraph lutrgb shear xstack
- asubboost drawgrid lutyuv showcqt yadif
- asubcut drmeter mandelbrot showfreqs yaepblur
- asupercut dynaudnorm maskedclamp showinfo yuvtestsrc
- asuperpass earwax maskedmax showpalette zoompan
- asuperstop ebur128 maskedmerge showspatial
- atadenoise edgedetect maskedmin showspectrum
- atempo elbg maskedthreshold showspectrumpic
- atrim entropy maskfun showvolume
-
- Enabled bsfs:
- aac_adtstoasc extract_extradata imx_dump_header null truehd_core
- av1_frame_merge filter_units mjpeg2jpeg opus_metadata vp9_metadata
- av1_frame_split h264_metadata mjpega_dump_header pcm_rechunk vp9_raw_reorder
- av1_metadata h264_mp4toannexb mov2textsub prores_metadata vp9_superframe
- chomp h264_redundant_pps mp3_header_decompress remove_extradata vp9_superframe_split
- dca_core hapqa_extract mpeg2_metadata setts
- dump_extradata hevc_metadata mpeg4_unpack_bframes text2movsub
- eac3_core hevc_mp4toannexb noise trace_headers
-
- Enabled indevs:
- fbdev lavfi oss v4l2
-
- Enabled outdevs:
- fbdev oss v4l2
-
- License: GPL version 3 or later
-
- WARNING: pkg-config not found, library detection may fail.
- WARNING: using libx264 without pkg-config
交叉编译工具链,环境变量配置:
- echo $PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
- root@hecs-287347:/opt/arm/gcctools/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin# export PATH=$PATH:$(pwd)
在sourceforge下载最新版本,我下载的版本是3.100。
./configure --host=arm-linux-gnueabihf --prefix=$(pwd)../lamebuild cc=arm-fsl-linux-gnueabi-gcc --disable-frontend
你以为这就正常了吗?注意这个有个坑啊,指定的cc=无效,指定的--host才是交叉工具链的前缀。我的工具链是arm-fsl-linux-gnueabi-gcc,所以--host需要改为如下:
./configure --host=arm-fsl-linux-gnueabi --prefix=/root/test/ffmpeg/lamebuild cc=arm-fsl-linux-gnueabi-gcc --disable-frontend
下载地址:x264, the best H.264/AVC encoder - VideoLAN
./configure --prefix=../x264build --disable-asm --enable-shared --enable-static --host=arm-linux-gnueabi --cross-prefix=arm-fsl-linux-gnueabi-
- ./configure --prefix=../arm-ffmpegbuild --enable-shared --enable-libmp3lame --enable-libx264 --enable-gpl --disable-asm --enable-version3 --cross-prefix=arm-fsl-linux-gnueabi- --target-os=linux --extra-cflags="-I ../lamebuild/include" --extra-ldflags="-L ../lamebuild/lib" --enable-cross-compile --enable-small --arch=arm --cpu=arm926ej-s --disable-everything --enable-decoder=h264 --enable-parser=h264 --enable-demuxer=rtsp --extra-ldflags="-L/root/test/ffmpeg/x264build/lib" --extra-cflags="-I ../x264build/include"
-
使用ffmpeg来采集音频,我们首先需要知道,如何访问麦克风,这个其实我们可以像访问文件一样,访问麦克风。文件的话,我们一般给出一个文件路径,就可以访问了,比如“/home/test/a.mp4”,同理,我们的麦克风的地址是“hw:0”。
其次,我们需要知道,麦克风这个文件格式是什么?对于麦克风这种硬件设备,与其说是格式,我更觉得这是驱动程序。在linux上,通用的音频驱动程序,就是alsa。
这样的话,我们很容易形成了下面这样的命令:
ffmpeg -f alsa -i hw:0 out.wav
这里, -f 指定格式(驱动程序)为alsa, -i 指出文件路径,这里是麦克风地址“hw:0”,最后一个是输出文件路径,这里为当前路径下,保存为 out.wav文件。
我们在终端运行这条命令之后,然后对着麦克风讲话“123456”,然后按q结束录音,就可以看到当前路径下面,生成了 out.wav。然后我们使用
ffplay out.wav
播放这段录音,就可以听到刚刚我们喊的“123456”。
./ffmpeg -i rtsp://127.0.0.1/test.264 -c copy output.mp4
Windows下编译FFmpeg详解_ffmpegwindows编译_zhouyongku的博客-CSDN博客
FFmpeg 详尽编译过程_ffmpeg如何编译_学术袁的博客-CSDN博客
用 VS2019 编译带 libx264, libmp3lame 的 FFmpeg 库_ffmpeg libmp3lame 编译_fly4free的博客-CSDN博客
ubuntu18.04编译FFMPEG_ubuntu18.04下编译ffmpeg_papaofdoudou的博客-CSDN博客
Linux下交叉编译FFMPEG与X264库:目标板友善之臂Tiny4412开发板_EXYNOS4412(ARMV7_32位)-腾讯云开发者社区-腾讯云 交叉编译多平台 FFmpeg 库并提取视频帧 - 知乎
FFmpeg进行笔记本摄像头+麦克风实现流媒体直播服务,展示在浏览器上。_ffmpeg打开麦克风_jrongweb的博客-CSDN博客
EasyDarwin+FFmpeg实现本地音视频推流_ffmpeg单独音频推流_屠龍之技的博客-CSDN博客
树莓派利用ffmpeg将外接USB麦克风的音频实时推流到rtmp服务器,实现在任意设备上实时监听音频 - 芒果爱吃胡萝卜
读取麦克风的核心代码及详解_FFmpeg4.3开发系列之10:采集麦克风AAC+MP3编码存储并直播实战_C/C++视频-51CTO学堂
linux下使用ffmpeg采集音频数据_ffmpeg捕捉麦克风 linux_snail_hunan的博客-CSDN博客
ffmpeg精简_ffmpeg 精简_且行且探索的博客-CSDN博客
嵌入式开发(四):海思Hi3559AV100交叉编译ffmpeg_夜风里唱的博客-CSDN博客
Linux下交叉编译FFMPEG与X264库:目标板友善之臂Tiny4412开发板_EXYNOS4412(ARMV7_32位)-腾讯云开发者社区-腾讯云
嵌入式平台Portaudio的交叉编译_portaudio lib库_遇逆境处之泰然的博客-CSDN博客
PortAudio - an Open-Source Cross-Platform Audio API
libsndfile 用法简介_liyuanbhu的博客-CSDN博客
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(一) 嵌入式Linux开发基本概念以及开发流程介绍-阿里云开发者社区
正点原子imx6ull开发板视频监控项目实战系列5: 摄像头(V4L2)和声卡(ALSA)接口简介_imx6ull 摄像头_One Piece&的博客-CSDN博客
Linux---ALSA音频工具arecord、aplay、amixer使用_linux aplay_面朝大海0902的博客-CSDN博客正点原子imx6ull开发板视频监控项目实战系列5: 摄像头(V4L2)和声卡(ALSA)接口简介_imx6ull 摄像头_One Piece&的博客-CSDN博客 Linux驱动开发|音频驱动_51CTO博客_android驱动开发和linux驱动开发
正点原子Linux第五章 I.MX6U-ALPHA开发平台介绍 - 知乎
正点原子ALPHA开发板核心资源分析_正点原子阿尔法开发板怎么样_ManGo CHEN的博客-CSDN博客 正点原子linux阿尔法开发板使用—Linux设备树_配置linux开发板设备树_梅山剑客的博客-CSDN博客
正点原子linux阿尔法开发板使用——IIC驱动_梅山剑客的博客-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。