原文:
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 论文,皇后大学,(加拿大)中获取的动画无人机目标检测和跟踪视频