zoukankan      html  css  js  c++  java
  • 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 + '
    '
            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的视频文件,其他的文件删掉即可

  • 相关阅读:
    redis和memcache的区别
    c语言行编辑程序
    C语言栈的实现
    双向链表
    静态链表的合并
    静态链表的创建
    链表
    将非递减有序排列(L L1)归并为一个新的线性表L2 线性表L2中的元素仍按值非递减
    C语言合并两个集合(L,L1) 将L1中不在L中的元素插入到L线性表中
    oracle--JOB任务
  • 原文地址:https://www.cnblogs.com/niulang/p/12837109.html
Copyright © 2011-2022 走看看