【问题标题】:Map every frame of a video file to a .png that points to the original frame将视频文件的每一帧映射到指向原始帧的 .png
【发布时间】:2015-10-17 06:05:01
【问题描述】:

我知道这可以通过 Linux 内核模块来实现(即,您将“挂载”一个视频文件来访问帧),但我想知道是否有另一种 Unix-ish 方式来做到这一点而无需这么远。

是否有一些特殊文件(可能是一些带有管道的魔法)可以引用视频文件中的特定帧,这些文件被外部工具视为.png,但在编辑时会更新视频中的原始帧?

(我正在寻找通用文件类型/伪代码。如果是用 C 编写的答案,那就更好了)

FFMPEG 可以访问单个帧:Using avconv to get a single frame from h264 video at set time

...并将其重新注入:https://forums.creativecow.net/thread/291/1315

【问题讨论】:

  • 你为什么不使用播放器而不是可以将帧输出为图像?
  • @KarolyHorvath 我可以使用 FFMPEG 导出一堆 .png 文件,但这需要大量初始处理(将帧分开)、空间(数千个 .png 文件占用的空间比一个相同长度的视频文件)和最终处理(将帧重新合并在一起)。

标签: c linux video


【解决方案1】:

是否有一些特殊文件(可能是一些带有管道的魔法)可以引用视频文件中的特定帧,该文件被视为外部工具的 .png,但在编辑时会更新视频中的原始帧?

对于大多数视频格式,您都无法有效地做到这一点。帧不独立存储在文件中;视频压缩算法通过存储相邻帧之间的差异来工作,因此很难更新单个帧而不改变与之相关的所有其他帧。

无论如何,不​​;在标准 UNIX 系统中无法创建以这种方式链接到另一个文件的文件。但是,您可以做的是创建一个 FUSE 文件系统,将视频的帧作为文件公开在虚拟文件系统中。不过,这不是一项微不足道的任务。有关入门的信息,您可能需要完成 FUSE 教程:

http://www.cs.nmsu.edu/~pfeiffer/fuse-tutorial/

【讨论】:

  • 可以访问视频的单个帧(stackoverflow.com/questions/25308594/…),那么命名管道(frame1)不能访问该帧吗?然后以某种方式将新帧注入 (forums.creativecow.net/thread/291/1315)。
  • 可以从第一个链接中描述的视频文件中读取单个帧,但是写回单个帧是有问题的。无论如何,命名管道也不会做你想做的事,因为数据只有在已经写入管道的情况下才能在另一端可用,并且将所有数据驻留在管道中会很糟糕。
  • 啊,那我就用 FUSE。完美解决问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 2018-10-28
  • 2013-06-16
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多