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 安装情况,这里只提供参考。
brew install ffmpeg
编译过程推荐使用 cmake,方便我们引用 FFMPEG 的头文件、库等。
代码组织结构如下:
ffmpeg_audio_tutorial
├── 0_hello_ffmpeg.cpp
├── CMakeLists.txt
└── cmake
└── FindFFMPEG.cmake
其中
find_package
准备的文件,让我们方便找到 FFMPEG 相关组件。这个文件我直接从其他地方 copy 的。原地址在这里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 相关组件和头文件等信息
#if defined(__cplusplus)
extern "C"
{
#endif
#include
#if defined(__cplusplus)
}
#endif
#include
using namespace std;
int main()
{
cout << "avcodec_configuration : " << avcodec_configuration() << endl;
return 0;
}
上述代码中:
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 的构建信息。
转载请注明出处:https://blog.csdn.net/weiwei9363/article/details/108547901