阅读量:0
适用于在本地需要拼接大量的.ts文件
代码如下:
# /usr/bin/env python # -*- coding: utf-8 -*- import datetime import os def test(path, save_path): """path是需要合并的路径, save_path是保存路径""" # 首先获取当前路径下的文件名列表,并判断是否存在一个名为 file_list.txt 的文件,如果存在则删除 file_names = os.listdir(path) if 'file_list.txt' in file_names: os.remove(path+'file_list.txt') # 定义一个输出文件名,并判断输出文件名是否已经存在,如果存在则添加“新”前缀 out_file_name = 'output.mp4' while out_file_name in os.listdir(save_path): out_file_name = '新' + out_file_name # 读取当前路径下所有 ts 文件,并对 ts 文件名进行排序,根据文件名的数字部分进行排序 ts_files = [f for f in os.listdir(path) if f.endswith('.ts')] sorted_files = sorted(ts_files, key=lambda x: int(x.split('.')[0])) # 打开一个名为 file_list.txt 的文件,并将合并后的 ts 文件路径写入文件 with open(path+'file_list.txt', 'w', encoding='utf-8') as f: for file in sorted_files: f.write(f"file '{file}'\n") print("生成txt文件成功!") # 开始合并视频 start = datetime.datetime.now() print('开始合成,初始时间为:', datetime.datetime.now()) ffmpeg_bin_dic = 'K:\\1\\ffmpeg\\bin\\' os.system(ffmpeg_bin_dic+'ffmpeg -f concat -safe 0 -i '+path+'file_list.txt'+' -c ' + ' copy ' + save_path + out_file_name) print('合成后的当前时间为:', datetime.datetime.now()) print('合成视频完成!用时:'+str(datetime.datetime.now()-start)) test('K:/1/1/', 'K:/1/1/')
ffmpeg使用语法:
命令格式:
ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件] ffmpeg [[options]['-i' input_file]]... {[options] output_file}...
具体:
-f concat,-f 一般设置输出文件的格式,如-f psp(输出psp专用格式),但是如果跟concat,则表示采用concat协议,对文件连接合并。
-safe 0,用于忽略一些文件名错误,如长路径、空格、非ANSIC字符
参考:
Python批量下载ts视频文件,并用ffmpeg合并
python合并ts视频(三种方法)
ffmpeg的一些初级语法
ffmpeg命令基本语法和常见命令