2017-03-15 51 views
1

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

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

我打算使用html5视频播放器,它支持使用时间范围来请求数据而不是字节范围,但是我一直无法找到一个实现或找出如何在缓冲工作的JavaScript方面工作。

+0

你可以用'offset'和'end_offset'试试[抓取](https://ffmpeg.org/ffmpeg-protocols.html#http)视频 – Mulvya

+0

这些选项似乎只用于直接使用ffmpeg进行http流式传输。我只使用ffmpeg进行转码。 – fengshaun

+0

增加提及“请求范围”的提交。 – Mulvya

回答

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 

这不是如果您要对视频流进行转码,则需要使用此功能。