OBJUI

Python使用FFmpeg切片视频生成m3u8文件

2025-03-26 19:42:44 26

在 Python 中可以借助 subprocess 模块调用 FFmpeg 命令来对视频进行切片并生成 m3u8 文件。

1. 安装 FFmpeg

要保证系统已经安装了 FFmpeg,并且其可执行文件的路径已添加到系统的环境变量中。你可以通过以下命令来验证 FFmpeg 是否安装成功:

ffmpeg -version

若能正常输出版本信息,就表明安装成功。如果未安装去官网下载安装:https://ffmpeg.org/

2. 编写 Python 代码

下面是一个简单的 Python 示例,它使用 subprocess 模块调用 FFmpeg 命令来切片视频并生成 m3u8 文件:

import subprocess

def slice_video(input_file, output_dir, segment_time=10):
    """
    对视频进行切片并生成 m3u8 文件
    :param input_file: 输入视频文件的路径
    :param output_dir: 输出目录的路径
    :param segment_time: 每个切片的时长(秒),默认为 10 秒
    """
    try:
        # FFmpeg 命令
        command = [
            'ffmpeg',
            '-i', input_file,
            '-c:v', 'libx264',
            '-c:a', 'aac',
            '-hls_time', str(segment_time),
            '-hls_list_size', '0',
            '-f', 'hls',
            f'{output_dir}/output.m3u8'
        ]
        # 执行 FFmpeg 命令
        subprocess.run(command, check=True)
        print("视频切片完成,m3u8 文件已生成。")
    except subprocess.CalledProcessError as e:
        print(f"切片过程中出现错误: {e}")
    except Exception as e:
        print(f"发生未知错误: {e}")

if __name__ == "__main__":
    input_video = "input.mp4"  # 替换为你的输入视频文件路径
    output_directory = "output"  # 替换为你的输出目录路径
    slice_video(input_video, output_directory)

3. 代码解释

  • ​**slice_video 函数**​:该函数接收三个参数,分别是输入视频文件的路径、输出目录的路径以及每个切片的时长(默认为 10 秒)。
  • FFmpeg 命令​:
    • -i:指定输入视频文件。
    • -c:v libx264:使用 H.264 视频编码器。
    • -c:a aac:使用 AAC 音频编码器。
    • -hls_time:指定每个切片的时长。
    • -hls_list_size 0:指定 m3u8 文件中保存的切片数量为无限。
    • -f hls:指定输出格式为 HLS(HTTP Live Streaming)。
    • {output_dir}/output.m3u8:指定输出的 m3u8 文件路径。
  • ​**subprocess.run 函数**​:用于执行 FFmpeg 命令,并通过 check=True 参数确保命令执行成功。

4. 使用方法

  • input_video 替换为你要切片的视频文件的实际路径。
  • output_directory 替换为你想要保存切片文件和 m3u8 文件的目录的实际路径。
  • 运行 Python 脚本,等待切片过程完成。
更多精彩,请关注公众号

微信公众号