python脚本使用ffmeg合并超多ts文件到.mp4

本文介绍了在处理大量TS文件合并时遇到的'too many open files'问题,以及解决方案。通过Python的os模块分割文件列表,并利用ffmpeg进行TS到MP4的转换。同时,针对ffmpeg不支持直接合并MP4文件的问题,提出了一种通过txt文件列表合并MP4文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到的坑:

  • 合并ts文件过多时提示”too many open files”错误
  • ffmpeg不支持mp4文件的合并

刚开始完python,感觉python操作起文件真爽,一些基本的函数我都感觉特别高大上啊[捂脸]:

  • os.listdir()列出文件夹所有文件并等额分割
  • 路径与文件名完美拼接
  • ffmpeg合并ts文件到mp4
  • ffmpeg合并多个mp4文件到一个mp4

贴代码

import os
dirs = "/data/vod/ts/"
mp4 = "/data/vod/mp4/"
filename = "asddaas.mp4"
a = 1
content = ""
lists = os.listdir(dirs)
b = [lists[i:i+250] for i in range(0,len(lists),250)]
### 使用PythonFFmpegTS文件合并MP4 为了实现这一目标,可以编写一段Python脚本来调用FFmpeg命令行工具。此过程涉及几个关键步骤:准备输入文件列表、构建并执行FFmpeg命令以及清理临时文件。 #### 准备工作 首先,需要创建一个文本文件`hebing.txt`来记录所有待合并TS文件路径。该文件中的每一行应包含一个完整的TS文件路径,并且每条记录前加上`file '`标签,例如: ``` file 'path/to/first.ts' file 'path/to/second.ts' ... ``` 这段配置告诉FFmpeg按照指定顺序读取这些分片并将它们连接在一起[^2]。 #### Python代码示例 下面是一个简单的Python程序,用于自动化上述流程: ```python import os import glob import subprocess def create_file_list(ts_files_dir, list_filename='hebing.txt'): """生包含所有TS文件路径的清单""" with open(list_filename, 'w') as f: ts_files = sorted(glob.glob(os.path.join(ts_files_dir, "*.ts"))) for ts in ts_files: f.write(f"file '{ts}'\n") def merge_ts_to_mp4(input_list, output_video): """通过FFmpegTS文件合并为单个MP4文件""" command_line = [ "ffmpeg", "-f", "concat", "-safe", "0", # 解决相对路径问题 "-i", input_list, "-c", "copy", output_video ] try: result = subprocess.run(command_line, check=True) print("视频合并功") except subprocess.CalledProcessError as e: print(f"发生错误: {e}") if __name__ == "__main__": ts_directory = "./ts_files/" # 存放TS文件夹的位置 if not os.path.exists(ts_directory): raise FileNotFoundError(f"{ts_directory}不存在") create_file_list(ts_directory) final_output = "output.mp4" merge_ts_to_mp4('hebing.txt', final_output) # 清理不再需要的中间件 deleteFile(ts_directory) ``` 注意,在实际应用中可能还需要处理更细节,比如确保目录存在与否、捕获异常情况下的日志信息等。此外,对于生产环境来说建议进一步优化性能参数设置以适应具体需求[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值