视频流片断文件的合并方法

FFMPEG是个好工具,使用可以参考: 

 

在很多视频网站,比如需要以会员制购买的视频网站,其视频资源已经不是一个可链接的视频文件,而是一个流地址,播放时实时下载,但是很多是通过下载视频片断缓存在你的浏览器的某个文件夹下。

比如我登录了混沌网站,用朋友的账号进去观看。使用的是Chrome,它在Application目录下,找到同级有一个User Data目录,进入到Default下的Cache目录,在网页中播放视频之前,先清空所有文件,然后开始播放。之后会源源不断地生成一些视频片断,你可以将这些1-3M左右的文件拷到另一个文件夹下(因为可能有时长限制会被定时删除了)。视频播放完成之后,这些片断文件基本上都拷出来了,就可以对其进行组合处理。一个700M的文件,可能会生成600个文件左右,这就需要写代码来拼接语句。

在网上找到一个MediaInfo这个动态库,建议用32位的,然后找出刚才那个目录中不是视频文件的,删除之。 

MediaInfoDLL_Load('MediaInfo.dll');

FHandle := MediaInfo_New();

MediaInfo_Open(FHandle, PWideChar('f_00128'));

MediaInfo_Get(FHandle, Stream_General, 0, 'Format', Info_Text, Info_Name) = 'MPEG-TS'

MediaInfo_Close(FHandle);

基本上通过以上5句就可以完成动态库的功能调用。

然后要进行片断文件的组合,开始用copy /b 1+2+3+...+600 all.ts,这个是用代码拼接成一个cmd命令行。

但是用这个生成的目标视频文件,放在播放器里一播,时长不对了,只有7分钟。

最后下载了ffmpeg这个工具,用程序先生成一个filelist.txt: 

file '1'
file '2'
...

 然后调用ffmpeg的dos命令行:

ffmpeg -f concat -i filelist.txt -c copy output.mp4

经过这个处理,生成的视频文件,应该是正确的了。

后来用同样的办法去观看另一个视频,发现缓存的视频片断是加密了的,不能单个播放,这个情况暂时不知如何入手。

如果是单纯的m3u8文件,据说用ffmpeg就可以下载合并到一个文件: 

ffmpeg -i http://...m3u8 -c copy out.mkv

 

 

posted @ 2018-09-29 15:31  坚韧如松  阅读(375)  评论(0编辑  收藏  举报