将字节范围转换为html <video>中的时间范围

时间:2017-03-15 05:23:50

标签: javascript html5 ffmpeg

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

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

我愿意使用支持使用时间范围来请求数据而不是字节范围的html5视频播放器,但我一直无法找到实现或弄清楚javascript方面如何缓冲<video>的工作原理。

1 个答案:

答案 0 :(得分:2)

您可以运行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

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