基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译
Hello FFMPEG
- 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译
- 基于 FFMPEG 的音频编解码(二):音频解码
- 基于 FFMPEG 的音频编解码(三):音频编码
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序
作为一名音频开发人员,最近在学习如何使用 FFMPEG 进行音频的编解码。网上大多数资料基于视频,在音频侧介绍较少,或者代码年代久远,已经跑不通了
摸索一段时间后,我掌握了如何利用 FFMPEG 进行音频编解码的正确姿势,在此博客中记录。各位看官如发现有错误的地方,请留言指出,感激不尽。
本文中,主要介绍如何安装 FFEMPG 以及运行如何正确调用 FFEMPG
安装
准确的说是安装 FFMPEG SDK
FFMPEG 除了一套 SDK 外,还包括一个可执行文件,利用它可以在不用编程的情况实现音视频的一些操作。举个例子,我们可以转换音频的格式:
ffmpeg -i input.mp3 output.wma
关于 FFMPEG 命令的使用,参考 官网文档-ffmpeg tool 或者这个 ffmpeg gist
作为开发人员,需要在我们的程序中利用 FFMPEG 进行音视频编解码等操作,这时候就要让 FFMPEG SDK 登场了。下面介绍如何在不同平台安装 FFMPEG。由于本人手头只有一台 Mac,无法验证 Linux 和 Windows 安装情况,这里只提供参考。
MacOS
brew install ffmpeg
Linux
- Linux 安装 ffmpeg
Windows
- win下linux子系统wsl怎么安装ffmpeg
Hello FFMPEG
编译过程推荐使用 cmake,方便我们引用 FFMPEG 的头文件、库等。
代码组织结构如下:
ffmpeg_audio_tutorial
├── 0_hello_ffmpeg.cpp
├── CMakeLists.txt
└── cmake└── FindFFMPEG.cmake
其中
- CMakeLists.txt 根目录 cmake 文件
- FindFFMPEG.cmake 为
find_package
准备的文件,让我们方便找到 FFMPEG 相关组件。这个文件我直接从其他地方 copy 的。原地址在这里 - 0_hello_ffmpeg.cpp 源码文件
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)project(ffmepg_audio_tutorial)list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")find_package(FFMPEG REQUIRED)
if(NOT FFMPEG_FOUND)message(ERROR "Cannot find ffmpeg")
else()message(STATUS "Found ffmpeg")message(STATUS "ffmpeg include dir is ${FFMPEG_INCLUDE_DIRS}")message(STATUS "ffmpeg libraries are ${FFMPEG_LIBRARIES}")
endif()add_executable(hello_ffmpeg 0_hello_ffmpeg.cpp)
target_include_directories(hello_ffmpeg PRIVATE ${FFMPEG_INCLUDE_DIRS})
target_link_libraries(hello_ffmpeg PRIVATE ${FFMPEG_LIBRARIES})
上述的 cmake 中:
- 首先在
CMAKE_MODULE_PATH
添加搜索路径 find_package
去找到 ffmpeg 相关组件和头文件等信息
0_hello_ffmpeg.cpp
#if defined(__cplusplus)
extern "C"
{#endif
#include <libavcodec/avcodec.h>
#if defined(__cplusplus)
}
#endif#include <iostream>using namespace std;int main()
{cout << "avcodec_configuration : " << avcodec_configuration() << endl;return 0;
}
上述代码中:
- 如果用的 C++ 编译,注意用
extern "C"
将 ffmpeg 头文件包起来 avcodec_configuration()
来显示 ffmpeg 构建信息
如果一切顺利,运行上面这个代码,你会得到类似的结果:
avcodec_configuration : --prefix=/usr/local/Cellar/ffmpeg/4.3.1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
完整的代码已上传至 github,欢迎 star : https://github.com/jiemojiemo/ffmepg_audio_tutorial
总结
我们介绍了 FFMPEG 命令行和 FFMPEG 的区别,已经如何安装它们。接着,利用 cmake 去构建 hello ffmepg 程序,一切顺利的话,可以得到 FFMPEG 的构建信息。
完整代码已上传至 github,欢迎 star:
https://github.com/jiemojiemo/ffmepg_audio_tutorial
转载请注明出处:https://blog.csdn.net/weiwei9363/article/details/108547901
参考资料
- 官网文档-ffmpeg tool
- ffmpeg gist
- 【FFmpeg】Hello World!尝试如何编译FFmpeg程序
基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译相关推荐
- 基于 FFMPEG 的音频编解码(三):音频编码
音频编码 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编码 在前面文章中 ...
- 基于 FFMPEG 的音频编解码(二):音频解码
音频解码 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编码 在 Hell ...
- FFMPEG视音频编解码学习(1)
###开篇 看过了FFMPEG视音频编解码的基础知识,接着还有许多比如制作一个基于FFMPEG的视频播放器等,但是好像比较抽象,而且在公司的mac上很多软件也没有(重点是看的一头雾水), 还是老老实实 ...
- 基于 CoreAudio 的音频编解码(一):音频解码
系列文章目录 基于 CoreAudio 的音频编解码(一):音频解码 基于 CoreAudio 的音频编解码(二):音频编码 前言 Core Audio 是iOS和MAC系统中的关于数字音频处理的基础 ...
- FFMPEG视音频编解码零基础学习方法
总结]FFMPEG视音频编解码零基础学习方法 在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的"大神",有的是刚 ...
- 音视频开发(5)---FFMPEG视音频编解码零基础学习方法
FFMPEG视音频编解码零基础学习方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/leixiaohua1020/article/details/ ...
- FFMPEG视音频编解码
转自:http://blog.csdn.net/leixiaohua1020/article/details/15811977 [总结]FFMPEG视音频编解码零基础学习方法 标签: ffmpeg编解 ...
- 基于 CoreAudio 的音频编解码(二):音频编码
系列文章目录 基于 CoreAudio 的音频编解码(一):音频解码 基于 CoreAudio 的音频编解码(二):音频编码 前言 在 基于 CoreAudio 的音频编解码(一):音频解码 中,我们 ...
- [总结]FFMPEG视音频编解码零基础学习方法--转
ffmpeg编解码学习 目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ff ...
最新文章
- Redpine的Lite-Fi解决方案获Wi-Fi CERTIFIED认证
- Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?...
- Python访问MySQL数据库并实现其增删改查功能
- 从零开始,带你玩转一站式实时数仓Hologres
- 教你如何利用EXCEL制作动态仪表盘
- MySQL 输入任何语句都提示You must reset your password using ALTER USER 解决方法
- 两本电子书 |Flink 最佳学习实践 | 从 0 到 1 学会 Apache Flink
- C++_类和对象_C++继承_继承中的构造和析构顺序---C++语言工作笔记064
- 【POJ Challenge】生日礼物 加强m子段和
- keras 多分类一些函数参数设置
- linux simhei 字体下载,Linux CentOS 7 安装 字体库文件(simsun.ttf、simheittf.ttf)
- jeesite中日期插件
- stc15f2k60f2单片机定时器_8 STC15F2K60S2单片机的定时器计数器 例题
- 微信小程序下拉刷新事件无效原因
- zynq-7000系列基于zynq-zed的vivado初步设计之使用jtag-uart(MDM)
- 阿里云云效平台提交代码
- Java学习总结3——枚举类和反射机制
- java如何开发游戏大厅_java仿qq游戏大厅的设计与实现
- xp系统dns服务器异常请稍后再试,xp系统网页“无法解析服务器的dns地址”的详细办法...
- 经典神经网络分类器之BP算法和自组织竞争网络
热门文章
- 商务搜索引擎_网络营销外包——网络营销外包公司如何做好电子商务网站优化?...
- java小工程_Java进阶:阶段性小工程
- 若有下列共用体定义_危险品运输包装定义有哪些?你需要了解的在这里
- python html模板_Python html.format_html方法代码示例
- android显示多个网络图片不显示,Android显示网络图片实例
- java计算加速减速_java – 使用JOCL / OPENCL计算强度的加速总和
- 使用HttpClient发送WebService Security(WSS)请求
- 英语学习笔记2019-11-22
- Flex布局演示01
- 【HNOI2004】【codevs1256】【BZOJ1207】打鼹鼠,小小DP