FFmpeg libswresample 模块的关键函数swr_convert 到底在干嘛?
目录一、先给一句话定性二、swr_convert 函数原型三、参数逐个拆重点在“样本不是字节”① SwrContext *s② out[]/ in[]—— 不是 void*packedS16 / S32 / U8planarFLTP / S16P③ in_count/ out_count单位是什么四、返回值到底什么意思五、最经典的坑残留 FIFO90%人踩现象原因正确 flush 姿势六、AVFrame 流派的“标准模板”解码 → swr → SDL / D3D七、S16 packed → SDL 最小完整例子八、常见翻车表血泪九、swr_convert 内部在干嘛十、一句话总结觉得有用就请您帮忙点赞转发收藏吧您的鼓励是我创作的动力多谢看官。由于能力水平有限文中的错误或不严谨的地方在所难免还请批评指正。swr_convert是 FFmpeg 中libswresample库的核心函数用于执行音频重采样操作。它能够将音频流的‌采样率‌、‌采样格式‌如从浮点转为整型或‌声道布局‌如从单声道转为立体声进行转换且不会改变音频的播放时长。做音频播放 / 录音 / 转码的人迟早都会撞上这一句swr_convert(swr_ctx, out_buf, out_samples, in_buf, in_samples);抄能跑但一问为什么返回值是输出帧数in_samples 怎么给planar 怎么摆残留数据在哪​今天把swr_convert拆干净不绕术语。一、先给一句话定性swr_convert 不是“格式转换器”是音频流水线工人负责 采样率 / 声道布局 / 样本格式 / 位深 全部打包干完。核心任务只有三个重采样SRC 声道重排channel layout packed ↔ planar二、swr_convert 函数原型int swr_convert(struct SwrContext *s, uint8_t *const out[], int out_count, const uint8_t *const in[], int in_count);看着简单其实 4 组语义上下文 输出地址 / 想要多少样本 输入数据 / 实际多少样本三、参数逐个拆重点在“样本不是字节”①SwrContext *s一次初始化反复用swr_alloc_set_opts(nullptr, AV_CH_LAYOUT_STEREO, // out layout AV_SAMPLE_FMT_S16, // out fmt 48000, // out rate AV_CH_LAYOUT_5POINT1_BACK, // in layout AV_SAMPLE_FMT_FLTP, // in fmt 44100, 0, nullptr);layout rate fmt 缺一不可②out[]/in[]—— 不是 void*packedS16 / S32 / U8uint8_t* out[1] { (uint8_t*)pcm16 }; swr_convert(s, out, ...);planarFLTP / S16Puint8_t* out[2]; out[0] left; out[1] right;规则planar data[i] 每声道一块packed data[0] 全挤一起AVFrame::data 原样传就行③in_count/out_count单位是什么单声道样本数per channel sample count参数意思in_count输入每个声道多少帧out_count我最多能吃多少帧不是字节不是 packet size例1024 帧立体声in_count 1024; // FLTP: data[0][1024], data[1][1024]四、返回值到底什么意思int ret swr_convert(...);ret 本次输出的 per-channel sample 数ret含义0输出样本数0FIFO 里攒着呢0出错常见误解“我给了 1024为啥返回 882”因为48000 → 44100 ratio 44100/48000 ≈ 0.91875五、最经典的坑残留 FIFO90%人踩现象最后几秒声音没了每次 flush 都有一小截原因swr 内部有 FIFO不够一帧不吐正确 flush 姿势while ((ret swr_convert(swr, out, out_max, nullptr, 0)) 0) { write_pcm(out, ret); }口诀innullptr, in_count0 冲 FIFO六、AVFrame 流派的“标准模板”解码 → swr → SDL / D3DAVFrame* dec got_frame; uint8_t* out[1] { audio_buf }; int out_nb swr_get_out_samples(swr, dec-nb_samples); int ret swr_convert(swr, out, out_nb, (const uint8_t**)dec-data, dec-nb_samples); // ret 实际可播放样本数swr_get_out_samples()先问大小避免 alloc 太小七、S16 packed → SDL 最小完整例子int dst_nb swr_get_out_samples(swr_ctx, frame-nb_samples); uint8_t* dst (uint8_t*)malloc(dst_nb * 2 * 2); uint8_t* out[1] { dst }; swr_convert(swr_ctx, out, dst_nb, (const uint8_t**)frame-data, frame-nb_samples); SDL_QueueAudio(dev, dst, dst_nb * 4); free(dst);八、常见翻车表血泪症状真凶声音加速in/out rate 反了爆音planar 当 packed声道左右反layout 没设最后没声没 flush返回负out_count 太小九、swr_convert 内部在干嘛[in frame] ↓ delay / compensation ↓ 重采样polyphase filter ↓ 声道混合downmix / upmix ↓ planar ↔ packed ↓ [FIFO] → out不是一帧进一帧出十、一句话总结swr_convert 给样本数吃样本数返回输出样本数结束必须 nullptr/0 flushplanar 用 data[]永远别碰字节数。

相关新闻

玛卡巴卡~

玛卡巴卡~

1)pip命令(标题三) pip freeze > requirements.txt pip install -r requirements.txt pip cache purge pip config list pip install opencv-python -i https://mirrors.tuna.tsinghua.edu.cn/ http://mirrors.aliyun.com/pypi/simple/…

2026/8/9 18:34:25 阅读更多 →
海量存储挑战如何破局?SaaS短链接系统的数据库设计与优化

海量存储挑战如何破局?SaaS短链接系统的数据库设计与优化

海量存储挑战如何破局?SaaS短链接系统的数据库设计与优化 【免费下载链接】shortlink 🔥 热门推荐 🔥 SaaS 短链接系统,承载高并发和海量存储等场景难题。专为实习、校招以及社招而出的最新项目,项目质量不亚于 12306 …

2026/8/9 18:34:25 阅读更多 →
软工毕设新颖的方向汇总

软工毕设新颖的方向汇总

0 选题推荐 - 人工智能篇 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际…

2026/8/9 18:34:25 阅读更多 →

最新新闻

南通缝纫设备选购参考

南通缝纫设备选购参考

南通缝纫设备选购参考 在南通海门从事服装加工、家纺缝制或日常家庭缝补的用户,常常面临一个实际问题:需要在本地找到一家能够现场看机、试机并提供后续维修支持的缝纫设备门店。对于小微加工厂和家纺作坊来说,机器的走线稳定性与吃厚能力直接…

2026/8/9 19:32:54 阅读更多 →
大模型上下文工程:从魔法背包到智能协作的实践指南

大模型上下文工程:从魔法背包到智能协作的实践指南

1. 从“魔法背包”到工程实践:/context命令的本质 最近在和一些做AI应用开发的朋友聊天,发现一个挺有意思的现象:大家聊起大模型的能力时,总是离不开“上下文”(Context)这个词。无论是讨论如何让Claude Co…

2026/8/9 19:32:54 阅读更多 →
LFM2.5-1.2B-Instruct-OptiQ-4bit模型架构揭秘:混合卷积与注意力机制如何提升效率

LFM2.5-1.2B-Instruct-OptiQ-4bit模型架构揭秘:混合卷积与注意力机制如何提升效率

LFM2.5-1.2B-Instruct-OptiQ-4bit模型架构揭秘:混合卷积与注意力机制如何提升效率 【免费下载链接】LFM2.5-1.2B-Instruct-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/LFM2.5-1.2B-Instruct-OptiQ-4bit LFM2.5-1.2B-Instruct-O…

2026/8/9 19:32:54 阅读更多 →
为什么选择XChart:3分钟让Java数据可视化变得简单高效

为什么选择XChart:3分钟让Java数据可视化变得简单高效

为什么选择XChart:3分钟让Java数据可视化变得简单高效 【免费下载链接】XChart XChart is a light-weight Java library for plotting data. 项目地址: https://gitcode.com/gh_mirrors/xc/XChart 当你面对海量数据需要展示时,是否曾为复杂的图表…

2026/8/9 19:32:54 阅读更多 →
PinkCherry_MiniMax-H3配置文件全解析:model_type与architectures参数设置指南

PinkCherry_MiniMax-H3配置文件全解析:model_type与architectures参数设置指南

PinkCherry_MiniMax-H3配置文件全解析:model_type与architectures参数设置指南 【免费下载链接】PinkCherry_MiniMax-H3 项目地址: https://ai.gitcode.com/hf_mirrors/SexGod1979/PinkCherry_MiniMax-H3 PinkCherry_MiniMax-H3是一款强大的音视频生成模型&…

2026/8/9 19:32:54 阅读更多 →
MediaCrawler:一站式社交媒体数据采集终极指南,轻松获取小红书、抖音、快手、B站、微博五大平台数据

MediaCrawler:一站式社交媒体数据采集终极指南,轻松获取小红书、抖音、快手、B站、微博五大平台数据

MediaCrawler:一站式社交媒体数据采集终极指南,轻松获取小红书、抖音、快手、B站、微博五大平台数据 【免费下载链接】MediaCrawler-new 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new 还在为社交媒体数据采集而烦恼吗&am…

2026/8/9 19:31:53 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →