给人做网站赚钱吗,动漫设计师,宁波好的网站推广软件,哇哈哈电子商务网站建设策划书文章目录 前言前提须知为什么要自己编译 FFmpeg前提软件包与工具的安装编译ffmpeg写CMakeList.txt包含ffmpeg到我们项目中 总结 前言
FFmpeg 是一个领先的多媒体框架#xff0c;能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有人类和机器创造的内容。FFmpeg 包… 文章目录 前言前提须知为什么要自己编译 FFmpeg前提软件包与工具的安装编译ffmpeg写CMakeList.txt包含ffmpeg到我们项目中 总结 前言
FFmpeg 是一个领先的多媒体框架能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有人类和机器创造的内容。FFmpeg 包含 libavcodec这是一个可以用来处理音频和视频数据的强大库。本文将介绍如何在 Ubuntu 上编译 FFmpeg并创建一个使用 CMake 的示例项目以验证 FFmpeg 库的正确安装和配置。 前提须知
其实我们不必自己编译ffmpeg如果你的ubuntu已经安装了ffmpeg的话你可以在/usr/include/x86_64-linux-gnu找到ffmpeg的头文件。在/usr/lib/x86_64-linux-gnu里面可以找到.a静态库
如果你使用这种方式你可以有下面这个CMakeLists.txt文件
cmake_minimum_required(VERSION 3.10)
project(ffmpeg_test)# 设置C标准
set(CMAKE_C_STANDARD 99)# 查找FFmpeg库
find_package(PkgConfig REQUIRED)
pkg_check_modules(AVFORMAT REQUIRED libavformat)
pkg_check_modules(AVCODEC REQUIRED libavcodec)
pkg_check_modules(AVUTIL REQUIRED libavutil)# 包含FFmpeg头文件路径
include_directories(${AVFORMAT_INCLUDE_DIRS})
include_directories(${AVCODEC_INCLUDE_DIRS})
include_directories(${AVUTIL_INCLUDE_DIRS})# 添加可执行文件
add_executable(ffmpeg_test main.c)# 链接FFmpeg库
target_link_libraries(ffmpeg_test ${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES} ${AVUTIL_LIBRARIES})并有这样的main文件
#include stdio.h
#include include/libavcodec/avcodec.h
#include include/libavformat/avformat.h
#include include/libavutil/avutil.hint main() {printf(FFmpeg version: %s\n, av_version_info());return 0;
}我们可以通过cmake ..make的操作来得到可执行文件
ubuntuubuntu-virtual-machine:~/MyFFMPEG/template_c$ ls
build CMakeLists.txt include lib main.c
ubuntuubuntu-virtual-machine:~/MyFFMPEG/template_c$ cd build/
ubuntuubuntu-virtual-machine:~/MyFFMPEG/template_c/build$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ubuntu/MyFFMPEG/template_c/build
ubuntuubuntu-virtual-machine:~/MyFFMPEG/template_c/build$ make
Consolidate compiler generated dependencies of target ffmpeg_test
[100%] Built target ffmpeg_test
ubuntuubuntu-virtual-machine:~/MyFFMPEG/template_c/build$ ./ffmpeg_test
FFmpeg version: 7.0.1
ubuntuubuntu-virtual-machine:~/MyFFMPEG/template_c/build$ 为什么要自己编译 FFmpeg
自己编译 FFmpeg 而不是使用预编译包有几个主要原因 最新版本 预编译包通常与发行版的发布周期一致可能并不是最新的。通过自己编译可以确保使用最新的 FFmpeg 版本获取最新的特性和修复。 自定义配置 编译 FFmpeg 时可以指定各种配置选项例如启用或禁用特定的编码器、解码器、滤镜或其他组件。这对于需要定制功能的项目尤为重要。 优化性能 可以根据目标硬件的架构进行特定的编译优化例如启用高级的 CPU 指令集如 AVX、SSE以提高性能。 减少依赖 预编译包可能包含不需要的功能和依赖项通过自己编译可以仅包含项目所需的功能从而减少不必要的依赖和潜在的安全风险。 集成第三方库 有时需要与其他第三方库集成例如 NVIDIA CUDA、Intel Quick Sync Video 等通过自己编译可以轻松实现这些集成。
通过自己编译 FFmpeg可以更好地控制其功能和性能满足特定项目的需求。
前提软件包与工具的安装
首先你需要在ffmpeg code download下载ffmpeg源码如果你需要其他版本可以在More releases里面找到 然后你需要使用下面这个命令安装SDL2
sudo apt install libsdl2-dev之后你需要安装aptitude
sudo apt install aptitudeyasm、nasm是两个汇编器编译 FFmpeg 需要用到。
sudo aptitude install yasm nasm最后你需要安装这些 FFmpeg 的安装依赖许多库如音频编码库音频解码库视频编解码库等这里不介绍每个库的具体作用按照命令安装即可。
sudo apt-get install libgmp3-dev
sudo apt install pkg-config
sudo apt install gnutls-bin
sudo aptitude install libaom-dev
sudo aptitude install libass-dev
sudo aptitude install libbluray-dev
sudo aptitude install libfdk-aac-dev
sudo aptitude install libmp3lame-dev
sudo aptitude install libopencore-amrnb-dev
sudo aptitude install libopencore-amrwb-dev
sudo aptitude install libopenmpt-dev
sudo aptitude install libopus-dev
sudo aptitude install libshine-dev
sudo aptitude install libsnappy-dev
sudo aptitude install libsoxr-dev
sudo aptitude install libspeex-dev
sudo aptitude install libtheora-dev
sudo aptitude install libtwolame-dev
sudo aptitude install libvo-amrwbenc-dev
sudo aptitude install llibvpx-dev
sudo aptitude install libwavpack-dev
sudo aptitude install libwebp-dev
sudo aptitude install libx264-dev
sudo aptitude install libx265-dev
sudo aptitude install libxvidcore-dev
sudo aptitude install liblzma-dev编译ffmpeg
首先你需要先新建一个文件夹用来保存编译后存放的内容
然后终端打开ffmpeg源码文件夹
./configure --prefix/home/ubuntu/runffmpeg/FFMPEG --enable-shared输出
ubuntuubuntu-virtual-machine:~/runffmpeg/ffmpeg-7.0.1$ ./configure --prefix/home/ubuntu/runffmpeg/FFMPEG --enable-shared
install prefix /home/ubuntu/runffmpeg/FFMPEG
source path .
C compiler gcc
C library glibc
ARCH x86 (generic)
big-endian no
runtime cpu detection yes
standalone assembly yes
x86 assembler nasm
MMX enabled yes
MMXEXT enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
AESNI enabled yes
AVX enabled yes
AVX2 enabled yes
AVX-512 enabled yes
AVX-512ICL enabled yes
XOP enabled yes
FMA3 enabled yes
FMA4 enabled yes
i686 features enabled yes
CMOV is fast yes
EBX available yes
EBP available yes
debug symbols yes
strip symbols yes
optimize for size no
optimizations yes
static yes
shared yes
postprocessing support no
network support yes
threading support pthreads
safe bitstream reader yes
texi2html enabled no
perl enabled yes
pod2man enabled yes
makeinfo enabled yes
makeinfo supports HTML yes
xmllint enabled noExternal libraries:
alsa libxcb_shape lzma xlib
iconv libxcb_shm sdl2 zlib
libxcb libxcb_xfixes sndio
//省略.....................................
External libraries providing hardware acceleration:
libdrm v4l2_m2m vaapi vdpauLibraries:
avcodec avfilter avutil swscale
avdevice avformat swresamplePrograms:
ffmpeg ffplay ffprobe
//省略............................................
Enabled indevs:
alsa kmsgrab oss v4l2
fbdev lavfi sndio xcbgrabEnabled outdevs:
alsa oss sndio xv
fbdev sdl2 v4l2License: LGPL version 2.1 or later紧接着你需要使用:
sudo make-jxx其中xx是你Ubuntu cpu核心数 比如我是12则是sudo make-j12 如果不这样写就会编译的很慢
最后使用:
sudo make install即可完成
ubuntuubuntu-virtual-machine:~/runffmpeg/FFMPEG$ tree -L 2
.
├── bin
│ ├── ffmpeg
│ ├── ffplay
│ └── ffprobe
├── include
│ ├── libavcodec
│ ├── libavdevice
│ ├── libavfilter
│ ├── libavformat
│ ├── libavutil
│ ├── libswresample
│ └── libswscale
├── lib
│ ├── libavcodec.a
│ ├── libavcodec.so - libavcodec.so.61.3.100
│ ├── libavcodec.so.61 - libavcodec.so.61.3.100
│ ├── libavcodec.so.61.3.100
│ ├── libavdevice.a
│ ├── libavdevice.so - libavdevice.so.61.1.100
│ ├── libavdevice.so.61 - libavdevice.so.61.1.100
│ ├── libavdevice.so.61.1.100
│ ├── libavfilter.a
│ ├── libavfilter.so - libavfilter.so.10.1.100
│ ├── libavfilter.so.10 - libavfilter.so.10.1.100
│ ├── libavfilter.so.10.1.100
│ ├── libavformat.a
│ ├── libavformat.so - libavformat.so.61.1.100
│ ├── libavformat.so.61 - libavformat.so.61.1.100
│ ├── libavformat.so.61.1.100
│ ├── libavutil.a
│ ├── libavutil.so - libavutil.so.59.8.100
│ ├── libavutil.so.59 - libavutil.so.59.8.100
│ ├── libavutil.so.59.8.100
│ ├── libswresample.a
│ ├── libswresample.so - libswresample.so.5.1.100
│ ├── libswresample.so.5 - libswresample.so.5.1.100
│ ├── libswresample.so.5.1.100
│ ├── libswscale.a
│ ├── libswscale.so - libswscale.so.8.1.100
│ ├── libswscale.so.8 - libswscale.so.8.1.100
│ ├── libswscale.so.8.1.100
│ └── pkgconfig
└── share├── doc├── ffmpeg└── man15 directories, 31 files这里面是我们需要的东西了我们需要include和lib(*.a)里面的东西
写CMakeList.txt包含ffmpeg到我们项目中
下面就是我们的CMakeLists.txt文件了你需要把include和lib文件夹放到CMakeLists.txt同级目录下
cmake_minimum_required(VERSION 3.10)
project(ffmpeg_test C)# 设置 C 标准
set(CMAKE_C_STANDARD 99)# 指定 FFmpeg 的头文件和库文件目录
set(FFMPEG_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include)
set(FFMPEG_LIB_DIR ${CMAKE_SOURCE_DIR}/lib)# 包含 FFmpeg 头文件目录
include_directories(${FFMPEG_INCLUDE_DIR})# 查找 FFmpeg 库
link_directories(${FFMPEG_LIB_DIR})# 添加可执行文件
add_executable(ffmpeg_test main.c)# 链接 FFmpeg 库
target_link_libraries(ffmpeg_testavcodecavformatavutil
)# 为了支持动态库可以添加 -Wl,-rpath${FFMPEG_LIB_DIR} 选项
set_target_properties(ffmpeg_test PROPERTIESLINK_FLAGS -Wl,-rpath,${FFMPEG_LIB_DIR}
) 总结
通过本文的步骤我们成功地在 Ubuntu 系统上编译并安装了 FFmpeg。我们还创建了一个简单的 CMake 项目使用 FFmpeg 库实现了一个基础的应用程序验证了库的安装和配置。本文提供的方法不仅适用于 FFmpeg也可以作为其他 C/C 库的编译和集成的参考。通过这样的实践开发者能够更好地掌握库的使用和项目构建的技巧为后续开发打下坚实的基础。