使用 MP4 文件块作为缩略图

问题描述 投票:0回答:2

我想从视频中提取单帧(作为拇指),而无需下载完整的视频文件。我只想读取 mp4 标头(信息应该位于 moov 原子中),然后下载所需的字节范围。 Afaik 这就是当您跳到无缓冲部分时浏览器(HTML5 视频)所做的事情

我已经看过:HTML5 视频的字节范围请求(伪流)如何工作?但我不知道如何将它与 ffmpeg 一起使用。

非常感谢!

video ffmpeg mp4
2个回答
11
投票

如果您绝对决心让这种方法发挥作用,那么通用算法的运行方式如下:

  • 下载 MP4 文件的前 KB
  • 确保
    moov
    原子位于前面;确定
    moov
    原子的长度并发出另一个请求以获取原子的其余部分
  • 挖掘
    moov
    原子以找到视频
    trak
    原子;深入该原子以找到以下原子:
    stsd
    stss
    stco
    /
    co64
    stsz
  • stsd
    将为您提供输入 H.264 视频解码器所需的初始化信息
  • stss
    原子为您提供所有同步样本(关键帧)的列表;这些可以独立解码,非常适合您的缩略图前景
  • 当您知道哪些帧是关键帧时,由
    stss
    原子提供,您可以与
    stco
    co64
    原子交叉引用(
    trak
    将有一个或另一个)以找到绝对文件位置,以及
    stsz
    原子,它将告诉您帧中有多少字节

将所有这些信息结合起来,您应该能够仅下载和解码 MP4 视频的关键帧(从而调整大小并重新压缩缩略图)。


0
投票

我承认我确实回答的有点晚了,但是六个月前我也确实有这个想法,并且实现了其中很小的一部分,说实话多媒体Mike的回答已经把大概的流程说清楚了,但是还是不够具体。你可以参考我写的代码来了解过程:https://github.com/gaowanliang/web-video-thumbnailer

© www.soinside.com 2019 - 2024. All rights reserved.