【问题标题】:Convert Byte-range to Time-range in html <video>在 html <video> 中将字节范围转换为时间范围
【发布时间】:2017-08-05 17:08:50
【问题描述】:

我有一些当前支持 http 字节范围请求的服务器端代码没有问题。但是,我希望能够在将转码后的块发送到客户端之前使用 ffmpeg 即时转码视频文件(位于磁盘上),但是 ffmpeg 要求我在获得字节时给它一个寻道时间范围从客户端。给定客户端浏览器的字节范围,我如何能够计算出视频文件的时间范围(搜索时间)?

我已经查看了this question,它假定服务器已经知道指定的时间。

我愿意使用支持使用时间范围而不是字节范围来请求数据的 html5 视频播放器,但我一直无法找到实现或弄清楚缓冲 &lt;video&gt; 的 JavaScript 端如何工作。

【问题讨论】:

  • 你可以试试fetching的视频offsetend_offset
  • 这些选项似乎仅适用于直接使用 ffmpeg 进行 http 流式传输。我只使用 ffmpeg 转码。
  • 添加那些提及“请求范围”的提交。
  • 你有提交的链接吗?谢谢。

标签: javascript html ffmpeg


【解决方案1】:

您可以运行 ffprobe 并分析其输出以识别时间戳。

基本命令是

ffprobe -i in.mp4 -show_entries packet=pos,pts_time,flags -select_streams v -of compact=p=0:nk=1 -v 0

这会产生

0.000000|48|K_
0.133333|956|__
0.066667|996|__
0.033333|1053|__
0.100000|1602|__
0.266667|1811|__
0.200000|2371|__
0.166667|2746|__
0.233333|3294|__
....

第一列是视频帧时间戳,第二列是该帧的字节偏移量,第三列是该帧是否为关键帧。

由于您只能在关键帧处剪切视频,因此在复制流时,您要么必须在标志为 K 的时间戳处剪切,要么使用以下命令中的参数:

ffmpeg -ss X -i in.mp4 -c copy -avoid_negative_ts make_zero out.mp4

如果您正在对视频流进行转码,则不需要这样做。

【讨论】:

    猜你喜欢
    • 2019-10-03
    • 2020-04-04
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多