FFmpeg 简介
那么对于一个音视频文件,都有哪些属性呢?我们可以通过 ffmpeg-i 命令查看媒体文件的信息
? ffmpeg -i r1ori.mp4ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers built with Apple LLVM version 10.0.0 (clang-1000.10.44.4) configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-chromaprint --enable-frei0r --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libgme --enable-libgsm --enable-libmodplug --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-librsvg --enable-librtmp --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtesseract --enable-libtwolame --enable-libvidstab --enable-libwavpack --enable-libwebp --enable-libzmq --enable-opencl --enable-openssl --enable-videotoolbox --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/2.3.0/include/openjpeg-2.3 --enable-nonfree libavutil 56. 22.100 / 56. 22.100 libavcodec 58. 35.100 / 58. 35.100 libavformat 58. 20.100 / 58. 20.100 libavdevice 58. 5.100 / 58. 5.100 libavfilter 7. 40.101 / 7. 40.101 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 3.100 / 5. 3.100 libswresample 3. 3.100 / 3. 3.100 libpostproc 55. 3.100 / 55. 3.100Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'r1ori.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.20.100 Duration: 00:00:58.53, start: 0.000000, bitrate: 1870 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 544x960, 1732 kb/s, 29.83 fps, 29.83 tbr, 11456 tbn, 59.67 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default) Metadata: handler_name : SoundHandler
除了视频的元信息,还包括了更多我们当初编译的配置,你可以选择 -hide_banner 参数来隐藏这些信息,完整的命令如下:
?ffmpeg -i r1ori.mp4 -hide_bannerInput #0, mov,mp4,m4a,3gp,3g2,mj2, from 'r1ori.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.20.100 Duration: 00:00:58.53, start: 0.000000, bitrate: 1870 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 544x960, 1732 kb/s, 29.83 fps, 29.83 tbr, 11456 tbn, 59.67 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default) Metadata: handler_name : SoundHandlerAt least one output file must be specified
我们主要看几个数据:
FFmpeg 结构
默认的编译会生成 4 个可执行文件和 8 个静态库;可执行文件包括用于转码、推流、Dump 媒体文件的 ffmpeg、用于播放媒体文件的ffplay、用于获取媒体文件信息的 ffprobe,以及作为简单流媒体服务器的 ffserver
8 个静态库其实就是 FFmpeg 的 8 个模块,具体包括如下内容:
如何为 FFmpeg 平台引入第三方编解码库呢?
下面就以最常用的 LAME、X264、FDK-AAC 进行举例;假设已经交叉编译出了 LAME、X264、FDK-AAC 的静态库与头文件,并且在 FFmpeg 的源码目录下建立了 external-libs 目录,还在其中建立了 LAME、X264、FDK-AAC 三个目录,每个目录中的结构都包含了 include 和 lib两个目录,并且将编译出来的头文件和静态库文件分别都放到了这两个目录下面。
现在修改编译脚本如下:
新增 X264 编码器需要新增以下脚本:
--enable-muxer=h264 --enable-encoder=libx264 --enable-libx264 --extra-cflags=”-Iexternal-libs/x264/include” --extra-ldflags=”-Lexternal-libs/x264/lib”
新增 LAME 编码器需要新增以下脚本:
--enable-muxer=mp3 --enable-encoder=libmp3lame --enable-libmp3lame --extra-cflags=”-Iexternal-libs/lame/include” --extra-ldflags=”-Lexternal-libs/lame/lib”
新增 FDK-AAC 编码器需要新增以下脚本:
--enable-encoder=libfdk_aac --enable-libfdk_aac --extra-cflags=”-Iexternal-libs/fdk-aac/include” --extra-ldflags=”-Lexternal-libs/fdk-aac/lib”
FFmpeg 组成
构成 FFmpeg 主要有两个部分
1、工具软件
这一部分是编译好的程序,包括: ffmpeg.exe,ffplay.exe,ffserver.exe 和 ffprobe.exe
2、库文件部分
总结
FFmpeg 是一个强大的专门音视频处理的库,很多播放器都是基于 FFmpeg 进行的开发;文章所提的功能只是罗列了 FFmpeg 可使用功能的一部分,更多 FFmpeg 相关的学习资料;可以私信发送“音视频进阶”,即可获取一份高级音视频学习手册;希望这份手册能够给大家学习音视频带来一些帮助
好了,以上就是今天要分享的内容,大家觉得有用的话,可以点赞分享一下;如果文章中有什么问题欢迎大家指正;欢迎在评论区或后台讨论哈~
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!