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了,利用它就开发自己的程序了。重点看看头文件中的函数,究竟给我们提供了怎样的接口函数、怎么使用就是难点了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Nginx和uwsgi在自己的服务器上部署python的flask项目

Nginx 是一个高性能的 HTTP 和反向代理服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx 专为性能优化而开发,性能是其最重要的考量指标,实现上非常注重效率,能经受…

Structure-Inferred Bi-level Model for Underwater Image Enhancement论文小结

背景 随着水下机器人的发展,水下图像增强引起了计算机视觉界越来越多的关注。然而,由于光线在水中传播时会被散射和吸收,水下捕捉到的图像往往存在偏色和能见度低的问题。现有的方法依赖于特定的先验知识和训练数据,在缺乏结构信…

无人地磅称重系统|自助过磅 料仓联动 自助卸料

上海思伟无人地磅系统 自助过磅、 自助卸料 、料仓联动 智能、省人、安全 无人监管过磅 对地磅及其相关的所有硬件进行配置和管理; 支持红外、道闸、车牌识别、AI分析、拍照存档、LED语音播报一体机等设备; 实现稳定可靠的无人监管称重功能&#xf…

安防监控系统EasyCVR v3.4.0版本首页界面更新调整功能大汇总

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、…

C# 智慧医学实验室LIS系统源码,支持预制条码和即时打印条码;支持单工/双工数据采集;支持TAT监测与分析;具备检验智能审核功能,支持自定义多级审核规则

C#医院检验信息管理系统源码,智慧医学实验室LIS系统源码,云LIS系统源码 医院检验信息管理系统,利用计算机网络技术、数据存储技术、快速处理技术,对检验科进行全方位信息化管理,使检验科达到自动化运行,信息…

vscode使用flake8设置单行最长字符限制设置失败的问题

vscode使用flake8设置单行最长字符限制设置失败的问题 问题描述解决方案 问题描述 如图所示,使用flake8单行字数过长,就会有有红色底的波浪线 一般情况下很多教程都会让你在setting.json里面设置 但是我打开我的setting.json,发现我已经进…

体验家XMPlus收购NPSMeter,稳固体验管理行业“领头羊”地位

2023年9月30日,体验家XMPlus(以下简称“体验家”)成功完成了对NPSMeter的收购。此次收购是中国客户体验管理(CEM)赛道进入快速发展以来的首单收购,标志着体验家在CEM领域的进一步扩张,旨在继续完…

智慧工地管理云平台源码,Spring Cloud +Vue+UniApp

智慧工地源码 智慧工地云平台源码 智慧建筑源码支持私有化部署,提供SaaS硬件设备运维全套服务。 互联网建筑工地,是将互联网的理念和技术引入建筑工地,从施工现场源头抓起,最大程度的收集人员、安全、环境、材料等关键业务数据&am…

【教3妹学编程-算法题】给小朋友们分糖果 II

3妹:1 8得8,2 816, 3 8妇女节… 2哥 : 3妹,在干嘛呢 3妹:双11不是过了嘛, 我看看我这个双十一买了多少钱, 省了多少钱。 2哥 : 我可是一分钱没买。 3妹:我买了不少东西, …

天津火爆python培训机构从哪里入手?

Python不仅被应用在职场办公中,还被大型互联网公司应用于大型后端开发,随着大数据领域的高速发展,这门高效的编程语言逐渐成为处理数据的最佳编程语言之一。 Python培训班优势 系统性学习:Python培训班会提供结构化的课程体系&a…

期中之后老师的福音

老师在期中考试后总是会有一大堆事情要做,批改试卷、统计分数、通知学生成绩等等。今天我就要给大家介绍一个能够减轻老师工作负担、提高工作效率的方法——查询系统 简单来说,成绩查询系统就是能够让学生方便的查询成绩,让老师快捷发布成绩的…

腾讯云优惠券如何领取?腾讯云服务器怎么买便宜?

腾讯云深知用户对价格的重视,因此在每年的618、双11、双12等大型促销活动中推出了大量优惠活动。这些优惠活动包括打折、满减、买赠等形式,让用户在购买腾讯云主机服务器时能够享受到更多的实惠。特别是在这些促销活动期间,用户可以通过领取优…

OpenAI发布会,看看GPT又有哪些大动作!2023.11.7【浓缩精华】

ChatGPT GPT-4 Turbo其它applications 北京时间11月7日OpenAI首届开发者大会 GPT-4 Turbo Context length 支持12.8万个上下文contextMore control JSON模式 可复制输出 未来:在API中查看日志Better knowledge 平台启动检索 拥有截至2023年3月的知识New modaliti…

2023年11月最新视频号下载提取工具?

视频号下载提取器教程: 1. 首先,在微信客户端中搜索并添加"下载小助手儿"并关注获取推送的消息。然后添加视频下载助手为好友,可以帮助你解析视频号链接。 2. 打开微信,并找到你想要提取链接的视频号。进入该视频页面后…

终端训练模型日志重定向

在终端中要执行模型的训练时,我们有时候既需要把模型执行的日志输出到终端展示,又想把训练日志保存到日志文件中: 假设执行的代码时trian.py python -u train.py | tee -a ./train.log-u:这是 Python 解释器的一个选项,用于强制标…

List中的迭代器实现【C++】

List中的迭代器实现【C】 一. list的结构二. 迭代器的区别三. 迭代器的实现i. 类的设计ii. 重载iii. !重载iiii. begin()iiiii. end()iiiii. operator* 四.测试五. const迭代器的实现i. 实现5.2 优化实现 一. list的结构 其实按照习惯来说,应该要专门出一篇博客来写…

2.1 Windows驱动开发:内核链表与结构体

在Windows内核中,为了实现高效的数据结构操作,通常会使用链表和结构体相结合的方式进行数据存储和操作。内核提供了一个专门用于链表操作的数据结构LIST_ENTRY,可以用来描述一个链表中的每一个节点。 使用链表来存储结构体时,需要…

微信小程序:仅前端实现对象数组的模糊查询

效果 核心代码 //对数组进行过滤&#xff0c;返回数组中每一想满足name值包括变量query的 let result array.filter(item > { return item.name.includes(query); }); 完整代码 wxml <input type"text" placeholder"请输入名称" placeholder-styl…

【华为OD题库-015】报文重排序-Java

题目 对报文进行重传和重排序是常用的可靠性机制&#xff0c;重传缓冲区内有一定数量的子报文&#xff0c;每个子报文在原始报文中的顺序已知&#xff0c;现在需要恢复出原始报文。 输入描述 输入第一行为N,表示子报文的个数&#xff0c;0<N < 1000。 输入第二行为N个子报…

安防监控EasyCVR视频汇聚平台运维现场无法使用Linux抓包该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。监控视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、…