news 2026/1/11 6:16:52

使用 FFmpeg 的实时图表增强你的数据叙事

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 FFmpeg 的实时图表增强你的数据叙事

原文:towardsdatascience.com/live-graphs-with-ffmpeg-to-enhance-your-data-storytelling-61cc12529382

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/03b5a6584d4e76069854a42c0445a1b1.png

2019–2024 年 S&P 500 价值的静态和动态图表对比。图片由作者提供


简介

虽然有许多开源的数据可视化库可用于创建图表,但大多数在创建动态移动图表方面功能有限。最常见的方法是生成各种图像,然后使用在线转换器将它们组合成.mp4 或.gif 文件,但这些转换器受到各种限制,只有通过付费才能避免。

以下是免费在线转换器的一些限制

  • 最多上传 200 MB

  • 最多上传 100 张图片

  • 最高 800 像素分辨率

  • 输出视频上的水印

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ddf91fd607af243c0da28e477dce8299.png

展示免费在线转换器功能限制的锁定链。由Jose Fontano在Unsplash上拍摄


FFmpeg是一个用于高效处理音频和视觉数据的开源软件工具。FFmpeg 的全称是Fast Forward Moving Picture Experts Group,并被 VLC 和 YouTube 等大型公司用于后台。尽管它在这些大型应用的后台有广泛的使用,但它仍然是被典型数据科学家大量未使用的工具。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/130915d51d3e340c9f04709808e3f7f8.png

FFmpeg 标志来自ffmpeg.org/

在本文中,我们将展示如何使用 FFmpeg 制作高质量的视频,没有任何主要限制。我们将使用一些公开的 S&P 500 数据,这些数据以及相应的代码可以在GitHub 上找到。


广义方法

对于这个教程,我们将使用**Matplotlib**和 FFmpeg。FFmpeg 可以从这里下载,并且有各种在线指南可以帮助安装过程。

生成实时图表非常简单,只需在 FFmpeg 中输入一行代码。在本教程中,我们将首先生成一系列图像,然后按照以下三个简单步骤将它们编译成视频.mp4 文件。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/02f55498216343fcec39bdb6f61a8744.png

使用 FFmpeg 创建一系列图形并制作动画的通用工作流程


在下一节中,我们将使用 FFmpeg 编译图像,但需要在循环中运行可视化代码并保存每一张图像之前完成。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f40dfe8cec2cf91444865dac06f63757.png

通过循环可视化代码保存一系列图像的代码片段和输出截图


开发实时图形

首先创建一个文件夹,用于存储所有生成的图像。使用命令提示符,导航到该目录。

现在,我们可以使用下面的行来生成一个视频,该视频从 Figure0001.png 到 Figure000N.png 读取帧名称,并将文件输出为 out1.mp4。名称可以更改为您为图像指定的任何名称。此外,-r60控制帧率,因此,使用下面的代码,输出视频将具有每秒 60

ffmpeg-r60-i Figure000%d.png-pix_fmt yuv420p out1.mp4

在工作目录中运行上述代码并使用所有图像后,我们得到了从 2019 年到 2024 年的 S&P 500 数据的第一个整洁动画。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6c1ed06022fdf6132eb4ec193710d1a3.png

动画图

由于我们现在是在时间上绘制,我们可以调整图形的样式以更好地突出我们想要展示的内容。我们可以简单地更改绘制每一张图像的方式,然后使用相同的 FFmpeg 代码再次编译它们。例如,在下面的新动画中,我们可以更容易地讨论数据,展示新冠疫情的影响以及 S&P 500 如何快速从中恢复。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d4b4547f3d3a0af0702c4c6fa8cd7ed8.png

样式化的动画图,以突出显示当前值


生成的 .mp4 文件也可以很容易地使用以下代码转换为 gif,其中 fps 可以定义:

ffmpeg-i out1.mp4-filter_complex"[0:v] fps=24,scale=1000:-1, split [a][b];[a] palettegen [p];[b][p] paletteuse"output.gif

注意,使用上述代码生成的 gif 将与原始视频具有相同的持续时间,而修改 fps 只是改变从原始视频中提取帧的步骤,如下所示:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/82656d04ccbb1a72751dce95587faaab.pnghttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ec244c69c20a776f63489ed04fd7f27f.pnghttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7e16f4fd8a854d4cdafd27f5df9df40c.png

以 6、12 和 24 fps 播放回的图形


FFmpeg 的其他用途

FFmpeg 除了将图像编译成视频之外还有许多其他用途。例如,仅使用 matplotlib 就可以对图像进行注释,然后使用 FFmpeg 创建视频。FFmpeg 还可以用来从视频中提取帧,更改音频或格式,以及许多其他用途。

下面是我硕士论文中的一个例子,我使用了无人机视频作为背景来可视化目标检测和跟踪数据。我发现 FFmpeg 是创建高质量视频以增强数据叙事的最佳方式。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/735372f0800fc8797181047f0570cf38.png

从Faraj F (2021)《从远程操控飞机系统获取的全运动视频进行目标检测和生活方式分析。MASc 论文,皇后大学,(加拿大)中获取的动画无人机目标检测和跟踪视频

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/9 14:00:00

【Linux命令大全】004.系统管理之chfn命令(实操篇)

【Linux命令大全】004.系统管理之chfn命令(实操篇)✨ 本文为Linux系统管理命令的全面汇总与深度优化,结合图标、结构化排版与实用技巧,专为高级用户和系统管理员打造。(关注不迷路哈!!!) 文章目…

作者头像 李华
网站建设 2026/1/10 6:30:04

从论文到生产:MGeo地址匹配模型的工业化部署指南

从论文到生产:MGeo地址匹配模型的工业化部署指南 在物流配送、地图导航、政务管理等业务场景中,地址匹配的准确性直接影响服务质量和运营效率。MGeo作为多模态地理语言模型,通过融合地理上下文与语义特征,能够实现高精度的地址识…

作者头像 李华
网站建设 2026/1/10 6:31:15

地址数据标注提速:MGeo预标注+人工校验工作流

地址数据标注提速:MGeo预标注人工校验工作流实战指南 在数据标注团队的实际工作中,地址相似度标注往往是最耗时费力的任务之一。传统纯人工标注方式不仅效率低下,而且标注人员容易因疲劳导致准确率下降。本文将介绍如何利用MGeo模型实现"…

作者头像 李华
网站建设 2026/1/9 15:44:23

Promise vs 回调地狱:实测开发效率提升300%

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个对比测试项目,展示相同功能的两种实现方式:1. 使用传统回调函数嵌套 2. 使用Promise链式调用。要求:实现用户登录、数据获取、数据处理…

作者头像 李华
网站建设 2026/1/9 15:42:32

快速验证:用OLLAMA下载加速方案原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个OLLAMA下载加速原型验证工具,功能包括:1. 最小化可行产品实现;2. 基础镜像切换功能;3. 简单速度测试;4. 结果快…

作者头像 李华