当前位置: 首页 > news >正文

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

编译

环境

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/sStream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/sMetadata:encoder         : LAME3.99rSide 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

相关文章:

  • webgl入门实例-09索引缓冲区示例
  • 【华为】OSPF震荡引起CPU占用率高怎么解决?
  • SvelteKit 最新中文文档教程(21)—— 最佳实践之图片
  • Python-基于协同过滤的推荐系统详解:从经典方法到前沿技术
  • 使用mybatisPlus自带的分页方法+xml实现数据分页
  • PyTorch:学习 CIFAR-10 分类
  • 25.4.17学习总结
  • 多线程进阶知识篇(二)
  • CSDN创作四载记:我的创作纪念日随笔与感悟
  • SpringBoot整合Thymeleaf模板:构建现代化Web视图层的完整指南
  • 5G中LDPC编码之码块分段
  • C++入门小馆: C/C++内存管理
  • DAY 47 leetcode 232--栈与队列.用栈实现队列
  • 视频剪辑入门
  • iptables防火墙
  • 【C++初阶】第14课—缝合怪deque和优先队列、仿函数
  • AI在能源消耗管理及能源效率提升中的核心应用场景及技术实现
  • vllm 本地部署qwen2.5/Qwen2.5-32B-Instruct-AWQ模型
  • Crawl4AI:为大语言模型打造的开源网页数据采集工具
  • AI Agent系列(九) -Data Agent(数据分析智能体)
  • 19个剧团15台演出,上海民营院团尝试文旅融合新探索
  • 警惕“全网最低价”等宣传,市监总局和中消协发布直播消费提示
  • 高盛上调A股未来12个月目标点位,沪深300指数潜在回报15%
  • 上海启动万兆光网试点建设,助力“模速空间”跑出发展加速度
  • 青岛双星名人集团管理权之争:公司迁址,管理层更迭
  • 上海如何为街镇营商环境赋能?送政策、配资源、解难题、强活力