linux下將多個ts文件合並為一個MP4文件


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的視頻文件,其他的文件刪掉即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM