视频切片,合并成整视频

这几天察觉部分网址,能够剖判各大录制网站的vip。稳重想了想,那也好不轻松爬虫呀,爬的是录制数据。

版权注脚:本文为博主原创作品,未经博主允许不得转载。

切开工具:ffmpeg

python落成m3u8格式调换为VCD摄像格式,pythonm3u8

支付动机:近年来用手提式有线电话机QQ浏览器下载了生机勃勃部分摄像,录制更是多,占用了手提式无线电话机内部存储器,于是想把下载的录制传到Computer上保留,可后来意识这一个录制都以m3u8格式的,且这一个格式的录像都切成了零星,存在Computer里不实惠查看,于是想把它转变为其余能够直接张开广播的完全摄像,到网络找了一些工具,都稍稍好用,后来察觉二个有线电话端的“缓冲合并工程师具”,倒是能够用,但是归拢的录像顺序是乱的,碎片的摄像顺序还亟需顾客手动调节,感到太拖延时间了,于是本身策动写三个改变工具。

直白上代码:(程序的文本名叫:convert_m3u8.py)   

# -*- coding:utf-8 -*- 
import sys 
import os 
from glob import glob 
#获取需要转换的路径 
def get_user_path(argv_dir): 
  if os.path.isdir(argv_dir): 
    return argv_dir 
  elif os.path.isabs(argv_dir): 
    return argv_dir 
  else: 
    return False 
#对转换的TS文件进行排序     
def get_sorted_ts(user_path): 
  ts_list = glob(os.path.join(user_path,'*.ts')) 
  #print(ts_list) 
  boxer = [] 
  for ts in ts_list: 
    if os.path.exists(ts): 
      #print(os.path.splitext(os.path.basename(ts))) 
      file,_ = os.path.splitext(os.path.basename(ts)) 
      boxer.append(int(file)) 
  boxer.sort() 
  #print(boxer) 
  return boxer 
#文件合并   
def convert_m3u8(boxer,o_file_name): 
  #cmd_arg = str(ts0) " " str(ts1) " " o_file_name 
  tmp = [] 
  for ts in boxer: 
    tmp.append(str(ts) '.ts') 
  cmd_str = ' '.join(tmp) 
  exec_str = "copy /b " cmd_str ' ' o_file_name 
  #print("copy /b " cmd_str ' ' o_file_name) 
  os.system(exec_str) 


if __name__=='__main__': 
  #print(sys.argv[1:]) 
  argv_len = len(sys.argv) 
  if argv_len == 3: 
    o_dir,o_file_name =sys.argv[1:] 
    #print(o_dir ":" o_file_name) 
    user_path = get_user_path(o_dir) 
    #print(user_path) 
    if not user_path: 
      print("您输入的路径不正确,:-("); 
    else: 
      if os.path.exists(os.path.join(user_path,o_file_name)): 
        print('目标文件已存在,程序停止运行。') 
        exit(0) 
      os.chdir(user_path) 
      #convert_m3u8('2.ts','4.ts',o_file_name) 
      boxer = get_sorted_ts(user_path) 
      convert_m3u8(boxer,o_file_name) 
      #print(os.getcwd()) 
  else: 
    print("参数个数非法"); 

注:代码相当少,原理也很简短,正是把各样零散摄像依据顺序归并为叁个录像文件。
行使方式如下:

python  convert_m3u8.py    m3u8摄像的目录   要转移后文件的名字

当中第2个参数为m3u8摄像的目录(m3u8的散装录制在表哥伦比亚大学里是藏身的,要求将逃匿文件彰显出来才具够将文件导出到电脑里,在安卓手提式有线电电话机里将藏匿文件夹前边的.重命名去掉就可以了),第二个参数为要改造后文件的名字。

图片 1

图片 2

上述就是本文的整体内容,希望对大家的上学抱有助于,也可望大家多多指教帮客之家。

开荒动机:方今用手提式有线话机QQ浏览器下载了有的录制,摄像更是多,占用了手提式有线电电话机内部存款和储蓄器,于是想把...

 首先接受一个摄像网址,作者选的是 影片大全 ,然后选择播出不久的电影 “一出好戏” 。

主流录像应用软件的录像缓存具有分裂的储存方案,上边黄金时代风流浪漫实行分析。

任务:将aaa.mp4切片成m3u8和ts切片(亲测wmv,mp4可用)

深入剖判页面

自身用的是chrome浏览器,F12进去查看。采取NetWork的Doc,开掘核心部分的数额是从这几个网址拿到的。

图片 3

 

在地点栏输入这么些链接,跳转到了录像来自的广播页面。

道理当然是那样的,在此个页面就足以直接观察录像了,不过我们要把录像下载下来。

主流录制应用软件下载电影影视剧平常都对内部存款和储蓄器的占领一点都不小。对于十分大的摄像文件的囤积,生机勃勃种办法正是将摄像文件分成大小相近的非常多个小录像然后各种下载,也叫伪流媒体。较为不足为奇的风流浪漫种是mp5格式作为录像的蕴藏格式。这种伪流媒体接纳常常的http形式,不像真正的流媒体合同传输格式rtsp,那样的话得搭建与门的流媒体服务器,花费相比较高。相同的时间这种措施仍然是能够完成边下载边播放的功能。要想达成那些效果,原则上就要求录制的存款和储蓄格式是分支的,而DVD正巧满意这些必要,只要将mp5的完整摄像消息放在DVD文件的上马,那样如果加载了VCD文件的尾部之后,就会深入分析出该mp3文件的时间长度,比特率等等,为后续的摄像缓存做开头化设置,然后每加载生龙活虎部VCD文件的数据流,通过分析尾部来博取当前录制流的帧新闻,并在播放器中播放。

图片 4

探索录制文件

仍是前边这三个页面,在Other中,大家开掘了有的奇怪的东西。

图片 5

查一下,m3u8是个啥东西。

m3u8是苹果公司推出生龙活虎种录制播放标准,是m3u的生龙活虎种,不过编码情势是utf-8,是生龙活虎种文件检索格式,将摄像切割成一小段一小段的ts格式的录制文件,然后存在服务器中(未来为了减削I/o访谈次数,常常设有服务器的内部存款和储蓄器中),通过m3u8拆解解析出来路线,然后去央浼。

这下就知晓了,那正是大家要找的事物。

点击Response,查看这么些.m3u8的文件。阅览发掘,.ts后缀的文件地方是有规律的。大家只须求下载全数的.ts后缀文件,然后把它们构成成二个文书就能够。

因此,大摄像文件的门道接纳方式能够是不菲个小文件的叠加,而各种小文件都得以单独选取仓库储存路线,最终只要将整左券四个录制的小文件进行归并就能够。

步骤:

合并.ts文件

命令行:“copy /b  F:f*.ts  E:fnew.ts”。

实行该命令后,F:f目录下的满贯TS文件就被统一成三个new.ts文件了(你本来的那堆文件依旧存在)。

那边运用copy命令的文本合併功效举办ts文件的会面,copy前面包车型地铁 /b  参数表示把公文按二进制格式来合併,假设不加这一个参数,则会把目的当成文本文件来统意气风发,并在文书内增添无需的符号,那会促成播放出错,所以必需加 /b 参数。

1.优酷

以中兴5为例,实行叁个大大小小为135M的摄像的缓存。

Paste_Image.png

如上,所下载的录制的文本夹是左图,此文件夹的原委如右图所示,可以看来优酷也是将大摄像文件分割成许多个小录制文件,不过图中的名叫1-7的文书并不是VCD,而是.ts文件。该存款和储蓄格局是m3u8格式。 m3u8是m3u的黄金年代种,是朝气蓬勃种播放的正式。它是一种可扩张的播放列表文件格式。m3u是带有媒体文件U宝马X3L的一个事实上的播放列表标准。这种格式被用来作为HTTP Live 媒体流索引文件的格式。 m3u8暗含UTF-8编码文字的m3u播放列表,全体的原始摄像文件都被下载到贰个潜伏文件夹了。点击m3u8文件就能够自动把这几个.ts文件链接在一同播放,能够用notepad 张开m3u8文本查看内容,里面是四个个本土文件的链接,这一个链接指向一个个小摄像文件,也等于说你找不到原来下载那几个文件的网站了。
风姿罗曼蒂克旦想向来播放完整的庐山面目目摄像文件就要找到特别文件夹,里面包车型大巴录像文件是生机勃勃段生龙活虎段的,先统一成三个后生可畏体化的录像文件,然后就足以播放了。当然,若是除去了要命掩盖文件夹,那这一个m3u8文书也就没用了,点击播放会提醒解析退步。
其余测量检验机型类同。

1.下载ffmpeg指令工具(橄榄黄安装)

编辑脚本,下载.ts文件

from urllib import request
import urllib
from time import sleep
import socket

class CatchVideo(object):
    def __init__(self):
        self.headers = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"
        self.url = ""

    def set_url(self, i):
        if i < 1000:
            self.url = "https://cdn.letv-cdn.com/20180811/YLDUgCD6/1000kb/hls/DtrOg2412d.ts" % i
        else:
            self.url = "https://cdn.letv-cdn.com/20180811/YLDUgCD6/1000kb/hls/DtrOg2412d.ts" % i

    # 获取并下载ts文件
    def dl_ts(self, i):
        rq = request.Request(self.url)
        rq.add_header('User-Agent', self.headers)
        response = request.urlopen(rq)
        resread = response.read()
        with open(str(i) ".ts", "wb") as f:
            f.write(resread)
        response.close()# 关闭urlopen方法,防止被ban

    def start_work(self):
        for i in range(0, 1563 1):
            self.set_url(i)
            try:
                self.dl_ts(i)
                print(str(i)   ".ts  success")
                sleep(1)
            except urllib.error.URLError as e:
                print(e.reason)
                break
            except socket.timeout as e2:
                print(e2.reason)
                self.dl_ts(i)


if __name__ == '__main__':
    catch_video = CatchVideo()
    socket.setdefaulttimeout(20)
    catch_video.start_work()

 

运营进程中,现身了一回报错,分别是:

  • urllib.error.URLError :[WinError 10054]  远程主机强迫关闭了五个存世的连年
  • socket.timeout     read读取超时

肃清办法:

  1.增加response.close,关闭urlopen方法。

  2.增添time.sleep,有生机勃勃秒缓冲时间

  3.安装socket.setdefaulttimeout,给socket预留缓冲时间

2.爱奇艺

缓存一个轻重为5.6M的音信类摄像

Paste_Image.png

如上,所下载的录制的文本夹是左图的第八个公文夹,此文件夹的从头到尾的经过如右图所示,能够见到摄疑似由三个后缀名字为".qsv"的文书构成。

用其它测验机也近乎,而并不曾打开大录像文件的划分。 通过搜索资料可得:qsv是生机勃勃种摄像加速格式。qsv格式是乐视网公司研究开发的风姿洒脱种摄像文件格式,由亍爱奇艺周详正版录像,故qsv格式只好使用奇艺播放器(搜狐录像影音)播放,无法因而普通的格式调换软件举办改换。

图片 6

还留慰难题

实际运作进度中,脚本实践功能略低。之后会加盟二十四线程,继续改良,扩大运维作效果能。

 

 

3.优酷土豆

用爱奇艺下载几个大大小小为91.6M的电视剧(黄金时代集)。

Paste_Image.png

所下载的摄像的文件夹是左图的第二个.sd文件夹,此文件夹的内容如右图所示,能够观察每下载一个摄像就在左图路线下创办三个新的公文夹。文件夹下的录制是由四个mp5格式的摄像文件构成的。 别的测量检验机型类同。

下载ffmpeg命令工具

参考博客:

 

 

 

4.爱奇艺

用乐视网缓存三个大小为159.4M的综合艺术类录制。

Paste_Image.png

如上,所下载的录制的公文夹是左图的率先个文本夹,此文件夹的源委如右图所示,能够看看每下载二个摄像就在左图路线下开创四个新的文本夹,何况缓存的格式为m4u8。 m4u8是m4u的风流倜傥种,与m3u8近乎。这种文件富含链接到MPEG - 4电影和录制剪辑,但不带有摄像文件自己,近似于一个M3U文件,存款和储蓄播放列表的录像文件。

2.解压

履新代码,到场多进度

修改了start_work方法和主进程:

    def start_work(self, i):
        self.set_url(i)
        try:
            self.dl_ts(i)
            print(str(i)   ".ts  success")
            sleep(1)
        except urllib.error.URLError as e:
            print(e.reason)
            self.dl_ts(i)
        except socket.timeout as e2:
            print(e2.reason)
            self.dl_ts(i)


if __name__ == '__main__':
    catch_video = CatchVideo()
    socket.setdefaulttimeout(20)# 设置socket层超时时间20秒
    I = 0
    while I < 1563 1:
        # 5个进程并发运行
        p_l = [Process(target=catch_video.start_work, args=(i,)) for i in range(I, I 5)]
        for p in p_l:
            p.start()
        for p in p_l:
            p.join()
        I = I   5

 

 

那边设置了5个进度同期运营,太多少间隔程主机遇拒却央浼。

 

OK,那样就能够比相当慢下载了。隔了几天终于想起来还会有个电影没看,哈哈 ^_^

 

 

 

 

5.乐视摄像

以OPPO5为例,进行二个轻重为135M的录像录像和每集大小约为50M的电视剧(共5集)的缓存。

Paste_Image.png

如上,是左图所下载的摄像列表,共6个录像。右图是对应的文件夹的剧情,能够看看在三弟大内部存款和储蓄器中新建的LetvDownload/storage/download保存。下载新录制并不会创建二个新的文本夹,直接保存在该目录下,且大摄像文件(如右图第二个)不开展划分。保存格式为mp5。 其它,在乐视手提式有线电话机上测量检验时视频缓存路线有所差异,为 手机内部存款和储蓄器/ledown 应该是由于应用程式版本与此外机型的版本差距过大。

图片 7

6.地蛋录制

以一加5为例,举行二个朗朗上口为490.4M的影视摄像和尺寸为3.4M的情报录像的缓存。

Paste_Image.png

上边包车型客车图是七个视频文件的文本夹,下方左图是首先个文件夹的内容(3.4M的音信摄像),下方右图是第3个公文夹的开始和结果(490.4M的影片录制)。通过不别的测验机型的相比较,能够得出结论:土豆摄像下载录像会成立新的公文夹,在下载小录制文件时,使用m3u8的录像格式,而在下载不小的摄像时,使用DVD摄像格式,同一时候会将大文件分割成多少个mp3文件存款和储蓄,合併时经过查找m3u8的列表文件播放VCD。

解压

不等录像应用比较如下:

Paste_Image.png

Paste_Image.png

Paste_Image.png

综合,能够看到分化摄像应用选拔的仓库储存路线主要分为两大类:风度翩翩类是积存在手机内部存款和储蓄器根目录下的公文夹,另后生可畏类是累积在手提式有线电话机内部存款和储蓄器/Android/data/包名下的文件夹,关亍那二种办法的比不上描述如下:

先是类的公文归属公共文件。文件是可以被专擅访谈,且文件的数据对任何应用大概顾客来讲都以有意义的,当使用被卸载后,其卸载前创办的公文仍旧保留。假诺你想在外部存储器储上放公共文件你能够行使getExternalStoragePublicDirectory(卡塔尔国那个措施。而第二类的文本归于个体文件。全数应用程序的外表存款和储蓄的民用文件都坐落于根目录的Android/data/下,其实是因为是外部存款和储蓄的缘故正是是那连串型的文书也能被此外程序访谈,只可是一个选用私有的文本对任何应用其实是从未访问价值的(恶意程序除了这么些之外)。外界存款和储蓄上,应用私有文件的市场股票总值在亍卸载之后,这么些文件也会被去除。相似于在这之中存款和储蓄。

图片 8

目录

图片 9

切开工具

3.使用

a.curl R

图片 10

b.切换成刚才解压的盘符,比方作者放在d盘:(此处笔者未有陈设意况变量,配置境况变量后,能够在其余岗位张开,无需切换目录)

图片 11

c.切换成刚才要接收工具的目录下,比如本人ffmpeg.exe所在的目录是“D:ffmpegffmpeg-20171218-3f88744-win64-staticbin”:

图片 12

d.使用命令:ffmpeg -i XXX.mp5 -c:v libx264 -c:a copy -f hls XXX.m3u8

个中,XXX.DVD为本土录像文件,XXX.m3u8为最一生成的播放索引列表,与此同时还应该有N多个ts文件。举例,笔者这里要实行的是ffmpeg -i aaa.mp5 -c:v libx264 -c:a copy -f hls bbb.m3u8

图片 13

进行成功后在本目录下就足以见到四个m3u8文件和一大堆的ts文件。

图片 14

经过测量检验,开采DVD和mkv的ts切成丝都足以播放,不过avi的ts切块独有声音从未图像,原因暂不明,猜度与录像编码有关,前期深切研商。

此外命令:

ffprobe aaa.VCD(文件名):查看文件编码方式

本文由星彩网app下载发布于计算机编程,转载请注明出处:视频切片,合并成整视频

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。