FFmpeg开发简介1

适逢FFmpeg6.1发布,准备深入学习下FFmpeg,将会写下系列学习记录。

在此列出主要学习资料,后续再不列,感谢这些大神的探路和分享,特别是雷神,致敬!

《FFmpeg从入门到精通》

《深入理解FFmpeg》

雷霄骅_FFMPEG,FFmpeg,视频质量评价-CSDN博客

Documentation (ffmpeg.org)

chatGPT

1、FFmpeg组成

命令行工具ffmpeg主命令行工具
ffplay基于SDL的播放器
ffprobe获取多媒体信息
基础库libavcodec编解码库
libavformat封装、解封库
libavfilter滤镜库
libavdevice多媒体输入/输出设备
libavutil通用工具
libswresample音频转换
libswscale图像转换
libpostproclibavfilter后期效果处理

2、FFmpeg支持

  • 源代码中查看支持情况

                  ./configure --list-encoders

查看编码器支持
./configure --list-decoders查看解码器支持
./configure --list-muxers查看封装支持
./configure --list-demuxers查看解封装支持
./configure --list-protocols查看通信协议支持

  • 编译好的FFmpeg中查看支持情况
ffmpeg -codecs查看全部编解码器
ffmpeg -encoders查看编码器
ffmpeg -decoders查看解码器
ffmpeg -filters查看滤镜
ffmpeg --help full查看全部信息

                ffmpeg -h encoder/decoder

                /muxer/demuxer/filter=xxx

查看具体参数

3、常用指令(需要啥功能问chatGPT是最好的)

  • 提取音频流

ffmpeg -i in.mp4 -vn -acodec copy out.aac

  • 提取H264视频流

ffmpeg -i in.mp4 -vcodec copy -an out.h264

  • 提取H265视频流

ffmpeg -i in.mp4 -vcodec copy -an -bsf hevc_mp4toannexb -f hevc out.hevc

  • 添加滤镜效果

ffmpeg -i input -vf filter_name=parameters output

4、使用FFmpeg

命令行直接使用编译出的三个程序即可。

二次开发则需要编译出的库,在下面博文介绍了编译方法。

适用于嵌入式arm的ffmpeg编解码-CSDN博客

这里看下我编译出来的文件如下图

可以发现install中有四个文件夹:

bin: 命令行程序

include: 头文件

lib: 共享库

share: 例程及文档

再看一下install中具体的文件树:

├── bin
│   ├── ffmpeg
│   ├── ffplay
│   └── ffprobe
├── include
│   ├── libavcodec
│   │   ├── ac3_parser.h
│   │   ├── adts_parser.h
│   │   ├── avcodec.h
│   │   ├── avdct.h
│   │   ├── avfft.h
│   │   ├── bsf.h
│   │   ├── codec_desc.h
│   │   ├── codec.h
│   │   ├── codec_id.h
│   │   ├── codec_par.h
│   │   ├── d3d11va.h
│   │   ├── defs.h
│   │   ├── dirac.h
│   │   ├── dv_profile.h
│   │   ├── dxva2.h
│   │   ├── jni.h
│   │   ├── mediacodec.h
│   │   ├── packet.h
│   │   ├── qsv.h
│   │   ├── vdpau.h
│   │   ├── version.h
│   │   ├── version_major.h
│   │   ├── videotoolbox.h
│   │   ├── vorbis_parser.h
│   │   └── xvmc.h
│   ├── libavdevice
│   │   ├── avdevice.h
│   │   ├── version.h
│   │   └── version_major.h
│   ├── libavfilter
│   │   ├── avfilter.h
│   │   ├── buffersink.h
│   │   ├── buffersrc.h
│   │   ├── version.h
│   │   └── version_major.h
│   ├── libavformat
│   │   ├── avformat.h
│   │   ├── avio.h
│   │   ├── version.h
│   │   └── version_major.h
│   ├── libavutil
│   │   ├── adler32.h
│   │   ├── aes_ctr.h
│   │   ├── aes.h
│   │   ├── ambient_viewing_environment.h
│   │   ├── attributes.h
│   │   ├── audio_fifo.h
│   │   ├── avassert.h
│   │   ├── avconfig.h
│   │   ├── avstring.h
│   │   ├── avutil.h
│   │   ├── base64.h
│   │   ├── blowfish.h
│   │   ├── bprint.h
│   │   ├── bswap.h
│   │   ├── buffer.h
│   │   ├── camellia.h
│   │   ├── cast5.h
│   │   ├── channel_layout.h
│   │   ├── common.h
│   │   ├── cpu.h
│   │   ├── crc.h
│   │   ├── csp.h
│   │   ├── des.h
│   │   ├── detection_bbox.h
│   │   ├── dict.h
│   │   ├── display.h
│   │   ├── dovi_meta.h
│   │   ├── downmix_info.h
│   │   ├── encryption_info.h
│   │   ├── error.h
│   │   ├── eval.h
│   │   ├── executor.h
│   │   ├── ffversion.h
│   │   ├── fifo.h
│   │   ├── file.h
│   │   ├── film_grain_params.h
│   │   ├── frame.h
│   │   ├── hash.h
│   │   ├── hdr_dynamic_metadata.h
│   │   ├── hdr_dynamic_vivid_metadata.h
│   │   ├── hmac.h
│   │   ├── hwcontext_cuda.h
│   │   ├── hwcontext_d3d11va.h
│   │   ├── hwcontext_drm.h
│   │   ├── hwcontext_dxva2.h
│   │   ├── hwcontext.h
│   │   ├── hwcontext_mediacodec.h
│   │   ├── hwcontext_opencl.h
│   │   ├── hwcontext_qsv.h
│   │   ├── hwcontext_vaapi.h
│   │   ├── hwcontext_vdpau.h
│   │   ├── hwcontext_videotoolbox.h
│   │   ├── hwcontext_vulkan.h
│   │   ├── imgutils.h
│   │   ├── intfloat.h
│   │   ├── intreadwrite.h
│   │   ├── lfg.h
│   │   ├── log.h
│   │   ├── lzo.h
│   │   ├── macros.h
│   │   ├── mastering_display_metadata.h
│   │   ├── mathematics.h
│   │   ├── md5.h
│   │   ├── mem.h
│   │   ├── motion_vector.h
│   │   ├── murmur3.h
│   │   ├── opt.h
│   │   ├── parseutils.h
│   │   ├── pixdesc.h
│   │   ├── pixelutils.h
│   │   ├── pixfmt.h
│   │   ├── random_seed.h
│   │   ├── rational.h
│   │   ├── rc4.h
│   │   ├── replaygain.h
│   │   ├── ripemd.h
│   │   ├── samplefmt.h
│   │   ├── sha512.h
│   │   ├── sha.h
│   │   ├── spherical.h
│   │   ├── stereo3d.h
│   │   ├── tea.h
│   │   ├── threadmessage.h
│   │   ├── timecode.h
│   │   ├── time.h
│   │   ├── timestamp.h
│   │   ├── tree.h
│   │   ├── twofish.h
│   │   ├── tx.h
│   │   ├── uuid.h
│   │   ├── version.h
│   │   ├── video_enc_params.h
│   │   ├── video_hint.h
│   │   └── xtea.h
│   ├── libswresample
│   │   ├── swresample.h
│   │   ├── version.h
│   │   └── version_major.h
│   └── libswscale
│       ├── swscale.h
│       ├── version.h
│       └── version_major.h
├── lib
│   ├── libavcodec.so -> libavcodec.so.60.31.102
│   ├── libavcodec.so.60 -> libavcodec.so.60.31.102
│   ├── libavcodec.so.60.31.102
│   ├── libavdevice.so -> libavdevice.so.60.3.100
│   ├── libavdevice.so.60 -> libavdevice.so.60.3.100
│   ├── libavdevice.so.60.3.100
│   ├── libavfilter.so -> libavfilter.so.9.12.100
│   ├── libavfilter.so.9 -> libavfilter.so.9.12.100
│   ├── libavfilter.so.9.12.100
│   ├── libavformat.so -> libavformat.so.60.16.100
│   ├── libavformat.so.60 -> libavformat.so.60.16.100
│   ├── libavformat.so.60.16.100
│   ├── libavutil.so -> libavutil.so.58.29.100
│   ├── libavutil.so.58 -> libavutil.so.58.29.100
│   ├── libavutil.so.58.29.100
│   ├── libswresample.so -> libswresample.so.4.12.100
│   ├── libswresample.so.4 -> libswresample.so.4.12.100
│   ├── libswresample.so.4.12.100
│   ├── libswscale.so -> libswscale.so.7.5.100
│   ├── libswscale.so.7 -> libswscale.so.7.5.100
│   ├── libswscale.so.7.5.100
│   └── pkgconfig
│       ├── libavcodec.pc
│       ├── libavdevice.pc
│       ├── libavfilter.pc
│       ├── libavformat.pc
│       ├── libavutil.pc
│       ├── libswresample.pc
│       └── libswscale.pc
└── share├── ffmpeg│   ├── examples│   │   ├── avio_http_serve_files.c│   │   ├── avio_list_dir.c│   │   ├── avio_read_callback.c│   │   ├── decode_audio.c│   │   ├── decode_filter_audio.c│   │   ├── decode_filter_video.c│   │   ├── decode_video.c│   │   ├── demux_decode.c│   │   ├── encode_audio.c│   │   ├── encode_video.c│   │   ├── extract_mvs.c│   │   ├── filter_audio.c│   │   ├── hw_decode.c│   │   ├── Makefile│   │   ├── mux.c│   │   ├── qsv_decode.c│   │   ├── qsv_transcode.c│   │   ├── README│   │   ├── remux.c│   │   ├── resample_audio.c│   │   ├── scale_video.c│   │   ├── show_metadata.c│   │   ├── transcode_aac.c│   │   ├── transcode.c│   │   ├── vaapi_encode.c│   │   └── vaapi_transcode.c│   ├── ffprobe.xsd│   ├── libvpx-1080p50_60.ffpreset│   ├── libvpx-1080p.ffpreset│   ├── libvpx-360p.ffpreset│   ├── libvpx-720p50_60.ffpreset│   └── libvpx-720p.ffpreset└── man├── man1│   ├── ffmpeg.1│   ├── ffmpeg-all.1│   ├── ffmpeg-bitstream-filters.1│   ├── ffmpeg-codecs.1│   ├── ffmpeg-devices.1│   ├── ffmpeg-filters.1│   ├── ffmpeg-formats.1│   ├── ffmpeg-protocols.1│   ├── ffmpeg-resampler.1│   ├── ffmpeg-scaler.1│   ├── ffmpeg-utils.1│   ├── ffplay.1│   ├── ffplay-all.1│   ├── ffprobe.1│   └── ffprobe-all.1└── man3├── libavcodec.3├── libavdevice.3├── libavfilter.3├── libavformat.3├── libavutil.3├── libswresample.3└── libswscale.3

        以前在某个地方看到说so库的后缀中可以看到版本号,从ffmpeg的lib中看到这个不一致,也就是这个规则不存在的。

        拿到这个install文件,实际就相当于一个ffmpeg的sdk了,利用它就开发自己的程序了。重点看看头文件中的函数,究竟给我们提供了怎样的接口函数、怎么使用就是难点了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/176124.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙迅LT9211D MIPI(DSI/CSI)转LVDS和集创北方ICN6202 MIPIDSI转LVDS比对

龙迅LT9211D描述: Lontium LT9211D是一款高性能的MIPI DSI/CSI- 2到双端口LVDS转换器。LT9211D反序列化输入的MIPI视频数据,解码数据包,并将格式化的视频数据流转换为AP和移动显示面板或摄像机之间的LVDS发射机输出。LT9211D支持最大14 dB输…

vue2+elementui使用MessageBox 弹框$msgbox自定义VNode内容:实现radio

虽说实现下面的效果&#xff0c;用el-dialog很轻松就能搞定。但是这种简单的交互&#xff0c;我更喜欢使用MessageBox。 话不多说&#xff0c;直接上代码~ <el-button type"primary" size"mini" click"handleApply()" >处理申请</el-b…

linux下安装向日葵

https://sunlogin.oray.com/download/linux?typepersonal下载 在文件所在位置的空白处右键&#xff08;在此处打开终端&#xff09; 输入命令&#xff1a; sudo dpkg -i 文件名.deb &#xff08;文件名为下载的deb文件名字&#xff09;/usr/local/sunlogin/bin/sunlogincl…

《QT从基础到进阶·二十》QThreadPool线程池的使用

什么情况下比较适合用线程池&#xff1f; 比如我有上百个任务要同时处理&#xff0c;难道开上百个线程&#xff1f;NO&#xff01;&#xff01;&#xff01; 有了线程池的加持&#xff0c;自动给任务分配线程处理&#xff0c; 多线程不再是真爱~ 线程池创建&#xff1a; 1、自…

第 117 场 LeetCode 双周赛题解

A 给小朋友们分糖果 I 动态规划&#xff1a;设 p [ k ] [ i ] p[k][i] p[k][i] 为将 i i i 个糖果分给 k k k 个小朋友的方案数&#xff0c;先求 p [ 2 ] [ i ] p[2][i] p[2][i] &#xff0c;再求 p [ 3 ] [ n ] p[3][n] p[3][n] class Solution { public:using ll long …

【Spring进阶系列丨第一篇】初识Spring开发

前言 小伙伴们大家好&#xff0c;我是陈橘又青&#xff0c;今天起 《Spring进阶系列》 开始更新。本专栏将涵盖Spring框架的核心概念、配置管理、Web开发、AOP、Boot、Security、Data、Integration和Batch等多个主题。通过理论讲解和实际案例的剖析&#xff0c;帮助读者深入理解…

R语言编写代码示例

R语言编写的爬虫程序&#xff0c;使用了requests库来发送请求&#xff0c;使用BeautifulSoup库来解析HTML。 r # 第一步&#xff0c;安装必要的库 install.packages("xml2") install.packages("requests") install.packages("httr") install.pac…

【SQLite】环境安装

SQLite - C/C SQLite简介 SQLite 是一种轻量级的嵌入式数据库引擎&#xff0c;它在程序中直接访问数据库文件而不需要独立的数据库服务器。以下是一些关于 SQLite 的简介信息&#xff1a; 嵌入式数据库引擎&#xff1a; SQLite 是一种嵌入式数据库引擎&#xff0c;这意味着它…

打造全身视角的医院可视化能源监测管理平台,实现医院能源可视化管理

医院是大型公共建筑的一种&#xff0c;随着医院规模的不断扩大&#xff0c;医院能源消耗剧增&#xff0c;能源消耗居高不下。医院对于能源监管的需求也越来越高。医院建立一套能耗监测管理平台&#xff0c;对于降低医院能耗有着非常重要的作用。 医院能耗存在的问题 1、医院能…

Please No More Sigma(构造矩阵)

Please No More Sigma 给f(n)定义如下&#xff1a; f(n)1 n1,2; f(n)f(n-1)f(n-2) n>2; 给定n&#xff0c;求下式模1e97后的值 Input 第一行一个数字T&#xff0c;表示样例数 以下有T行&#xff0c;每行一个数&#xff0c;表示n。 保证T<100&#xff0c;n<100000…

为什么打开idea时,没有启动页面,如何解决?

更新idea2021.2后&#xff0c;当双击idea打开时&#xff0c;发现没有启动界面&#xff0c;直接进入IDEA界面&#xff0c;中间等待时间&#xff0c;让人误以为没有打开idea成功&#xff0c;使得多次点击idea图标。 解决方案就是 在idea界面菜单栏中找到帮助&#xff08;Help)&a…

时序数据库 TDengine + 高级分析软件 Seeq,助力企业挖掘时序数据潜力

作为一款制造业和工业互联网&#xff08;IIOT&#xff09;高级分析软件&#xff0c;Seeq 支持在工艺制造组织中使用机器学习创新的新功能。这些功能使组织能够将自己或第三方机器学习算法部署到前线流程工程师和主题专家使用的高级分析应用程序&#xff0c;从而使单个数据科学家…