使python合并bilibili的离线缓存

查看 147|回复 10
作者:goldli   
视频观看地址#https://www.bilibili.com/video/B ... b3664ef51a903f859de
代码
[Python] 纯文本查看 复制代码import os
import math
ffmpeg = r'.\bin\ffmpeg -loglevel quiet -i %s -i %s -c copy  %s'
class ret(object):
    def __init__(self, hasFiles, files) -> None:
        self.hasFiles = hasFiles
        self.files = files
        pass
class cacheItem(object):
    def __init__(self, name, path) -> None:
        self.name = name
        self.path = path
        pass
    def getOutputName(self):
        return os.path.join(self.path, self.name + '.mp4')
   
    def getFiles(self):
        files = []
        for file in os.listdir(self.path):
            if file.endswith('.m4s'):
                files.append(os.path.join(self.path, file) )
        targetFile = []
        result = len(files) == 2
        if result:
            if '30280' in files[0] > 0:
                targetFile.append(files[1])
                targetFile.append(files[0])
            else:
                targetFile.append(files[0])
                targetFile.append(files[1])
        return ret(result, targetFile)
def rewriteFile(fileName, fileIndex):
    tmpFile = fileName + ('.mp4' if fileIndex == 0 else '.mp3')
    try:
        with open(fileName, 'rb') as file: # https://zhuanlan.zhihu.com/p/631220387
            file.seek(9)
            context = file.read()
            with open(tmpFile, 'wb') as tvideo:
                tvideo.write(context)
                tvideo.close()
            file.close()
        return True
    except Exception as e:
        print(e)
        return False
def process(cacheItem,  p):
    targetOutput = cacheItem.getOutputName()
    if os.path.exists(targetOutput):
        print('文件已存在:' + targetOutput)
        return
    ret = cacheItem.getFiles()
    if not ret.hasFiles:
        print('\033[0;37;41m跳过目录: ' + cacheItem.name + '\033[0m')
        return
    fileIndex = 0
    for file in ret.files:
        if not rewriteFile(file, fileIndex):
            break
        fileIndex +=1
    try:
        os.system(ffmpeg%(ret.files[0]+'.mp4', ret.files[1]+'.mp3', cacheItem.getOutputName()))
        os.remove(ret.files[0]+'.mp4')
        os.remove(ret.files[1]+'.mp3')
    except Exception as e:
        print(e)
    if p  0:
        for i in range(total):
            process(cacheItems, math.ceil((i + 1) * 100/ total))
if __name__ == '__main__':
    main()

离线, 缓存

hrh123   

代码学习了,不过getFiles里直接用列表推导式会不会运行起来更快
[Python] 纯文本查看 复制代码files = [os.path.join(self.path, file) for file in os.listdir(self.path) if file.endswith('.m4s')]
ycz0030   

不错,多谢分享
Huibq120   

刚好看python,学习了
dujuan   

感谢分享,学习了
yunce   

手头正好有一堆缓存的视频,来学习一下
lddzxx   

感谢分享
WX2886   

感谢大佬分享
moruye   

感谢分享,顺便学习学习
86618513   

感谢楼主分享
您需要登录后才可以回帖 登录 | 立即注册

返回顶部