使用 FFMPEG:是否可以使用带有时间戳和数据(角度)的文件作为输入来动态旋转 png?

使用 FFMPEG:是否可以使用带有时间戳和数据(角度)的文件作为输入来动态旋转 png?

我想做点奇怪的事情,听我说。
我想在视频上叠加一个指南针,并在日志文件中捕捉运动旋转矢量,动态确定指南针的方向。

我知道我应该使用 blender 来实现这一点,但我不能。另外,我已经有一个很棒的 bash 脚本,其中 ffmpeg 可以做各种各样的事情。如果我能将此功能添加到脚本中,那就太棒了。

或者,有人知道如何以脚本方式完成此操作吗?
谢谢您的帮助 :)

编辑:这是我的一个视频,如果您想查看应用程序。我戴着记录 AHRS,希望在左下角有一个指南针 :)

答案1

我一直没解决过这个问题。

我会将其分解成多个部分来解决。

从我读过的内容来看,我会首先获取有关您要合并的视频的信息,以便您可以生成尽可能接近这些规格(帧速率、色彩空间等)的叠加视频(以简化 ffmpeg 合并它们所需的工作)。我不确定这有多重要,但似乎应该有助于/提高质量。

我建议使用该信息来创建一个更小的视频(例如几个(20-50?)像素的正方形,放在原始视频的角落),最好使用 alpha 通道使覆盖层尽可能多地保留原始数据,显示与视频中的时间相匹配的指南针的方向。

然后使用 ffmpeg 将带有 alpha 通道的较小视频叠加到原始视频上,创建一个可以同时显示两者的新视频。

链接的 SE 文章可能相关:

https://video.stackexchange.com/questions/12105/add-an-image-overlay-in-front-of-video-using-ffmpeg

https://stackoverflow.com/questions/36467594/ffmpeg-add-alpha-channel-to-a-video-using-a-png-mask

https://kb.tecplot.com/2019/02/27/use-ffmpeg-to-create-videos-from-pngs/

我猜测如何开始创建图像:

获取当前视频的现有帧速率,结合持续时间获取总帧数:f

创建 f 张图像,使得图像编号 n(使得​​ n * 秒/帧 = 方向测量的时间戳)是一个小型 PNG(带有背景的 alpha 通道,因此不会不必要地遮挡背景),其中包含一个旋转到该方向测量的指南针。

例如,如果在时间 t=0s 时,帧速率为 4 帧/秒(== 1 秒/4 帧 = 1/4 秒/帧),方向为 0 度,在时间 t=1 秒时,方向为 20 度,在时间 t=3 秒时,方向为 35 度:

Frame, direction:
1, 0
2, 0
3, 0
4, 20
5, 20
6, 20
7, 20
8, 20
9, 20
10, 20
11, 20
12, 35
13, 35
...
etc.

如果您想避免创建 360 个不同的 PNG,那么您可能只需要 36 个不同的 PNG,并将所有内容四舍五入到最接近的 10 度(例如,33 度四舍五入为 30 度,36 度四舍五入为 40 度,等等)。

相关内容