1. 安装ffmpeg工具
sudo apt install ffmpeg
2. 确保所有ts文件无损坏后,确保当前目录(即存放ts文件的目录)无txt文件及mp4文件,在存放ts文件的目录下建立test文件夹,将所有ts文件拷贝到test,运行以下脚本(该脚本与test文件夹在同一级目录)
大致目录结构:
.
├── film_00000.ts
├── film_00001.ts
├── ... ...
├── test
│ ├── film_00000.ts
│ ├── film_00001.ts
│ ├── ... ...
└── ts2mp4.py
import os
def get_tslist(_list, outname):
_list.sort(key= lambda x:int(x[5:9]))
out_list = \'concat:\'
for n in _list:
out_list = out_list + n + \'|\'
str1 = \'ffmpeg -i \'
str2 = \' -acodec copy -vcodec copy -absf aac_adtstoasc \'
end_list = str1 + "\"" +out_list[:-1] + "\"" + str2 + outname
os.system(end_list)
def get_mp4list(dstroot, outname2):
__list = os.listdir(dstroot)
__list.sort()
print(__list)
_list = []
for n in __list:
if n[-3:] == \'.ts\':
_list.append(n)
_list.sort(key= lambda x:int(x[5:9]))
print(_list)
print(_list)
temp = []
cnt = 0
cnt2 = 1
cnt3 = 0
for n in _list:
if n[-3:] == \'.ts\':
temp.append(n)
cnt = cnt + 1
cnt3 = cnt3 + 1
if cnt == 10 or cnt3 == len(_list):
outname = str(cnt2) + \'.mp4\'
get_tslist(temp, outname)
temp = []
cnt = 0
cnt2 = cnt2 + 1
end_mp4(outname2)
def end_mp4(outname2):
__list = os.listdir(\'./\')
_list = []
for n in __list:
if n[-4:] == \'.mp4\':
_list.append(n)
_list.sort()
cnt = 0
for k in _list:
if k[-4:] == \'.mp4\':
cnt = cnt + 1
for m in range(len(_list)):
n = str(m+1) + \'.mp4\'
print(n)
str1 = \'file \' + n + \'\n\'
f = open(\'1.txt\', \'a+\')
f.write(str1)
f.close()
if m == cnt:
break
end_str = \'ffmpeg -y -f concat -safe 0 -i \' + \'1.txt\' + \' -c copy output.mp4\'
print(end_str)
os.system(end_str)
if __name__ == "__main__":
dstroot = \'./test\'
outname = \'out.mp4\'
get_mp4list(dstroot, outname)
3. 保存当前名为out.mp4的视频文件,其他的文件删掉即可