音视频学习 - ffmpeg 编译与调试

详细的FFmpeg编译流程与脚本分析 FFmpeg是一个跨平台的多媒体库,也是目前音视频领域应用最广泛的库。它包括llibavcodec、libavformat、libavutil、libavdevice、libavfilter、libswscale、libswresample、libpostproc等模块,其中avcodec用于编解码,avformat用于解封装,avutil是提供工具类,avdevice用于各平台的设备接入 阅读详情

编译

环境

macOS Ventrua 13.4
ffmpeg 7.7.1
Visual Studio Code Version: 1.99.0 (Universal)

操作

FFmpeg 下载源码

$ cd ffmpeg-x.y.z
$ ./configure
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.libera.chat.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.

# 听劝 + 考虑到后面需要调试
$ mkdir build
$ ./configure --prefix=./build --disable-x86asm --enable-debug --disable-stripping
$ make 

编译成功后结果如下图

2025-04-16 16.33.06.png

ffmpeg

常用库简介

来自参考1

库介绍
avcodec音视频编解码核心库
avformat音视频容器格式的封装和解析
avutil核心工具库
swscal图像格式转换的模块
swresample音频重采样
avfilter音视频滤镜库,如视频加水印、音频变声
avdevice输入输出设备库,提供设备数据的输入与输出,和硬件设备交互

2025-04-17 14.40.49.png

准备
获取媒体信息

可以通过ffmpeg包含的工具命令ffprobe

# 获取mp3的信息
$ ffprobe -show_format 天空之城.mp3

输出结果如下,可知这个音频文件采样率是44.1KHz,双声道,码率是128kb

一个采样率为44.1KHz,采样大小为16bit,双声道的 PCM编码的WAV文件,它的数据速率则为44.1K×16×2=1411.2Kb/s。我们常说128K的MP3,对应的WAV的参数,就是这个 1411.2Kb/s,这个参数也被称为数据带宽,它和ADSL中的带宽是一个概念。

Input #0, mp3, from '天空之城.mp3':
  Duration: 00:03:00.35, start: 0.025057, bitrate: 128 kb/s
  Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : LAME3.99r
    Side data:
      replaygain: track gain - -3.300000, track peak - unknown, album gain - unknown, album peak - unknown,
[FORMAT]
filename=天空之城.mp3
nb_streams=1
nb_programs=0
format_name=mp3
format_long_name=MP2/3 (MPEG audio layer 2/3)
start_time=0.025057
duration=180.349388
size=2886135
bit_rate=128024
解封装

将mp3文件转成pcm,选择双声道,采样率44100

# -y 允许覆盖
# -i 源文件
# -acodec pcm_s16le 编码器
# -f s16le 强制文件格式
# -ac 2 双声道
# -ar 44100 采样率
$ ffmpeg -y -i 天空之城.mp3 -acodec pcm_s16le -f s16le -ac 2 -ar 44100 天空之城.pcm

mp3压缩率差不多在1:10到1:12,原来大小是2.9M,转换成31.8M,

下载VLC来播放pcm文件

$ /Applications/VLC.app/Contents/MacOS/VLC --demux=rawaud --rawaud-channels 2 --rawaud-samplerate 44100 天空之城.pcm

2025-04-17 11.30.09.png

调试ffmpeg

本文在mac环境上使用vscode来调试ffmpeg

用vscode打开ffmpeg目录,选中ffmpeg_g

2025-04-17 15.23.23.png

点击左侧的调试功能,在出现的界面创建一个launch.json file

2025-04-17 15.23.14.png

在出现的下拉选择框中选择Install extension

2025-04-17 15.23.36.png

选择CodeLLDB

2025-04-17 15.24.29.png

安装完成后再次点击,配置launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "ffmpeg",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/ffmpeg_g",
            "args": ["-f", "avfoundation", "-list_devices", "true", "-i", "\"\""],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb"
        }
    ]
}

设置断点,点击调试

2025-04-17 16.07.09.png

与在Xcode中调试不一样的是在交互窗口输入命令前要加一个 -exec。

参考

  1. ffmpeg 各库的介绍、解码流程、常用结构体
  2. ffmpeg处理pcm和mp3互转
  3. mac:VLC播放YUV文件和pcm文件(命令行)
  4. The macOS platform uses vscode to debug ffmpeg
  5. https://ffmpeg.xianwaizhiyin.net/base-knowledge/base-knowledge.html
ffmpeg源码编译详细过程与使用(含demo) 关于ffmpeg so库的编译,网上存在各种教程。有些基于windows,有些基于linux~而基于linux的:一般会选择安装虚拟机,在其上跑ubuntu系统。其实各种方式都是可以的,只要最后可以编译出我们需要的so库,就是正道。win10开始自带了linux的子系统,我们可以直接使用该子系统进行编译工作,而无需安装虚拟机等繁琐流程。编译新版的ffmpegdemo中会使用ffmpeg新版的api(注:网上好多教程的demo部分其实无法正常使用,部分api在新版已经废弃) 阅读详情

相关推荐

VScode配置ffmpeg+sdl2.0开发环境(window+MinGW)

VScode配置ffmpeg+sdl2.0开发环境(window+MinGW)

weixin_37515325的博客 6261

编译可调试的debug版本的ffmpeg

1、首先需要到官网下载ffmpeg,网上的例子很多在此不进行赘述。 2、下载完成后,进入到ffmpeg源码的文件夹中 configure是一个关键的文件,编译主要用到此文件外加一些自定义的条件实现编译,可以通过./configure --help来查看可提供的选项及其含义,下图中仅列出了一小部分 3、源码编译 ./configure --prefix=/home/ffmpeg/4.4.1_debug/ --enable-shared --disable-optimizations --enable-de

优快云_LJJ0303的博客 3131

音视频开发三:Windows环境下FFmpeg编译安装

Windows环境下FFmpeg编译安装

qq_38056514的博客 3967

ffmpeg编译debug版本调试

当你看这里的时候,相比你一定非常恼火,明明加了–enable-debug,但是为什么还是编译不出debug的ffmpeg.

weixin_43360707的博客 1123

FFmpeg在Windows下使用VisualStudio调试

FFmpeg是音视频开发者的入门和必备工具,其通过一套完整的接协议、解封装、解码、渲染(或播放)、编码、封装,将大量的媒体协议、封装协议、codec、filter等集成到一起。 对于许多开发者来说,想要友好的调试FFmpeg似乎是一件不太容易的事情。FFmpeg虽然支持大部分编译环境,但是大部分Windows用户使用FFmpeg时的编译、调试环境并不那么友好。不折腾一番,想要在VisualStudio上成功调试起FFmpeg,似乎不太容易。 我从17年开始第一次接触FFmpeg,到现在(2020年7月)

anzhijun的专栏 1619

FFmpeg Windows编译调试

为何要在Windows上编译FFmpegFFmpeg是一个Linux环境的MakeFile工程。而在Windows上1 如果仅仅是使用,最方便的就是下载别人编译好的FFmpeg.exe直接在cmd命令行里使用。2 如果是想自己编译使用,最方便的就是在WSL里面编译使用。3 在Windows上用MSYS2编译ffmpeg.exe ffmpeg.pdb,直接创建项目调试。需求为了了解FFmpeg原理,阅读理解探索其源代码实现,需要在Windows环境下调试FFmpeg。

yinshipin007的博客 392

从零开始学习音视频编程技术(38) windows下编译并调试ffmpeg

前面介绍了Linux下编译ffmpeg的方法,考虑到大部分时候测试ffmpeg功能都是使用的windows系统(至少我是这样的),因此将战场重新转移到windows上。前面写了那么多的代码,但都只是简单的调用了ffmpeg的API,并不知道他内部是如何实现的。如果可以在调试的时候打个断点就可以进入ffmpeg代码调试看看实现该好友多好!梦想总是要有的,万一实现了呢!百度了一下发现可以做到,...

qq214517703的专栏 1503

FFmpeg多媒体处理框架:视音频流封装实战教程

FFmpeg是一套开源的多媒体处理框架,其强大的音视频处理能力使其成为视频处理领域的核心技术之一。它支持几乎所有类型的视频和音频格式的编解码、转码、流处理、过滤和播放。FFmpeg的四个主要组件是AVFormat、AVCodec、AVFilter和AVUtil,它们分别对应不同的功能:容器格式处理、编解码处理、滤镜处理和基本工具函数。容器格式,通常被称为封装格式,其主要作用是提供一个框架来整合多媒体数据流。

weixin_35754962的博客 1114

《FFmpeg原理》的创作之路

在掌握了 C/C++ 基本的 编译链接,调试的知识之后,我们就可以去学习 FFmpeg 的 API 函数的用法了。有可能会有同学问,那 C/C++ 的语法用不用学,这个我觉得学个 50% 就行了,剩下的语法知识,你直接在实战中,在调试别人的代码中学习会更加快。我觉得一部好的作品,它是没有完成的那一天的,因为我平时就是有灵感,想到了更好的表达这个算法的描述,我就去修改文章,或者增添内容,等等。同时,写作可以不断训练你的文字表达能力,当你写得越多的时候,很多复杂的东西,你都能用简单的语言来讲述给别人听。

yinshipin007的博客 240

FFmpeg H264集成与调试教程

本文还有配套的精品资源,点击获取 简介:FFmpeg是一个开源的音视频处理工具集合,尤其在Android平台下,它能够通过集成来增强应用处理H264视频编码的能力。本教程将指导开发者如何在Android Studio中整合FFmpeg库,并编译与调试相关的H264代码。教程涵盖了获取源码、配置交叉编译环境、添加动态/静态库文件、使用JNI调用FFmpeg函数、以及通过NDK...

weixin_35899324的博客 2158

Android平台FFmpeg音视频处理库集成与实战

FFmpeg作为音视频处理领域的基石级开源框架,自2000年由Fabrice Bellard发起以来,已发展为支持数百种格式与协议的跨平台工具集。其架构采用模块化设计,通过七大核心库实现功能解耦:libavcodec负责编解码核心,处理封装与解析,提供滤镜处理能力,libavutil包含通用工具函数,libswscale实现图像缩放与色彩空间转换,处理音频重采样,而支持音视频设备输入输出。各库通过统一的数据结构(如AVFrame。

weixin_42593549的博客 1018

使用Clion阅读FFmpeg源码:VABlog的高效学习技巧分享

VABlog是一个专注于音视频开发的学习资源库,提供了丰富的FFmpeg学习资料。本文将详细介绍如何利用Clion这一强大的IDE工具高效阅读FFmpeg源码,帮助开发者快速掌握FFmpeg的内部结构和工作原理。 ## 为什么选择Clion阅读FFmpeg源码? Clion作为一款专业的C/C++ IDE,提供了强大的代码导航、智能提示和重构功能,非常适合阅读大型开源项目如FFmpeg的源码。

gitblog_00318的博客 410

UE5深度图与Mask图渲染实战:从基础到高级应用

本文详细解析了在UE5中渲染深度图与Mask图的完整实战流程。从启用电影渲染队列、配置自定义深度模板通道等前期准备,到构建即用型深度图材质网络与精准物体Mask生成,并深入探讨了二者结合在NPR风格化、程序化雾气及AI工作流(如ComfyUI)中的高级应用,为影视、游戏后期与AI创作提供了高效的解决方案。

weixin_29001419的博客 349

基于C#的FFmpeg音视频编解码学习

一、前言 近两年项目上需要用到音视频的编解码,实现RTSP的拉流实时播放,同时采集本地麦克风音频数据实时下发到对端,实现双端的音视频通话,当时查阅搜索了较多资料,决定使用FFmpeg,主要还是参考雷神的博客,像雷神致敬,感谢雷神为我们这些小白提供了学习渠道。 网上的资料都是基于C++的,而我的项目是基于C#的,由于项目紧急,便使用C++编写了音视频处理代码,封装成动态链接库供C#调用,最终调试稳定后上线应用。 最近项目闲暇,在混迹优快云时无意间发...

pomtom的博客 6785

蚁群算法(Ant Colony Optimization,ACO)讲解+代码实现

通常情况下,较优的解对应的路径上的信息素会被加强,而较差解对应的信息素则会减少或蒸发。的化学物质,这种物质会在蚂蚁走过的路径上留下痕迹,后续的蚂蚁会根据这些信息素的浓度来选择路径,从而形成一条从蚁巢到食物源的。在求解TSP蚁群算法中,每只蚂蚁相互独立,用于构造不同的路线,蚂蚁之间通过信息素进行交流,合作求解。的过程,该路段经过的蚂蚁越多,信息素留下的就越多,浓度越高,更多的蚂蚁都会选择这个路段。需要注意的是,蚁群算法是一种。(6)计算每只蚂蚁的总距离:遍历每只蚂蚁的路线,累加经过的城市之间的距离。

m0_73804764的博客 1万+

从SAR信号到洪涝地图:基于Sentinel-1数据的水体快速提取实战

本文详细介绍了如何利用Sentinel-1 SAR数据快速提取水体信息并生成洪涝地图的实战方法。通过预处理五部曲和SDWI指数计算,结合具体案例展示了SAR技术在洪涝灾害应急监测中的高效性和准确性,为救援决策提供关键支持。

weixin_29201313的博客 463

Mac M1安装编译FFmpeg教程

本篇内容为Mac M1安装及编译FFmpeg的教程

m0_60456373的博客 6107

西南科技大学模拟电子技术实验七(集成运算放大器的非线性应用)预习报告

将电位器Rp调至中心位置,用双综示波器观察并绘制方波U0的波形,测量其幅值和频率;将电位器RP调至中心位置,用示波器观察并绘制锯齿波U0的波形,记录;示波器基线调零,Ui输入1000HZ、幅值为2V的正弦信号,观察并记录Ui与U0波形,读出图中波形跳变时的Ui临界值;用万用表电位器RP调至预测结果位置,用示波器观察并描绘三角波输出U0及方波输出uo’,测其幅值、频率及Rp值,记录之。示波器基线调零,U输入1000HZ、幅值为2V的正弦信号,观察UI与U0波形。理论算法公式:当Ui

Welcome To My6n Blog 3937

ffmpeg学习日记29-使用vscode调试ffmpeg源码

disable-stripping 注意一定要加–disable-stripping, 如果不加此选项,ffmpeg在编译时,会使用strip去掉符号信息。ffmpeg版本ffmpeg-4.1.10。–enable-debug 设置调试级别。创建launch.json文件,内容如下。在源码中打断点,查看是否进入调试模式。

WenCoo的博客 2086

ConvNeXt 系列改进:二次创新 ConvNeXt:结合 RepVGG 结构重参数化,训练多分支、推理单路

2026年的视觉模型赛道呈现出一种有趣的“返璞归真”趋势——在Transformer狂飙数年之后,卷积网络正以全新的姿态回归。这其中,ConvNeXt无疑是纯卷积阵营中最耀眼的明星。从2022年Meta AI首次提出至今,ConvNeXt系列已经走过了近四年的演进之路,衍生出ConvNeXt V2、E-ConvNeXt等多个增强版本。ConvNeXt的7×7深度卷积带来了不错的感受野,却也埋下了推理效率的隐患。

ZXSXJ的博客 234

嵌入式AI实战:基于RK3588部署YOLOv11并集成OpenCV实现实时推理(全流程详解)

本文详细介绍了在RK3588芯片上部署YOLOv11目标检测模型的全流程,包括环境搭建、模型转换和实时推理实现。主要内容为:1)通过YOLOv11官方工具将PyTorch模型转为ONNX格式;2)使用RKNN Toolkit2将ONNX模型转换为适配RK3588的RKNN格式;3)在RK3588上结合OpenCV实现实时视频推理功能。教程提供了完整的代码示例和详细步骤说明,帮助开发者快速在边缘设备上部署目标检测模型,实现AI视觉应用的落地。

LXY_LOVE36的博客 213

使用FFmpeg+EasyDarwin搭建音视频推拉流测试环境

在上一篇文章《使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)》中,我们讲解了如何搭建FFmpeg源码编译和调试环境。调试FFmpeg,还需要搭建流媒体服务器。流媒体服务器的作用是通过网络对外提供音视频服务,包括但不限于提供视频推流、拉流服务。推流(Push):推流是指将音视频数据从本地设备(如摄像头、麦克风)通过网络上传到服务器的过程。拉流(Pull):拉流是指从直播服务器获取音视频数据并在本地进行播放的过程。

撬动未来的支点的专栏 2090

读懂 403 Forbidden, the request has been blocked by UCON.:它不是浏览器渲染问题,而是后端安全闸门在拦截

摘要 403 Forbidden 错误表明服务器理解请求但拒绝执行,通常与权限或访问控制有关。当错误信息显示 "blocked by UCON" 时,说明请求被 SAP 体系中的统一连接管控框架拦截。UCON 采用白名单机制限制外部调用,通过记录、评估、强制三阶段流程实施管控。常见触发场景包括 HTTP 服务与通信场景配置不一致、白名单未更新等。排查时应通过 DevTools 确认服务器响应,使用 curl 排除浏览器干扰,并比较不同环境的行为差异。解决方案通常涉及调整配置传输顺序或更新

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 239

Android平台FFmpeg音视频开发深度指南

FFmpeg在Android开发中具有核心价值,提供了跨平台支持、完整功能链和灵活扩展性,帮助开发者突破系统原生API限制,实现专业音视频处理。环境搭建包括FFmpeg编译和Android项目集成,编译时需优化安全性和性能,项目集成则通过CMake配置。核心开发流程涵盖初始化、媒体文件解析和解码引擎优化,确保高效、安全地处理音视频数据。

健健的博客 2137

2026 企查查/天眼查:IP频率限制 + 验证码策略,企业工商数据采集实战

企业工商数据采集技术解析与解决方案 本文深度剖析了2026年企查查和天眼查平台的反爬机制与技术对抗方案。主要内容包括: 反爬机制分析: 采用JA4+ TLS指纹识别、极验v6验证码等多层防护 IP限制策略严格区分未登录/普通/VIP账号 精准识别并封禁数据中心IP 核心解决方案: 构建高可用住宅代理池,动态轮换真实用户IP 基于YOLOv8的验证码缺口识别技术(准确率99%) 分布式架构设计,支持千万级数据采集 多账号池管理与行为模拟技术 技术亮点: 动态住宅IP池实现1%以下封禁率 Playwright浏

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1327

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: 音频基础概念
下一篇: 学习笔记: Mach-O 文件
忘川三
博客等级 码龄12年 208粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值