|
10鱼币
def merge_ts():
lst=[]
with open("哲仁王后",mode="r",encoding="utf-8")as f:
for line in f:
if line.startswith("#"):
continue
line = line.strip().split("/")[-1]
lst.append(f"video/{line}")
s="+".join(lst)
#print(s)#video/o68eRrXg.ts+video/KuX3T8rF.ts~~~
os.system(f"copy/b {s} movie.mp4")
print("搞定")
merge_ts()
video文件中.ts可以观看也可以正常读出,代码执行也到“搞定”,但是pycharm目录没看到MP4文件。
广大网友这是哪里的问题?????
本帖最后由 jackz007 于 2024-12-13 17:05 编辑
代码没有逻辑和语法问题,只是在 .ts 片段文件太多的情况下,有可能导致 Copy 命令行过长,一旦超出限度,会导致命令失效。还有一个问题,像这样通过直接合并 ts 片段得到的文件仍然是 .ts 格式,并非 .mp4 格式。
楼主可以试试这个代码,基本上继承自楼主的代码,只不过加入了片段文件检测,并且,把原来的一个单独命令行分解为多个,每次操作只合并不超过 4 个片段文件:
- import os
- '''
- 所有的 ts 片段文件已经全部下载完成,ts 文件保持原始名称,所有的 ts 文件位于 video 子目录内。
- '''
- def merge_ts(fn1 , fn2) :
- with open(fn1 , mode = 'r' , encoding = 'utf-8') as fp :
- lst = []
- for line in fp . read() . split('\n') :
- if line and not line . startswith('#') :
- ts = 'video\\' + line . split('/')[-1]
- if os . path . exists(ts) :
- lst . append(ts)
- else :
- print('\n【失败】:ts 文件 [%s] 不存在!\n' % ts)
- break
- else :
- if lst :
- fp = open(fn2 , 'wb')
- fp . close()
- n = 4
- for k in range(0 , len(lst) , n) :
- d = n if k + n < len(lst) else len(lst) - k
- x = '+' . join([lst[k + i] for i in range(d)])
- cmd = 'Copy/b %s+%s %s' % (fn2 , x , fn2)
- print(cmd)
- os . system(cmd)
- print('\n【成功】:输出文件为 [%s]\n' % fn2)
- merge_ts('哲仁王后' , 'movie.ts')
复制代码
以后下载视频文件的时候,为 ts 文件重新命名,在文件名称中加入足以体现前后顺序的数字编号,这样的话,合并文件就会变得十分简单,在 CMD 窗口内,一条命令即可搞定:
当然,直接用 Python 代码拼接是最为简单的
- import os
- '''
- 所有的 ts 片段文件已经全部下载完成,ts 文件保持原始名称,所有的 ts 文件位于 video 子目录内。
- '''
- def merge_ts(fn1 , fn2) :
- with open(fn1 , mode = 'r' , encoding = 'utf-8') as fp :
- stream = b''
- for line in fp . read() . split('\n') :
- if line and not line . startswith('#') :
- ts = 'video\\' + line . split('/')[-1]
- if os . path . exists(ts) :
- with open(ts , 'rb') as fp2
- stream += fp2 . read()
- else :
- print('\n【失败】:ts 文件 [%s] 不存在!\n' % ts)
- break
- else :
- if stream :
- with open(fn2 , 'wb') as fp2 :
- fp2 . write(stream)
- print('\n【成功】:输出文件为 [%s]\n' % fn2)
- merge_ts('哲仁王后' , 'movie.ts')
复制代码
|
最佳答案
查看完整内容
代码没有逻辑和语法问题,只是在 .ts 片段文件太多的情况下,有可能导致 Copy 命令行过长,一旦超出限度,会导致命令失效。还有一个问题,像这样通过直接合并 ts 片段得到的文件仍然是 .ts 格式,并非 .mp4 格式。
楼主可以试试这个代码,基本上继承自楼主的代码,只不过加入了片段文件检测,并且,把原来的一个单独命令行分解为多个,每次操作只合并不超过 4 个片段文件:
以后下载视频 ...
|