[windows] opencv + ffmpeg + h264 + h265 源码编译教程

news2024/11/26 11:34:28

1 前言

此方法可支持读写 H264/H265编码的视频

2 环境准备

  • 官网下载 msys 安装
    建议默认路径安装,避免不必要的麻烦
    在这里插入图片描述

  • 打开MSYS2 MSYS命令行
    在这里插入图片描述

  • 打开后,能看见下图中的MSYS标记
    在这里插入图片描述

  • 在MSYS 命令行上执行下面命令安装依赖库,安装的时候建议每个命令执行两次,避免第一次安装失败
    下载依赖库

    # 更新软件包
    pacman -Syu
    pacman -Su
    pacman -S diffutils make pkg-config
    pacman -S --needed base-devel mingw-w64-x86_64-toolchain
    pacman -S binutils  automake autotools
    
  • 下面是部分安装过程

    rotina@DESKTOP-VE0INQ8 MSYS ~
    $ pacman -S diffutils make pkg-config yasm nasm
    resolving dependencies...
    looking for conflicting packages...
    
    Packages (5) diffutils-3.8-3  make-4.3-3  nasm-2.15.05-1  pkgconf-1.8.0-1  yasm-1.3.0-2
    
    Total Download Size:   1.47 MiB
    Total Installed Size:  7.29 MiB
    
    :: Proceed with installation? [Y/n] Y
    :: Retrieving packages...
     pkgconf-1.8.0-1-x86_64           58.4 KiB  36.1 KiB/s 00:02 [###############################]
     yasm-1.3.0-2-x86_64             312.1 KiB   108 KiB/s 00:03 [###############################]
     make-4.3-3-x86_64               466.2 KiB   159 KiB/s 00:03 [###############################]
     nasm-2.15.05-1-x86_64           302.9 KiB  94.8 KiB/s 00:03 [###############################]
     diffutils-3.8-3-x86_64          362.2 KiB  68.1 KiB/s 00:00 [###############################] 100%al (4/5)                    1475.1 KiB   114 KiB/s 00:00 [##############################-]
     diffutils-3.8-3-x86_64          362.2 KiB  64.2 KiB/s 00:06 [###############################]  Total (5/5)                    1501.8 KiB  59.6 KiB/s 00:25 [###############################] 
    
    :: Processing package changes...
    (1/5) installing diffutils                                [#############################] 100%
    (2/5) installing make                                     [#############################] 100%
    (3/5) installing pkgconf                                  [#############################] 100%
    (4/5) installing yasm                                     [#############################] 100%
    (5/5) installing nasm                                     [#############################] 100%
    :: Running post-transaction hooks...
    (1/1) Updating the info directory file...
    
    
  • 安装完成后关闭退出

  • 在操作之前需要去msys安装目录下 找到link.exe 将其暂时改名,不然会和MSVC的link.exe冲突,导致编译失败
    在这里插入图片描述

  • 然后打开一个windows普通命令行
    在这里插入图片描述

  • 执行下列命令,
    加载MSVC环境,并且继承到mingw64 上
    在编译和链接的时候用MSVC的,而不是gcc

    # 切换到msys安装目录
    cd c:\msys64
    # vs2022 的路径
    call "D:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
    # vs2019 的路径
    call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
    # 别的依葫芦画瓢
    # 设置MSYS2的庆东方式为继承
    set MSYS2_PATH_TYPE=inherit
    # 打开一个 MSYS2 MINGW64 命令行
    msys2_shell.cmd -mingw64
    
    
  • 执行完后会新开一个 MSYS2 MINGW64 的命令行,如下图
    在这里插入图片描述

  • 这时候分别在两个命令行上执行 cl,得到相同的输出即表明操作成功
    在这里插入图片描述

  • 同时在两个命令行上敲 link ,查看输出是否一致,若如果不一致,则应该是忘记更改名字了,关闭当前所有命令行重新执行即可
    在这里插入图片描述

  • 最后查看lib路径是否正确, 能看到MSVC的路径即可
    在这里插入图片描述

  • 到此编译环境已经准备完毕
    下面开始编译

3 编译

  • 继续在刚才的 MSYS2 MINGW64 命令行上执行
    这里我编译的路径为 $HOME/lib/ffmpeg_build
    根据自己的路径,请自行修改,或者不改
# 添加环境变量 
# 之后所有操作都需要在这个命令行上进行

export prefix="$HOME/lib/ffmpeg_build"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$prefix/lib"
export PATH="$PATH:$prefix/bin"

# 设置代理地址,不设置的话,下载会很慢
# 如果没有代理环境,就不要执行下面两行
export http_proxy=127.0.0.1:4780
export https_proxy=127.0.0.1:4780

# 设置编译附加参数
export CFLAGS="$CFLAGS -fPIC"
export CPPFLAGS="$CPPFLAGS -fPIC"

3.1 编译 libx264

# 继续在刚才的命令行上执行
cd $HOME
mkdir -p $HOME/lib/ffmpeg_sources
cd $HOME/lib/ffmpeg_sources

# 下载源码, 如果这一步下载失败了,建议去下载压缩包继续编译
git clone --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
# 设置使用MSVC 的 cl 编译器,类似于linux下的gcc
export CC=cl
./configure --prefix="$prefix"  --enable-shared --enable-pic
make -j4 install

# 编译完成后,查看生成的x264文件
ls $HOME/lib/ffmpeg_build/bin
ls $HOME/lib/ffmpeg_build/lib
# 修改名字 否则后面编译ffmpeg时报错 ERROR: libx264 not found
mv $HOME/lib/ffmpeg_build/lib/libx264.dll.lib $HOME/lib/ffmpeg_build/lib/libx264.lib

3.2 编译 libx265

如果本机没有安装 cmake-gui 先去下载安装

# 继续在刚才的命令行上执行
# 切回编译目录
cd $HOME/lib/ffmpeg_sources
# 克隆x265
git clone https://bitbucket.org/multicoreware/x265_git.git

# 下载完成后 直接使用 `cmake-gui` 编译

# 设置 install 路径 为 $prefix
echo $prefix

3.3 编译 ffmpeg

ffmpeg 下载页面
我这里选择的是 ffmpeg-4.4.tar.gz

下载完成后将其放置 $HOME/lib/ffmpeg_sources 目录下

# 继续在刚才的命令行上执行
# 切回编译目录
cd $HOME/lib/ffmpeg_sources
ls 
tar zxf ffmpeg-4.4.tar.gz
cd ffmpeg-4.4

# 这两行不能少,不然报错 ERROR: libx264 not found 找不到 x264 x265
export PATH="$prefix/bin:$PATH" 
export PKG_CONFIG_PATH="$prefix/lib/pkgconfig" 

# 配置
# 这里我们只加了 x264 x265 别的依赖库可自行编译
./configure \
  --prefix="$prefix" \
  --extra-cflags="-I$prefix/include" \
  --extra-ldflags="-L$prefix/lib" \
  --extra-libs=-lm \
  --bindir="$prefix/bin" \
  --enable-gpl \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree \
  --disable-yasm \
  --enable-pic   \
  --disable-debug \
  --enable-avresample \
  --enable-shared
  
# 如果报错 ERROR: libx264 not found 的话
# 有两种可能,上面已经提过到了,请详细查看

# 最后编译安装
make -j4 install

# 编译完成后,查看生成的ffmpeg文件
ls $HOME/lib/ffmpeg_build/bin
ls $HOME/lib/ffmpeg_build/lib
  • 至此ffmpeg已经编译完成
    可在$HOME/lib/ffmpeg_build/bin目录下 执行 ffmpeg 查看版本等信息
    或者转码生成一个h264编码的视频
    # test.avi 为原始视频
    # output.mp4 为转码的视频
    ffmpeg -i test.avi -vcodec libx264 -preset ultrafast -b:v 2000k output.mp4
    

4 编译 opencv

  • opencv 的编译方法比较简单
    请注意
    需要在在刚才的命令行上执行 cmake-gui 才行
    因为刚才的命令行上有很多环境变量,在上面执行 cmake-gui 时,也会继承当前命令行上的所有环境变量, 后面在查找ffmpeg时能很轻松的找到,并且链接的是我们刚刚编译的ffmpeg,以及对应的x264,x265库

  • 此方法不需要修改opencv的源代码,即可编译成功

  • configure 完成后,即可查看到已经成功查找到刚刚编译的ffmpeg了,如下图在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# 实现模拟PID调试(学习专用无硬件)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace PID控制 {public class PIDModel{public float goal; //定义设定值public float thisValue; //定义实际值public float err…

DBCO-ICG-disulfo_二磺酸-吲哚菁绿-二苯并环辛炔_disulfo-ICG-DBCO

一、理论分析: 中文名:二磺酸-吲哚菁绿-二苯并环辛炔、水溶性吲哚菁绿-二苯基环辛炔 英文名:disulfo-ICG-DBCO、DBCO-ICG-disulfo CAS号:N/A 化学式:C63H62N4Na2O11S3 分子量:1193.37二、产品详情&#xff…

Bootstrap Table pagelist设置后失效

Bootstrap Table pagelist设置后不生效、失效、不起作用、不能使用问题。 前言 在使用Bootstrap Table进行数据展示时,设置pagelist选项后不生效。bootstrap版本为 v3.3.7。 经过 网上搜索尝试使用以下几种方式解决,发现均不行,你们可以参…

深入理解ReentrantReadWriteLock源码

1. ReentrantReadWriteLock简介 之前我们介绍过ReentrantLock,它是基于AQS同步框架实现的,是一种可重入的独占锁。但是这种锁在读多写少的场景下,效率并不高。因为当多个线程在进行读操作的时候,实际上并不会影响数据的正确性。 …

分享5款小众软件,大家按需下载

今天推荐一些可以大幅度提升办公效率的小软件,安全无毒,下载简单,最重要的是没有广告! 1.进程调试——Process Lasso Process Lasso是一款独特的调试进程级别的系统优化工具 ,主要功能是基于其特别的算法动态调整各个…

Linux——文件系统inode与软硬链接

目录 一.inode (一).背景知识 (二).inode 二.软硬链接 (一).软链接 (二).硬链接 一.inode (一).背景知识 我们知道,磁盘是按磁道与扇区划分…

广告行业中那些趣事系列58:当我们面对文本分类任务的时,可以使用哪些优化策略...

导读:本文是“数据拾光者”专栏的第五十七篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇主要总结了一下我在实际项目中对于文本分类任务的优化策略,对于想要提升线上文本分类任务效果的小伙伴可能有所帮助。欢迎转载&a…

专访 | 罗成:开源并非“只可远观”

OpenMLDB: 请先来一段自我介绍吧。 罗成: 我是罗成,来自华中科技大学,目前研二在读,研究方向是云原生数据库的架构研究。 OpenMLDB: 请问是什么样的契机让你接触到了 OpenMLDB 呢? 罗成: 当时课余时间比…

skywalking链路追踪整合spring-cloud

skywalking安装资料 一、安装skywalking 将apache-skywalking-apm-bin.zip上传到/opt目录下2. 解压apache-skywalking-apm-bin.zip unzip apache-skywalking-apm-bin.zip,解压后即可使用,里面的配置文件都提前配置好了 3. 启动skywalking 进入apache-…

HTML做一个传统节日端午节 带设计报告4500字

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

征文连载丨在不修改数据库源码的情况下,如何提高 MogDB 对 Oracle 的兼容性?...

: 2022年8月4日至9月9日,墨天轮社区联合云和恩墨发起了首届「MogDB 主题征文活动」,邀请各位技术从业者学习、使用 MogDB 数据库,分享使用心得与实战案例,一起探索这款融合了众多创新特性的商业版企业级数据库。活动期…

[附源码]Python计算机毕业设计Django校园租赁系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Docker安装Jenkins

docker安装:可参考这里 拉取Jenkins镜像 docker pull jenkins/jenkins创建挂载目录并赋予777权限 mkdir /data/jenkins chmod 777 /data/jenkins运行Jenkins容器并设置名字、端口、目录、时间 50000:50000:前面端口是宿机的端口,:后面端口…

客服如何维护客户?

有网店工作经验的客服,都知道维护老客户的重要性,因为老客户关乎着商品的销量、店铺的升级、客户转化率的多少,因此客服需要通过好的售后服务留住大量的老客户。 前言 有网店工作经验的客服,都知道维护老客户的重要性&#xff0c…

LIBTIFF读取tiff文件时,打印buf出错

如图所示,按照官网提供的例程读取tiff文件,并打印读取的值时,提示: Subscript of pointer to incomplete type void 代码如下: //---打开tiff文件的测试TIFF* tif TIFFOpen("a.tif", "r");if(tif…

使用docker安装RocketMQ

1.创建namesrv服务拉取镜像docker pull rocketmqinc/rocketmq创建namesrv数据存储路径mkdir -p /docker/rocketmq/data/namesrv/logs /docker/rocketmq/data/namesrv/store构建namesrv容器docker run -d \ --restartalways \ --name rmqnamesrv \ -p 9876:9876 \ -v /docker…

如何用vue+免费的webdb 实现一个世界杯足球竞猜系统

一、前言 最近世界杯在如火如荼的进行。我们都知道,中国也派出了我们的一支强大的队伍:中国建筑队,全程参与了世界杯的所有比赛。 哈哈开个玩笑,不过说到世界杯,还真有不少朋友,不仅仅是看球,…

[附源码]Python计算机毕业设计Django疫情防控管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

手把手教你成为荣耀开发者:数据报表使用指引

荣耀开发者服务平台是荣耀面向开发者的统一生态入口,通过聚合周边内外部系统,分全球多站点部署,为全球开发者提供业务全生命周期的商业支撑服务,拥有应用分发、智慧服务、开放能力、HONOR Connect等众多业务等您来合作。 “数据报…

Partial differential equation

In mathematics, a partial differential equation (PDE) is an equation which imposes relations between the various partial derivatives of a multivariable function. The function is often thought of as an “unknown” to be solved for, similarly to how x is th…