视频观看地址#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: # [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()
|