IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 用 VS2019 编译带 libx264 libmp3lame 的 FFmpeg 库 -> 正文阅读

[人工智能]用 VS2019 编译带 libx264 libmp3lame 的 FFmpeg 库

一 前言

上一期,《用 Visual Studio 2019 编译 FFmpeg 简单教程》讲述了,如何用 Visual Studio 2019 编译构建 FFmpeg,用来学习 FFmpeg。

本人平时喜欢把一些视频文件转码保存,使用的编码器分别是:视频用 libx264,音频用?libmp3lame。但是基于默认配置而编译的 ffmpeg 不包含这俩编码器,他们属于第三方编码器,所以要自己下载这俩编码器的源码,自己先编译成库供FFmpeg使用。

二 准备

lame:

官网在这里 https://lame.sourceforge.io/
页面链接到这里:https://sourceforge.net/projects/lame/files/lame/
本人下载的版本是 3.100 ( lame-3.100.tar.gz )

x264:

通过 git 克隆一份
git clone http://git.videolan.org/git/x264.git

FFmpeg就用上一篇文章用的 ffmpeg 4.4。在弄之前,建议先设置好目录布局,本人的是:

三 编译?

● 编译 x264

cd /g/FFmpegAbout/
mkdir x264building
cd x264building
CC=cl ../x264/configure --enable-static --enable-shared --disable-cli --enable-debug --disable-asm --prefix=`pwd`/../x264build
make && make install

● 编译 lame

?修改 <lame_src_path>\include\libmp3lame.sym 把,确保第二行内容【lame_init_old】删掉

cd /g/FFmpegAbout/
mkdir lamebuilding
cd lamebuilding
CC=cl ../lame-3.100/configure --enable-shared --enable-static --enable-debug=alot --prefix=`pwd`/../lamebuild
make && make install

● 编译 FFmepg

cd /g/FFmpegAbout/
mkdir ffmpegbuilding
cd ffmpegbuilding
echo 编辑 build.sh 文件,并执行
./build.sh

原始 build.sh 文件内容如下:

#!/bin/sh

../ffmpeg-4.4/configure \
	--prefix=`pwd`/../ffmpegbuild \
	--toolchain=msvc \
	--enable-gpl \
	--enable-version3 \
	--disable-stripping \
	--disable-asm \
	--enable-shared \
	--enable-libmp3lame \
	--extra-cflags="-I`pwd`/../lamebuild/include" \
	--extra-ldflags="-LIBPATH:`pwd`/../lamebuild/lib" \
	--enable-libx264 \
	--extra-cflags="-I`pwd`/../x264build/include" \
	--extra-ldflags="-LIBPATH:`pwd`/../x264build/lib"

make -j6 && make install && echo OOOOOOOOKKKKKKKKKKKKKK!!!!!!!!!!

● 默认情况下,代码是链接到动态链接库的(x264),所以需要改变配置脚本:

../ffmpeg-4.4/configure \
	--prefix=`pwd`/../ffmpegbuild \
	--toolchain=msvc \
	--enable-gpl \
	--enable-version3 \
	--disable-stripping \
	--disable-asm \
	--enable-shared \
	--enable-libmp3lame \
	--extra-cflags='-I`pwd`/../lamebuild/include' \
	--extra-ldflags='-LIBPATH:`pwd`/../lamebuild/lib' \
	--enable-libx264 \
	--extra-cflags='-DX264_API_IMPORTS -I`pwd`/../x264build/include' \
	--extra-ldflags='-LIBPATH:`pwd`/../x264build/lib' \
	--extra-libs='libx264.dll.lib'

● 如果需要链接到静态链接库(x264),那么编译前,在保持原始 build.sh 文件不变动的情况下,修改 <ffmpeg_src_dir>/libavcodec/libx264.c 文件,把 36 行注释掉,确保其不生效:

????????

否则会出现编译错误:

LD      libavcodec/avcodec-58.dll
  正在创建库 libavcodec/avcodec.lib 和对象 libavcodec/avcodec.exp
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_default,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_parse,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_cleanup,函数 _X264_close 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_default_preset,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_apply_fastfirstpass,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_param_apply_profile,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_picture_init,函数 _X264_frame 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_encoder_open_164,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_encoder_reconfig,函数 _reconfig_encoder 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_encoder_headers,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_encoder_encode,函数 _X264_frame 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_encoder_close,函数 _X264_close 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_encoder_delayed_frames,函数 _X264_frame 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_encoder_maximum_delayed_frames,函数 _X264_init 中引用了该符号
libx264.o : error LNK2019: 无法解析的外部符号 __imp__x264_levels,函数 _X264_init 中引用了该符号
libavcodec\avcodec-58.dll : fatal error LNK1120: 15 个无法解析的外部命令
make: *** [/g/FFmpegAbout/ffmpeg-4.4/ffbuild/library.mak:103: libavcodec/avcodec-58.dll] Error 96

因为这是告诉编译系统,我要链接的符号是 DLL 里的。

四 说明

●?--extra-cflags、?--extra-ldflags 与 --extra-libs 的使用

--extra-cflags、?--extra-ldflags 是显示指示模块的头文件与库文件的位置。

--extra-libs 是指定链接到哪个库文件,如果不指定,应该是使用在配置文件里已经设置了的默认值

五 后记

我试了一下用我生成的? ffmpeg 转换了一个文件,与官方发布的已编译的版本相比,真慢啊~~

不过,本人目的就是为了学习 ffmpeg ,所以不在乎了。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 10:51:48  更:2021-09-05 10:53:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:41:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码