FFmpeg开发笔记(七十四)Windows给FFmpeg集成二维码图像的编解码器
《FFmpeg开发实战:从零基础到短视频上线》一书的“7.1.1 添加图片标志”介绍了如何给视频添加图片标志,比如给视频画面添加一张二维码图像。不过前提条件是存在二维码图片,因为FFmpeg本身不支持根据文本生成二维码图像。幸而从FFmpeg 7.0开始,通过第三方的libqrencode和libquirc库实现了二维码的读写功能,这样处理视频中的二维码图像就方便多了。
接下来以微软的视窗系统为例,介绍如何在Windows环境给FFmpeg集成二维码的编解码器libqrencode和libquirc,具体的操作步骤说明如下:
一、配置libqrencode
libqrencode是一个快速紧凑的二维码编码库,支持将文本、URL、电话号码等信息转换为二维码图像。libqrencode的源码托管页面在https://github.com/fukuchi/libqrencode,最新版为2020年9月推出的libqrencode-4.1.1,下载地址是https://codeload.github.com/fukuchi/libqrencode/tar.gz/refs/tags/v4.1.1。
先下载最新的qrencode源码,再把qrencode源码包复制到MSYS环境的/usr/local/src目录下。接着在MSYS控制台执行下面命令解压源码包:
tar zxvf libqrencode-4.1.1.tar.gz
cd libqrencode-4.1.1
然后执行下面命令配置qrencode:
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=1 ..
配置完毕,会在build目录下找到QRencode.sln,这就是qrencode的Visual Studio项目工程文件。
二、编译libqrencode
打开Visual Studio 2022,在欢迎页面单击右侧的“打开项目或解决方案”,在弹出的文件对话框中选择libqrencode-4.1.1\build目录下的QRencode.sln。
打开qrencode工程后,依次选择顶部菜单:生成→配置管理器,在打开的配置管理器窗口上,找到左上角的“活动解决方案配置”下拉框,把Debug模式改为Release模式,再单击窗口右下角的关闭按钮。
依次选择顶部菜单:生成→Build ALL_BUILD,Visual Studio就开始编译qrencode模块。编译过程可在Visual Studio界面下方观察,直到编译完成如下图所示。

此时可在libqrencode-4.1.1\Release目录下找到qrencode.lib和qrencode.dll,这两个文件就是编译生成的libqrencode库文件。
三、安装libqrencode
确保Windows系统已经按照《FFmpeg开发实战:从零基础到短视频上线》第一章“1.3 Windows系统安装FFmpeg”的说明安装配置了MSYS,再按照以下步骤在MSYS环境安装libqrencode。
1、在msys64的/usr/local目录下新建libqrencode目录,并在该目录下创建lib子目录;
2、把qrencode工程中Release目录下的qrencode.lib和qrencode.dll两个文件复制到第一步创建的lib目录;
3、在lib目录下创建pkgconfig子目录,并把qrencode工程的build\libqrencode.pc复制到pkgconfig目录;然后打开libqrencode.pc,把开头四行改成下面这样。
prefix=/usr/local/libqrencode
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
4、在msys64的/usr/local/libqrencode目录下创建include目录,然后把qrencode工程的qrencode.h文件复制到刚才创建的include目录;
经过以上步骤操作后的libqrencode目录结构如下所示。
/usr/local/libqrencode
|--------------- lib
| |----- qrencode.lib
| |----- qrencode.dll
| |----- pkgconfig
| |----- libqrencode.pc
|--------------- include
| |----- qrencode.h
四、编译libquirc
libquirc是一个从图像中提取并解析二维码的开源库,它的源码托管页面在https://github.com/dlbeer/quirc,最新版为2023年5月推出的quirc-1.2,下载地址是https://codeload.github.com/dlbeer/quirc/tar.gz/refs/tags/v1.2。
先下载最新的quirc源码,再把quirc源码包复制到MSYS环境的/usr/local/src目录下。接着在MSYS控制台执行下面命令解压源码包:
tar zxvf quirc-1.2.tar.gz
cd quirc-1.2
接着打开quirc源码目录下的Makefile,找到下面这行:
all: libquirc.so qrtest
在其后补充下面两行用于编译Windows环境需要的dll文件和lib文件:
lib: $(LIB_OBJ)
$(CC) -shared -o quirc.dll $(LIB_OBJ) $(LDFLAGS) -lm -Wl,--out-implib,quirc.lib
保存Makefile文件后执行以下命令编译quirc:
make lib
编译完毕会在quirc源码目录下生成quirc.dll和quirc.lib两个文件。
五、安装libquirc
确保Windows系统已经按照《FFmpeg开发实战:从零基础到短视频上线》第一章“1.3 Windows系统安装FFmpeg”的说明安装配置了MSYS,再按照以下步骤在MSYS环境安装libquirc。
1、在msys64的/usr/local目录下新建libquirc目录,并在该目录下创建lib子目录;
2、把quirc源码目录下的quirc.lib和quirc.dll两个文件复制到第一步创建的lib目录;
3、在lib目录下创建pkgconfig子目录,并在pkgconfig目录下新建文件libquirc.pc,给该pc文件填入以下的配置内容。
prefix=/usr/local/libquirc
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: libquirc
Description: A QR Code extracting and decoding library
Version: 1.2
Libs: -L${libdir} -lquirc
Libs.private:
Cflags: -I${includedir}
4、在msys64的/usr/local/libquirc目录下创建include目录,然后把quirc源码目录的lib\quirc.h文件复制到刚才创建的include目录;
经过以上步骤操作后的libquirc目录结构如下所示。
/usr/local/libquirc
|--------------- lib
| |----- quirc.lib
| |----- quirc.dll
| |----- pkgconfig
| |----- libquirc.pc
|--------------- include
| |----- quirc.h
六、编译安装FFmpeg
先下载最新的FFmpeg源码(版本号需大于等于7.0),再把FFmpeg源码包复制到MSYS环境的/usr/local/src目录下。接着在MSYS控制台执行下面命令解压源码包:
cd /usr/local/src
unzip ffmpeg-n7.1.1.zip
确保MSYS环境已经按照《FFmpeg开发实战:从零基础到短视频上线》该书第八章的“8.1.1 给FFmpeg集成x264”和“8.1.5 给FFmpeg集成x265”安装了H.264的编码器libx264和H.265的编码器libx265,也按照该书第十章的“10.1.1 FFmpeg集成SDL”安装了Windows系统的SDL2库,并且按照之前的文章安装了H.266的编码器libvvenc,然后执行下面命令配置FFmpeg的编译环境:
cd ffmpeg-n7.1.1
export PKG_CONFIG_PATH=/usr/local/libqrencode/lib/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-libxevd --enable-libxeve --enable-libqrencode --enable-libquirc --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --extra-cflags='-I/usr/local/libquirc/include' --extra-ldflags='-L/usr/local/libquirc/lib' --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
配置完毕执行下面命令编译和安装FFmpeg,编译完成的ffmpeg库将会安装到configure指定的/usr/local/ffmpeg目录。
make
make install
cp /usr/local/libqrencode/lib/qrencode.dll /usr/local/ffmpeg/bin
cp /usr/local/libquirc/lib/quirc.dll /usr/local/ffmpeg/bin
七、查看FFmpeg的安装结果
运行下面命令查看FFmpeg的安装版本:
ffmpeg -version
上面命令返回的FFmpeg版本信息如下:
ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-libxevd --enable-libxeve --enable-libqrencode --enable-libquirc --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --extra-cflags=-I/usr/local/libquirc/include --extra-ldflags=-L/usr/local/libquirc/lib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.101 / 61. 19.101
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
根据以上返回的版本信息,可知已安装的FFmpeg版本号为7.1.1,同时configuration这行找到“--enable-libqrencode --enable-libquirc”,说明FFmpeg已经启用了二维码的编解码器libqrencode和libquirc。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。
FFmpeg开发笔记(七十四)Windows给FFmpeg集成二维码图像的编解码器的更多相关文章
- Android项目实战(五十四):zxing 生成二维码图片去除白色内边距的解决方案
目录:zxing->encoding->EncodingHandler类 中修改 createQRCode方法 private static final int BLACK = 0xff0 ...
- Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件
前言 上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤. 受限制 因为直接配置sample的vi比较麻烦 ...
- FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待 前言 将ffmpeg移植到海思H ...
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...
- 树莓派开发笔记(十四):入手研华ADVANTECH工控树莓派UNO-220套件(三):使用研发自带系统测试rtc、gpio、232和485套件接口
前言 上一篇说明了必须要使用研华自带的8G卡的系统,通过沟通拿到了相关的系统,购买的时候会带8GB的卡,请自行备份一份镜像.本篇对uno-220套件的相关研华配套的额外接口做测试,篇幅较长,重点讲 ...
- Java开发笔记(十四)几种运算符的优先级顺序
到目前为止,我们已经学习了Java语言的好几种运算符,包括算术运算符.赋值运算符.逻辑运算符.关系运算符等基础运算符,并且在书写赋值语句时都没添加圆括号,显然是默认了先完成算术.逻辑.关系等运算,最后 ...
- Android笔记(七十四) 详解Intent
我们最常使用Intent来实现Activity之间的转跳,最近做一个app用到从系统搜索图片的功能,使用到了intent的 setType 方法和 setAction 方法,网上搜索一番,发现实现转跳 ...
- .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)
上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...
- Linux 笔记 - 第十四章 LAMP 之(二) 环境配置
博客地址:http://www.moonxy.com 一.前言 LAMP 环境搭建好之后,其实仅仅是安装上了软件,我们还需要掌握 httpd 和 PHP 的配置. 二.httpd 配置 2.1 创建虚 ...
- 树莓派开发笔记(十五):树莓派4B+从源码编译安装mysql数据库
前言 树莓派使用数据库时,优先选择sqlite数据库,但是sqlite是文件数据库同时仅针对于单用户的情况,考虑到多用户的情况,在树莓派上部署安装mysql服务,通过读写锁事务等使用,可以实现多进 ...
随机推荐
- 康谋分享 | AD/ADAS的性能概览:在AD/ADAS的开发与验证中“大海捞针”!
如果您希望从数百万小时的驾驶数据中查找特定的相关驾驶事件和未遂事故,以确保您的所需功能正确运行,最好的方法就是创建一个系统性能的概览分析,实现在数据日志中快速检索关注点.为此,康谋在本文将为您详细介绍 ...
- element-ui $prompt输入弹框和$confirm确认弹框用法--输入框默认值、校验、阻止关闭等问题
可输入弹框 $prompt 1.默认值.校验 this.$prompt( '请输入文件夹名称:', '提示', { confirmButtonText: '确定', cancelButtonText: ...
- 强化学习框架:OpenRLHF源码解读,模型处理
强化学习框架:OpenRLHF源码解读,模型处理 本文主要介绍 强化学习框架:OpenRLHF源码解读,模型处理 models框架设计 了解一下 OpenRLHF的模型框架设计范式: From:htt ...
- Linux内核模块开发(简单)
Linux系统为应用程序提供了功能强大且容易扩展的API,但在某些情况下,这还远远不够.与硬件交互或进行需要访问系统中特权信息的操作时,就需要一个内核模块. Linux内核模块是一段编译后的二进制代码 ...
- QQ收藏self_xss漏洞复现(娱乐)
漏洞影响范围:QQ安卓版本 <=V8.8.5.5570 漏洞存在位置:QQ我的收藏功能 我的qq版本 漏洞复现 1.点击头像>>我的收藏 2.点击右上角:"+" ...
- EF Core 10 现已支持 LeftJoin 和 RightJoin 运算符查询了!
前言 最近发现 EF Core 10 中的新增功能引入了在 LINQ 中支持 LeftJoin 和 RightJoin 运算符查询的新功能.在 EF Core 10 之前,开发人员需要通过复杂的组合查 ...
- idea格式化代码快捷键
Ctrl+Alt+L Ctrl+Shift+Alt+L
- Nacos源码—5.Nacos配置中心实现分析
大纲 1.关于Nacos配置中心的几个问题 2.Nacos如何整合SpringBoot读取远程配置 3.Nacos加载读取远程配置数据的源码分析 4.客户端如何感知远程配置数据的变更 5.集群架构下节 ...
- Linux vmstat命令快速入门
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入 ...
- 可视化理解共识协议Raft
一.分布式共识协议引入 什么是分布式共识协议呢?让我们从一个简单的例子开始. 看看我们只有一个节点的系统,在这个系统中,你可以将节点想象为一个数据库系统,这个系统存储了一个值X. 我们有一个客户端(绿 ...