三条簪 發表於 2025-7-19 11:54:00

FFmpeg开发笔记(七十五)使用qrencode和quirc对视频画面读写二维码

<span id="cke_bm_209S">上一篇文章《Windows给FFmpeg集成二维码图像的编解码器》介绍了给FFmpeg集成二维码的编解码器qrencode和quirc,接下来讲解如何利用编码器qrencode向视频画面添加二维码,以及如何利用解码器quirc从视频画面读取二维码。</span>
<p><span id="cke_bm_209S"> 确保Windows系统已经按照《FFmpeg开发实战:从零基础到短视频上线》第一章“1.3 &nbsp;Windows系统安装FFmpeg”的说明安装配置了MSYS,再打开MSYS的MINGW64控制台,输入以下带qrencode滤镜的ffmpeg命令在seas.mp4的左上角添加二维码,二维码的文本内容由序号、时间戳和当前时间组成。</span></p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="7" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22ffmpeg%20-i%20seas.mp4%20-vf%20qrencode%3Dx%3D40%3Ay%3D40%3Aqrcode_width%3Dmain_w%2F6%3Atext%3D%5C%22%25%7Bn%7D%20%25%7Bpts%7D%20%25%7Bgmtime%7D%5C%22%20ff_qrencode.mp4%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">ffmpeg -i seas.mp4 -vf qrencode=x=40:y=40:qrcode_width=main_w/6:text="%{n} %{pts} %{gmtime}" ff_qrencode.mp4</code></pre>
</div>
<p>接着运行下面的ffplay命令播放添加了二维码的新视频:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="6" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22ffplay%20-i%20ff_qrencode.mp4%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">ffplay -i ff_qrencode.mp4</code></pre>
</div>
<p>新视频的播放界面如下图所示,可见该视频的左上方果然添加了二维码图像。</p>
<p><span class="cke_widget_wrapper cke_widget_inline cke_widget_image cke_image_nocaption cke_widget_selected" data-cke-display-name="图像" data-cke-filter="off" data-cke-widget-id="5" data-cke-widget-wrapper="1"><span class="cke_reset cke_widget_drag_handler_container"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸"><span class="cke_widget_edit_container" title="编辑图片"><img src="https://img2024.cnblogs.com/blog/729938/202507/729938-20250713180920651-737870736.png"></span></span></span></span></p>
<p>运行以下帮助命令,可查看qrencode滤镜的详细用法。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="4" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22ffmpeg%20-h%20filter%3Dqrencode%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">ffmpeg -h filter=qrencode</code></pre>
</div>
<p>根据帮助命令的返回结果,可知qrencode滤镜主要有下列几个常用参数:<br>
x:二维码图像左上角的横坐标。<br>
y:二维码图像左上角的纵坐标。<br>
qrcode_width:二维码图像的宽度,可简写为q。<br>
padded_qrcode_width:二维码图像的留白宽度,可简写为Q。<br>
level:二维码图像的容错等级,可简写为l。为0表示低容错,为1表示中等容错,为2表示默认容错,为3表示高度容错。<br>
foreground_color:二维码图像的前景颜色,可简写为fc。<br>
background_color:二维码图像的背景颜色,可简写为bc。<br>
text:二维码的文本内容。<br>
虽然视频画面加上了二维码,可是怎么知道这些二维码是否准确呢?这时就要通过解码器quirc从视频画面读取二维码了。<br>
继续执行以下带quirc滤镜的ffmpeg命令,表示要查看目标视频里的二维码信息:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="3" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22ffmpeg%20-i%20ff_qrencode.mp4%20-vf%20quirc%20-f%20null%20-%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">ffmpeg -i ff_qrencode.mp4 -vf quirc -f null -</code></pre>
</div>
<p>以上命令的执行结果如下:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="2" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22%E2%80%A6%E2%80%A6%5CnFound%20QR%20code%20at%20position%2040%2C40%20-%2040%2C119%20with%20payload%3A%20193%207.720000%202025-06-03%2003%3A33%3A46%5CnFound%20QR%20code%20at%20position%2040%2C40%20-%2040%2C119%20with%20payload%3A%20194%207.760000%202025-06-03%2003%3A33%3A46%5CnFound%20QR%20code%20at%20position%2040%2C40%20-%2040%2C119%20with%20payload%3A%20195%207.800000%202025-06-03%2003%3A33%3A46%5CnFound%20QR%20code%20at%20position%2040%2C40%20-%2040%2C119%20with%20payload%3A%20196%207.840000%202025-06-03%2003%3A33%3A46%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">……
Found QR code at position 40,40 - 40,119 with payload: 193 7.720000 2025-06-03 03:33:46
Found QR code at position 40,40 - 40,119 with payload: 194 7.760000 2025-06-03 03:33:46
Found QR code at position 40,40 - 40,119 with payload: 195 7.800000 2025-06-03 03:33:46
Found QR code at position 40,40 - 40,119 with payload: 196 7.840000 2025-06-03 03:33:46</code></pre>
</div>
<p>从quirc滤镜的命令结果可见,解析出来的二维码内容形如“193 7.720000 2025-06-03 03:33:46”这样,说明正确读到了之前添加的二维码时间戳内容。</p>
<p>更多详细的FFmpeg开发知识参见<span class="cke_widget_wrapper cke_widget_inline cke_widget_csdnlink cke_widget_selected" data-cke-display-name="a" data-cke-filter="off" data-cke-widget-id="1" data-cke-widget-wrapper="1">《FFmpeg开发实战:从零基础到短视频上线》一书。</span></p>
<span data-cke-copybin-start="1"><span data-cke-copybin-end="1">​</span></span><br><br>
来源:https://www.cnblogs.com/aqi00/p/18982621
頁: [1]
查看完整版本: FFmpeg开发笔记(七十五)使用qrencode和quirc对视频画面读写二维码