windows 使用ffmpeg .a静态库:读取Wav音频并保存PCM

ffmpeg读取Wav音频并保存PCM(源代码保存成 c 文件):

// test_ffmpeg.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
////#include <iostream>#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
//#pragma comment(lib, "libavdevice.a")
//#pragma comment(lib, "libavformat.a")
//#pragma comment(lib, "libavutil.a")
//#pragma comment(lib, "libavcodec.a")
//#pragma comment(lib, "libavfilter.a")
//#pragma comment(lib, "libswresample.a")
//#pragma comment(lib, "libswscale.a")int main(int arvc, char*argv[]) {//av_register_all();printf("start...\n");AVFormatContext* formatCtx = NULL;const AVInputFormat* inputFmt = av_find_input_format(arvc > 1 ? argv[1] : "FLAC");int ret = 0;printf("format name: %s, long name; %s\n", inputFmt->name, inputFmt->long_name);// 打开输入流if ((ret = avformat_open_input(&formatCtx, "D:\\project\\ffmpeg-6.1.1\\test_in.wav", inputFmt, NULL)) != 0) {printf("Unable to open input stream: %s\n", av_err2str(ret));return -1;}// 查找音频流信息if (avformat_find_stream_info(formatCtx, NULL) < 0) {printf("Unable to find audio stream information: %s\n", av_err2str(ret));return -1;}// 寻找第一个音频流索引int audioStreamIndex = av_find_best_stream(formatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);if (audioStreamIndex < 0) {printf("Unable to find audio stream: %s\n", av_err2str(ret));return -1;}//const AVCodecContext* codecCtx = formatCtx->streams[audioStreamIndex]->codec;AVCodecContext* pCodecCtx = avcodec_alloc_context3(NULL);if (pCodecCtx == NULL){printf("Could not allocate AVCodecContext: %s\n", av_err2str(ret));return -1;}avcodec_parameters_to_context(pCodecCtx, formatCtx->streams[audioStreamIndex]->codecpar);// 打开解码器const AVCodec* codec = avcodec_find_decoder(pCodecCtx->codec_id);if (avcodec_open2(pCodecCtx, codec, NULL) < 0) {printf("Unable to open decoder: %s\n", av_err2str(ret));return -1;}// 创建输出文件FILE* outputFile = fopen("output.pcm", "wb");AVPacket packet;printf("start read frame...\n");while ((ret = av_read_frame(formatCtx, &packet)) == 0) {// 如果数据包是音频数据if (packet.stream_index == audioStreamIndex) {AVFrame* frame = av_frame_alloc();int gotFrame = 0;printf("read frame...index %d\n", audioStreamIndex);// 解码音频帧//avcodec_decode_audio4(pCodecCtx, frame, &gotFrame, &packet);if (avcodec_send_packet(pCodecCtx, &packet) < 0|| (gotFrame = avcodec_receive_frame(pCodecCtx, frame)) < 0) {return -1;}printf("read frame...gotFrame = %d, frame size %d, frame pointer 0x%x\n", (ret), frame->linesize[0], frame->data[0]);if (gotFrame == 0) {// 处理解码后的音频数据,例如写入文件等fwrite(frame->data[0], 1, frame->linesize[0], outputFile);}av_frame_free(&frame);}//av_free_packet(&packet);av_packet_unref(&packet);}printf("read frame end. ret = %s\n", av_err2str(ret));fclose(outputFile);avformat_close_input(&formatCtx);return 0;
}// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

编译命令(使用windows 下的 MSYS2 UCRT64 工具):

gcc -c test.c -o test.o -I./ffmpeg-bin/include gcc -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--nxcompat,--dynamicbase -Wl,--high-entropy-va -Wl,--as-needed -Wl,--warn-common -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil  -Wl,--image-base,0x140000000 -o test_g test.o -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil  -lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi -lgdi32 -lm -latomic -lvfw32 -lm -latomic -lm -latomic -lz -lsecur32 -lws2_32 -liconv -lm -latomic -lmfuuid -lole32 -lstrmiids -lole32 -luser32 -lz -lm -latomic -lm -latomic -lm -luser32 -lbcrypt -latomic  -lole32 -lpsapi -lshell32strip -o test_1.exe test_g.exe# 使用upx压缩应用(需要windows终端执行)
upx.exe -9 -o test.exe test_1.exerm -rf test_g.exe test_1.exe./test.exe

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

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

相关文章

【MySQL使用】show processlist 命令详解

show processlist 命令详解 一、命令含义二、命令返回参数三、Command值解释四、State值解释五、参考资料 一、命令含义 对于一个MySQL连接&#xff0c;或者说一个线程&#xff0c;任何时刻都有一个状态&#xff0c;该状态表示了MySQL当前正在做什么。SHOW PROCESSLIST 命令的…

SpringBoot接口防抖(防重复提交)的一些实现方案

前言 啥是防抖 思路解析 分布式部署下如何做接口防抖&#xff1f; 具体实现 请求锁 唯一key生成 重复提交判断 前言 作为一名老码农&#xff0c;在开发后端Java业务系统&#xff0c;包括各种管理后台和小程序等。在这些项目中&#xff0c;我设计过单/多租户体系系统&a…

在Linux中使用docker【上】(docker、nvidia-docker安装)

在Linux中使用docker【上】&#xff08;docker、nvidia-docker安装&#xff09; 一、Docker介绍二、在Linux中使用Docker的意义2.1 轻量级与资源高效2.2 快速部署与版本控制2.3 隔离与安全2.4 简化运维2.5 跨平台兼容2.6 持续集成与持续部署&#xff08;CI/CD&#xff09; 三、…

软考中级系统集成必备100题(41-60)真题精炼

文章目录 41.控制进度采用的工具和技术有哪些&#xff1f;42.简述项目成本管理的过程&#xff1f;43.简述项目成本控制点主要内容&#xff1f;44.什么是应急储备和管理储备&#xff1f;45.简述项目质量管理包括哪些过程&#xff1f;46.请简述对质量与等级的认识&#xff1f;47.…

springboot+bootstrap+jsp校园二手书交易平台mlg86

考虑到实际生活中在校园二手书交易系统方面的需要以及对该系统认真的分析,将系统权限按管理员和学生这两类涉及用户划分。 (a) 管理员&#xff1b;管理员使用本系统涉到的功能主要有个人中心、学生管理、图书类型管理、二手图书管理、通知公告管理、管理员管理、用户留言、系统…

Linux操作系统已成为技术领域的一块重要基石

在数字时代&#xff0c;Linux操作系统已成为技术领域的一块重要基石&#xff0c;无论是开发者、系统管理员还是普通技术爱好者&#xff0c;Linux都扮演着不可或缺的角色。本文旨在为读者提供一个关于Linux常用命令的全面概览&#xff0c;帮助大家更高效地使用Linux系统。 Linu…

Windows Docker 部署 MySQL

部署 MySQL 打开 Docker Desktop&#xff0c;切换到 Linux 容器。然后在 PowerShell 执行下面命令&#xff0c;即可启动一个 MySQL 服务。这里安装的是 8.3.0 Tag版本&#xff0c;如果需要安装其他或者最新版本&#xff0c;可以到 Docker Hub 进行查找。 docker run -itd --n…

DC电源模块的 PCB设计和布局指南

BOSHIDA DC电源模块的 PCB设计和布局指南 DC电源模块的PCB设计和布局是一个关键的步骤&#xff0c;它直接影响到电源的性能和稳定性。下面是一些DC电源模块的PCB设计和布局的指南&#xff1a; 1. 选择合适的PCB尺寸和层数&#xff1a;根据电源模块的尺寸和功能需求&#xff0…

【SPDK】SPDK + fio编译、测试(包成功版)

准备使用fio对spdk做性能测试的时候,查阅网上的其他资料,发现基本上都没有直接能跑出来的。 经过自己的摸索,跑通了。特此记录一下整个过程,方便其他人参考。 一、 fio 编译 首先需要做的是fio的编译。 1、 下载fio源码 git clone https://github.com/axboe/fio.git 注…

蓝桥杯前端Web赛道-新鲜的蔬菜

蓝桥杯前端Web赛道-新鲜的蔬菜 题目链接&#xff1a;1.新鲜的蔬菜 - 蓝桥云课 (lanqiao.cn) 题目要求如下&#xff1a; 其实很容易联想到使用flex布局&#xff0c;这是flex布局一种非常经典的骰子布局&#xff0c;推荐Flex 布局教程&#xff1a;实例篇 - 阮一峰的网络日志 (r…

【python课程作业】python学生成绩管理系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。给舍友做的课程作业。 功能包括&#xff1a;成绩管理、学生管理、课程管理、班级管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.co…

Android m/mm/mmm/make编译模块

一.编译成模块的前置条件 Android编译环境初始化完成后&#xff0c;我们就可以用m/mm/mmm/make命令编译源代码了。lunch命令其实是定义在build/envsetup.sh文件中的函数lunch提供的。与lunch命令一样&#xff0c;m、mm和mmm命令也分别是由定义在build/envsetup.sh文件中的函数…

JD商品详情API:电商新宠,助力商家提升销售效率

JD商品详情API&#xff08;Application Programming Interface&#xff09;是一种为电商行业提供的接口服务&#xff0c;它允许商家或开发者从京东平台获取商品详情信息&#xff0c;进而将这些信息整合到自己的系统或应用中&#xff0c;以实现诸如商品比价、商品推荐、数据分析…

C#,电话数字键盘问题(Mobile Numeric Keypad problem)的算法与源代码

1 电话数字键盘问题 提供移动数字键盘。您只能按向上、向左、向右或向下至当前按钮的按钮。不允许您按最下面一行的角点按钮&#xff08;即.*和#&#xff09;。 移动键盘 给定一个数N&#xff0c;找出给定长度的可能数。 示例&#xff1a; 对于N1&#xff0c;可能的数字数为…

【 HTML 及浏览器 】前端跨页面通信

前端跨页面通信&#xff1a;连接分散界面的纽带 在构建复杂的前端应用时&#xff0c;我们常常需要在不同的页面之间进行数据通信。无论是同源页面还是非同源页面&#xff0c;通信机制都是实现多页面数据同步和交互的关键。本文将探讨各种前端跨页面通信的方法&#xff0c;并提…

迷不迷糊?前后端、三层架构和MVC傻傻分不清

现在的项目都讲究前后端分离&#xff0c;那到底什么是前后端&#xff0c;前后端和以前的MVC以及三层架构啥关系呢&#xff1f;今天就这个问题展开一下&#xff0c;方面后面的学习&#xff0c;因为前面讲的jsp、servlet和javabean根据实例&#xff0c;基本上有一个框架的理解了&…

经纬恒润线控制动系统,新能源智能汽车的未来标配

随着汽车电动化、智能化的发展&#xff0c;制动系统迎来新一轮变革。在新能源车型尤其是新能源智能汽车中&#xff0c;智能底盘系统在底盘融合控制、整车安全方面重要性越来越高&#xff0c;线控制动属于智能底盘的重要部分&#xff0c;凭借着快速响应和精确执行的优势&#xf…

YOLOV9论文解读

代码&#xff1a;https://github.com/WongKinYiu/yolov9论文&#xff1a;https://arxiv.org/abs/2402.1361本文提出可编程梯度信息(PGI)和基于梯度路径规划的通用高效层聚合网络(GELAN)&#xff0c;最终铸成YOLOv9目标检测全新工作&#xff01;性能表现SOTA&#xff01;在各个方…

PCL中的点云分割模型的部分常用参数含义

PCL中的SacModel类别常用参数含义 1、SACMODEL_PLANE2、SACMODEL_LINE&#xff08;三维直线&#xff09;3、SACMODEL_CIRCLE2D&#xff08;二维圆&#xff09;4、SACMODEL_CIRCLE3D&#xff08;三维圆&#xff09;5、SACMODEL_SPHERE&#xff08;球&#xff09;6、SACMODEL_CYL…

《数字图像处理(MATLAB版)》相关算法代码及其分析(2)

目录 1 将8连通边界转换为4连通边界 1.1 移除对角线转折 1.2 插入额外像素 2 将边界信息转换为二进制图像 2.1 函数定义 2.2 参数处理和验证 2.3 默认大小参数设置 2.4 根据参数调整边界位置 2.5 生成二进制图像 2.6 错误处理 3 对二值图像边界的跟踪和提取 3.1 函…