使python合并bilibili的离线缓存

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: # [url]https://zhuanlan.zhihu.com/p/631220387[/url]
            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 < 100:
        print('当前进度: %d %%'%(p))
    elif p == 100:
        print('\033[1;32;40m合并完成\033[0m')
 
 
def main():
    # print (os.environ['HOME'])
    # print (os.path.expandvars('$HOME'))
    defaultRoot = os.path.expanduser('~') + r'\Videos\bilibili'
 
    targetRoot = input('\033[1;37;43m请输入Bilibili离线缓存的目录(直接回车,使用默认目录): \033[0m') or defaultRoot # 带有颜色的输出 [url]https://blog.csdn.net/weixin_44478378/article/details/104967241[/url]
 
    if not os.path.isdir(targetRoot):
        print('\033[0;37;41m错误:输入的不是一个目录.\033[0m')
        return
     
    if not os.path.exists(targetRoot):
        print('\033[0;37;41m错误:输入了一个不存在的目录.\033[0m')
        return
 
    print('\033[0;37;43m输入的目录是:\033[0m')
    print('  ' + targetRoot)
    print('\033[0;37;41m回车确认后开始进行离线缓存文件合并.\033[0m')
 
    cacheItems = []
    for sub in os.listdir(targetRoot):
        subdir = targetRoot + '\\' + sub
        if os.path.isdir(subdir):
            cacheItems.append(cacheItem(sub, subdir))
 
    total = len(cacheItems)
    print('\033[0;37;43m共找到离线缓存: ' + str(total) + ' 个。\033[0m')
 
    if len(cacheItems) > 0:
        for i in range(total):
            process(cacheItems[i], math.ceil((i + 1) * 100/ total))
 
 
if __name__ == '__main__': 
    main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜栩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值