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,安装与编译相关推荐

  1. 基于 FFMPEG 的音频编解码(三):音频编码

    音频编码 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编码 在前面文章中 ...

  2. 基于 FFMPEG 的音频编解码(二):音频解码

    音频解码 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编码 在 Hell ...

  3. FFMPEG视音频编解码学习(1)

    ###开篇 看过了FFMPEG视音频编解码的基础知识,接着还有许多比如制作一个基于FFMPEG的视频播放器等,但是好像比较抽象,而且在公司的mac上很多软件也没有(重点是看的一头雾水), 还是老老实实 ...

  4. 基于 CoreAudio 的音频编解码(一):音频解码

    系列文章目录 基于 CoreAudio 的音频编解码(一):音频解码 基于 CoreAudio 的音频编解码(二):音频编码 前言 Core Audio 是iOS和MAC系统中的关于数字音频处理的基础 ...

  5. FFMPEG视音频编解码零基础学习方法

    总结]FFMPEG视音频编解码零基础学习方法 在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的"大神",有的是刚 ...

  6. 音视频开发(5)---FFMPEG视音频编解码零基础学习方法

    FFMPEG视音频编解码零基础学习方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/leixiaohua1020/article/details/ ...

  7. FFMPEG视音频编解码

    转自:http://blog.csdn.net/leixiaohua1020/article/details/15811977 [总结]FFMPEG视音频编解码零基础学习方法 标签: ffmpeg编解 ...

  8. 基于 CoreAudio 的音频编解码(二):音频编码

    系列文章目录 基于 CoreAudio 的音频编解码(一):音频解码 基于 CoreAudio 的音频编解码(二):音频编码 前言 在 基于 CoreAudio 的音频编解码(一):音频解码 中,我们 ...

  9. [总结]FFMPEG视音频编解码零基础学习方法--转

    ffmpeg编解码学习 目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ff ...

最新文章

  1. Redpine的Lite-Fi解决方案获Wi-Fi CERTIFIED认证
  2. Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?...
  3. Python访问MySQL数据库并实现其增删改查功能
  4. 从零开始,带你玩转一站式实时数仓Hologres
  5. 教你如何利用EXCEL制作动态仪表盘
  6. MySQL 输入任何语句都提示You must reset your password using ALTER USER 解决方法
  7. 两本电子书 |Flink 最佳学习实践 | 从 0 到 1 学会 Apache Flink
  8. C++_类和对象_C++继承_继承中的构造和析构顺序---C++语言工作笔记064
  9. 【POJ Challenge】生日礼物 加强m子段和
  10. keras 多分类一些函数参数设置
  11. linux simhei 字体下载,Linux CentOS 7 安装 字体库文件(simsun.ttf、simheittf.ttf)
  12. jeesite中日期插件
  13. stc15f2k60f2单片机定时器_8 STC15F2K60S2单片机的定时器计数器 例题
  14. 微信小程序下拉刷新事件无效原因
  15. zynq-7000系列基于zynq-zed的vivado初步设计之使用jtag-uart(MDM)
  16. 阿里云云效平台提交代码
  17. Java学习总结3——枚举类和反射机制
  18. java如何开发游戏大厅_java仿qq游戏大厅的设计与实现
  19. xp系统dns服务器异常请稍后再试,xp系统网页“无法解析服务器的dns地址”的详细办法...
  20. 经典神经网络分类器之BP算法和自组织竞争网络

热门文章

  1. 商务搜索引擎_网络营销外包——网络营销外包公司如何做好电子商务网站优化?...
  2. java小工程_Java进阶:阶段性小工程
  3. 若有下列共用体定义_危险品运输包装定义有哪些?你需要了解的在这里
  4. python html模板_Python html.format_html方法代码示例
  5. android显示多个网络图片不显示,Android显示网络图片实例
  6. java计算加速减速_java – 使用JOCL / OPENCL计算强度的加速总和
  7. 使用HttpClient发送WebService Security(WSS)请求
  8. 英语学习笔记2019-11-22
  9. Flex布局演示01
  10. 【HNOI2004】【codevs1256】【BZOJ1207】打鼹鼠,小小DP