当前位置:   article > 正文

python使用ffmpeg分割视频为Hls分片文件/使用OpenSSL加密m3u8和TS文件

python使用ffmpeg分割视频为Hls分片文件/使用OpenSSL加密m3u8和TS文件

 FFmpeg和OpenSSL是一个开源免费的软件,在官网上就能下载, FFmpage网址(建议选择文件名full结尾的文件):Builds - CODEX FFMPEG @ gyan.dev OpenSSL网址(建议选择win64的MSI文件):Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions

 添加到环境变量

 Windows下下载安装OpenSSL和FFmpeg  参考以下链接

http://t.csdnimg.cn/CM81h

注意 ffmpeg openssl 都要添加到系统环境变量

ffmpeg -version #查看ffmpeg版本命令
openssl version #查看openssl版本命令

  1. import os
  2. import subprocess
  3. from cryptography.fernet import Fernet
  4. # 生成加密密钥
  5. key = Fernet.generate_key()
  6. # 视频文件路径
  7. video_path = 'ceshi.mp4.mp4'
  8. # HLS输出目录
  9. hls_output_dir = 'hls_output'
  10. # 使用ffmpeg分割视频
  11. split_command = f'ffmpeg -i {video_path} -c:v libx264 -c:a aac -strict experimental -map 0 -f ssegment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts'
  12. # 执行命令
  13. subprocess.run(split_command, shell=True, check=True)
  14. # 使用OpenSSL加密m3u8和TS文件
  15. encrypt_command = f'openssl enc -aes-256-cbc -in playlist.m3u8 -out playlist.m3u8.enc -iv 00000000000000000000000000000000 -K {key.decode("utf-8")}'
  16. for i in range(1, 100):
  17. ts_file = f'output{i:03d}.ts'
  18. encrypt_command += f' -in {ts_file} -out {ts_file}.enc -iv 00000000000000000000000000000000 -K {key.decode("utf-8")}'
  19. # 执行命令
  20. subprocess.run(encrypt_command, shell=True, check=True)
  21. # 删除原始的m3u8和ts文件,只保留加密版本
  22. os.remove('playlist.m3u8')
  23. for i in range(1, 100):
  24. ts_file = f'output{i:03d}.ts'
  25. os.remove(ts_file)
  26. os.renames(f'{ts_file}.enc', ts_file)
  27. print("HLS encryption completed.")
  28. # 这个命令使用了FFmpeg工具来分割视频文件。让我逐步解释每个部分的含义:
  29. #
  30. # ffmpeg: 这是调用FFmpeg工具的命令。
  31. #
  32. # -i {video_path}: -i 选项后面跟着视频文件的路径 {video_path},表示输入文件的位置。在这里,{video_path}应该是你想要分割的视频文件的路径。
  33. #
  34. # -c:v libx264: -c:v 选项指定视频编解码器,这里选择了 libx264,它是一个用于H.264视频编码的开源编码器。这意味着输出的视频文件将使用 H.264 编码。
  35. #
  36. # -c:a aac: -c:a 选项指定音频编解码器,这里选择了 aac,表示输出的音频将使用 AAC 编码。
  37. #
  38. # -strict experimental: 这个选项告诉FFmpeg在使用某些编解码器时采用实验性的严格模式。
  39. #
  40. # -map 0: 这个选项将输入的所有流映射到输出。-map 0 表示将输入文件的所有流(视频、音频等)都包含在输出中。
  41. #
  42. # -f ssegment: -f 选项用于指定输出格式,这里选择了 ssegment,表示输出为分段流格式。
  43. #
  44. # -segment_list playlist.m3u8: -segment_list 选项指定了分段流的播放列表文件名。在这里,生成的播放列表文件名为 playlist.m3u8,它是一种常见的用于指定分段流的播放列表格式。
  45. #
  46. # -segment_time 10: -segment_time 选项指定了每个分段的时长,这里设置为 10 秒,表示每个分段视频的时长为 10 秒。
  47. #
  48. # output%03d.ts: 这是输出文件的命名模式。%03d 表示输出文件名中的数字部分使用三位数字,例如 output001.ts、output002.ts 等。.ts 表示输出文件的格式为 MPEG-2 Transport Stream 格式。
  49. #
  50. # 综合起来,这个命令的作用是将输入的视频文件分割成多个时长为 10 秒的分段视频,并生成一个名为 playlist.m3u8 的播放列表文件,用于指定分段视频的播放顺序。
  51. #
  52. # for i in range(1, 100):
  53. # ts_file = f'output{i:03d}.ts'
  54. # encrypt_command += f' -in {ts_file} -out {ts_file}.enc -iv 00000000000000000000000000000000 -K {key.decode("utf-8")}'
  55. #
  56. # # 执行命令
  57. # subprocess.run(encrypt_command, shell=True, check=True)
  58. #
  59. #
  60. # 这段代码是在循环中对每个分段视频文件进行加密操作,并将加密后的文件保存在原始文件名后加上 .enc 后缀的新文件中。
  61. #
  62. # 让我们逐行分析:
  63. #
  64. # for i in range(1, 100):: 这是一个循环语句,它会对 i 从 1 到 99 进行迭代。
  65. #
  66. # ts_file = f'output{i:03d}.ts': 这一行使用了 f-string 格式化字符串的功能,将 i 格式化为三位数字,并拼接到字符串 'output' 后面,然后再加上 .ts 后缀,形成每个分段视频文件的文件名。例如,当 i 为 1 时,ts_file 的值为 'output001.ts'。
  67. #
  68. # encrypt_command += f' -in {ts_file} -out {ts_file}.enc -iv 00000000000000000000000000000000 -K {key.decode("utf-8")}':
  69. # 这一行构建了一个命令字符串,用于执行加密操作。-in {ts_file} 指定了输入文件为当前循环迭代中的分段视频文件,
  70. # -out {ts_file}.enc 指定了输出文件为输入文件名后加上 .enc 后缀的新文件,即加密后的视频文件。-iv 00000000000000000000000000000000 指定了初始化向量 (IV),
  71. # 这里使用了全零的 IV。-K {key.decode("utf-8")} 指定了加密密钥,使用了之前生成的密钥,并将其解码为字符串形式。
  72. #
  73. # subprocess.run(encrypt_command, shell=True, check=True): 这一行执行了加密命令,使用了 subprocess.run() 函数来执行命令字符串 encrypt_command。
  74. # shell=True 参数表示使用 shell 来执行命令,check=True 参数表示如果命令执行失败则抛出异常。
  75. #
  76. # 综合起来,这段代码的作用是对每个分段视频文件进行加密,并将加密后的文件保存在原始文件名后加上 .enc 后缀的新文件中。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/414642
推荐阅读
相关标签
  

闽ICP备14008679号