在 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 脚本,等待切片过程完成。