文件格式

FLV - Flash 视频

FLV 是 Flash 视频格式,曾支撑了网络视频长达十年。Flash Player 已经退出历史舞台,因此如今 FLV 文件只是等待转换的存档素材。

.flv

FLV 是 Flash Video,是 Adobe 的 Flash Player 在网页浏览器中用来播放视频的格式。它最初由 Flash 背后的公司 Macromedia 创建,2005 年 Adobe 收购 Macromedia 时转移到 Adobe 名下。大约有十年时间,在线视频基本都是这样工作的:那段时间你在浏览器里看的视频,很有可能就是 FLV。Adobe 在 2020 年最后一天结束了对 Flash Player 的支持,各大浏览器也将其移除,因此网页中已经无法再直接播放 FLV。不过这些文件本身并没有消失,它们还留在下载文件夹和归档中,并且仍然可以在桌面媒体播放器中播放。

FLV 文件是如何组成的

FLV 的设计非常简单,因为它本来就是为流式播放而不是长期存储而设计的。文件开头有一段简短的头部,用来标识文件并说明其中是否包含音频、视频或两者兼有。之后的部分就是一串标签,每个标签都是一个包含类型、时间戳和有效载荷的小数据包。音频标签、视频标签和脚本标签按时间顺序交错排列,播放器只需要依次读取即可。它没有中央索引,因此在 FLV 中拖动进度条进行定位往往会比较笨拙。

这个容器本身并不执行任何压缩。早期的 FLV 文件视频使用 Sorenson Spark,后来的文件使用 On2 VP6 编解码器,再后来在 Flash Player 支持后,使用 H.264 视频配合 AAC 音频,这些都是有损压缩。Adobe 最终推出了 F4V 作为替代格式,它基于与其他地方广泛使用的 MP4 相同的结构。

FLV 文件包含哪些元数据

FLV 的元数据几乎全部存放在文件开头附近的一个脚本标签中,通常名为 onMetaData。它是一份名称和值的列表,使用 Flash 与脚本交互时采用的数据格式来编写,播放器会在开始播放前读取这些数据以完成自身配置。最常见的条目包括:

  • 时长、宽度和高度,以及帧率;
  • 视频码率和音频码率,以及视频和音频编解码器的数字标识符;
  • 音频采样率、采样精度,以及声音是否为立体声;
  • 文件大小,以及一个指示是否可以拖动到文件末尾的标志;
  • 关键帧位置及其时间列表,这也是实现拖动定位的基础;
  • 写入或注入元数据的程序名称,因为曾经有专门的独立程序,用来给缺少这段元数据的文件单独添加这一块内容。

有些文件还包含第二个脚本标签,里面存放一个 XMP 数据包,这是 Adobe 在其产品中通用的结构化文本格式。这个数据包可以包含由用户输入的标题、作者、说明以及版权声明。

FLV 完全没有相机元数据的概念。没有 EXIF 区块、没有相机品牌或型号、没有镜头或曝光数据,也没有 GPS 字段。位置从来就不是 Flash Video 文件设计要记录的内容。仅有的来源线索是写入程序的名称,以及 XMP 数据包中保存的内容。

还有一个很常见但值得注意的问题:时长和文件大小通常是在整个文件写完后才写入的,因此从直播流中录制下来的文件往往会缺少这两个值,或者被设置为 0。这就是为什么有些播放器在播放 FLV 时不会显示时间轴,也不允许快进,因为播放器所需的信息从未被填入。

如今如何处理 FLV 文件

请将 FLV 视为归档格式,而不是日常工作格式。现在不应再用它来创建新内容,因为支撑它的平台已经不存在了。

MP4 在各方面都是替代格式:它可以在浏览器和手机上播放,可以正常拖动进度条,并且能够保存更多元数据。转换方式很重要。已经包含 H.264 视频和 AAC 音频的 FLV 通常可以直接重新封装为 MP4,只需改写外层封装,画面数据可以逐位保留。使用 Sorenson Spark 或 VP6 的旧文件则必须重新编码,这意味着再经历一次有损压缩,所以如果画面内容重要,建议在保存转换后文件的同时保留原始文件。