使用 Python 将 TS 文件合并成 MP4 格式

在视频处理中,TS(MPEG Transport Stream)格式是一种用于存储和传输视频流的格式,通常用于实时广播或视频流媒体。然而,TS 文件的兼容性较差,在很多场景下,我们需要将其转换为 MP4 格式,以便于更好的播放和分享。本文将介绍如何使用 Python 来实现 TS 文件的合并和转换为 MP4 格式。

准备工作

在开始之前,请确保您已安装了 Python 和相关的库。我们将使用 ffmpeg 工具,这是一个功能强大的开源视频处理工具。可以通过以下命令安装 ffmpeg

# Ubuntu
sudo apt-get install ffmpeg

# MacOS
brew install ffmpeg

同时,您需要确保安装了 ffmpeg-python 库。可以通过 pip 进行安装:

pip install ffmpeg-python

文件准备

首先,确保您有多个 TS 文件需要合并,假设这些文件的名称为 video1.ts, video2.ts, video3.ts

示例代码

下面是一个简单的 Python 脚本,用于将多个 TS 文件合并成一个 MP4 文件:

import ffmpeg

def merge_ts_to_mp4(ts_files, output_file):
    try:
        # 使用 ffmpeg 将 TS 文件合并并转换为 MP4
        ffmpeg.input('concat:' + '|'.join(ts_files)).output(output_file, format='mp4').run()
        print(f'Merged and converted to {output_file} successfully!')
    except Exception as e:
        print(f'Error: {e}')

if __name__ == "__main__":
    ts_files = ['video1.ts', 'video2.ts', 'video3.ts']  # 输入 TS 文件列表
    output_file = 'output.mp4'  # 输出 MP4 文件名
    merge_ts_to_mp4(ts_files, output_file)

代码说明

  1. 导入 ffmpeg 库。
  2. 定义 merge_ts_to_mp4 函数,接受 TS 文件列表和输出文件名作为参数。
  3. try 块中,使用 ffmpeg.input() 方法将 TS 文件串联起来,再用 .output() 方法指定输出文件和格式。
  4. 运行 ffmpeg 命令。
  5. if __name__ == "__main__": 块中定义 TS 文件和输出文件名并调用函数。

序列图

下面是该程序执行的序列图,展示了文件合并过程:

sequenceDiagram
    participant User
    participant Python Script
    participant FFmpeg

    User->>Python Script: 提供 TS 文件列表和输出文件名
    Python Script->>FFmpeg: 运行合并命令
    FFmpeg-->>Python Script: 返回处理结果
    Python Script-->>User: 显示成功信息

处理过程详解

  1. 输入准备:用户提供需要合并的 TS 文件及输出文件名。
  2. 调用 ffmpeg:Python 脚本构建了一个合并命令,并调用 ffmpeg 完成处理。
  3. 反馈信息:处理结束后,脚本将结果反馈给用户。

提示与注意事项

  • 在使用以上代码合并 TS 文件之前,确保这些 TS 文件能够正常播放,并且具有相同的编码格式和分辨率。

  • 当 TS 文件数量较多时,可以考虑使用文本文件(如 filelist.txt)将文件名逐行列出,再通过 ffmpeg 进行批量处理。

    创建一个文件 filelist.txt ,内容如下:

    file 'video1.ts'
    file 'video2.ts'
    file 'video3.ts'
    

    然后更新代码:

    ffmpeg.input('filelist.txt', format='concat').output(output_file, format='mp4').run()
    

总结

通过 Python 和 FFmpeg,我们可以轻松地将 TS 文件合并成 MP4 文件。这个过程不仅简单易懂,而且灵活高效。无论是进行视频编辑,还是处理视频流,掌握这个技能都能为您后续的工作提供很大的便利。如果您对视频处理有更高的需求, FFmpeg 的官方网站提供了丰富的文档和示例,助您深入探索更多高级功能。

希望本文对您有帮助!如有疑问,欢迎讨论与交流。