目录
1、ffmpeg安装教程
1.1 下载地址
1.2 ffmpeg环境配置
2、视频分割成ts文件
2.1 准备mp4文件
2.2 打开当前目录cmd命令窗口
3、根据m3u8文件合并ts文件
3.1 准备文件
3.2 输入命令
4、视频切片与加密
4.1 下载安装openssl
4.2 配置openssl
4.3 生成密钥
4.4 生成IV
4.5 编写keyinfo文件
4.6 切片与加密命令
4.7 m3u8文件解释
5、解密与合并
5.1 文件准备(来自第四部分)
5.2 解密合并命令
1、ffmpeg安装教程
1.1 下载地址
Releases · BtbN/FFmpeg-Builds (github.com)
1.2 ffmpeg环境配置
复制ffmpeg解压后的路径
配置ffmpeg环境变量:高级系统设置>环境变量>双击系统变量Path>新建>粘贴>确认
文章来源地址https://www.toymoban.com/news/detail-715003.html
2、视频分割成ts文件
2.1 准备mp4文件
part.mp4
2.2 打开当前目录cmd命令窗口
输入命令:
ffmpeg -i part.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 0 -hls_time 5 part.m3u8
默认的每片长度为 2 秒,m3u8 文件中默认只保存最新的 5 条片的信息,导致最后播放的时候只能播最后的一小部分(直播的时候特别注意)。
-hls_time n 设置每片的长度,默认值为 2,单位为秒。
-hls_list_size n 设置播放列表保存的最多条目,设置为 0 会保存有所片信息,默认值为5。
-hls_wrap n 设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0。这个选项能够避免在磁盘上存储过多的 片,而且能够限制写入磁盘的最多的片的数量。
-hls_start_number n 设置播放列表中 sequence number 的值为 number,默认值为 0。
注意:播放列表的 sequence number 对每个 segment 来说都必须是唯一的,而且它不能和片的文件名(当使用 wrap 选项时,文件名有可能会重复使用)混淆。
TS 文件是一种媒体的扩展名,它是日本高清摄像机拍摄下进行的封装格式。
MPEG2-TS(Transport Stream“传输流”;又称TS、TP、MPEG-TS 或 M2T)
是用于音效、图像与数据的通信协定,最早应用于DVD的实时传送节目。
MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。
3、根据m3u8文件合并ts文件
3.1 准备文件
3.2 输入命令
ffmpeg -i part.m3u8 -c copy 2.mp4
4、视频切片与加密
4.1 下载安装openssl
Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions (slproweb.com)
4.2 配置openssl
复制安装后的目录如图
配置openssl高级变量:高级系统设置>环境变量>双击系统变量Path>新建>粘贴>确认
测试
4.3 生成密钥
openssl rand 16 > [密钥存放位置]
命令: openssl rand 16 > R:\a_tast\encrypt.key
4.4 生成IV
命令:openssl rand -hex 16
得到一串字符串:354e640be9affa01868e6b2b7785b5d2
4.5 编写keyinfo文件
文件名:aa.keyinfo
http://localhost:8080/ld/encrypt.key
R:\a_tast\encrypt.key
354e640be9affa01868e6b2b7785b5d2
第一段:解密文件路径,必须是URI,用来解密视频文件,这里使用tomcat服务
第二段:是加密文件路径
第三段:之前生成的IV
4.6 切片与加密命令
依然打开当前目录的cmd窗口如2.2,或者使用绝对路径
ffmpeg -y -i 1.mp4 -c:v libx264 -c:a copy -f hls -hls_time 5 -hls_list_size 0 -hls_key_info_file aa.keyinfo -hls_playlist_type vod -hls_segment_filename part%d.ts part.m3u8
4.7 m3u8文件解释
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="http://localhost:8080/ld/encrypt.key",IV=0x354e640be9affa01868e6b2b7785b5d2
#EXTINF:7.833333,
part0.ts
#EXTINF:3.600000,
part1.ts
#EXTINF:4.166667,
part2.ts
#EXTINF:6.400000,
part3.ts
#EXTINF:4.166667,
part4.ts
#EXTINF:4.166667,
part5.ts
#EXTINF:0.966667,
part6.ts
#EXT-X-ENDLIST
#EXTM3U M3U8文件头,必须放在第一行;
#EXT-X-MEDIA-SEQUENCE 第一个TS分片的序列号,一般情况下是0,但是在直播场景下,这个序列号标识直播段的起始位置; #EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION 每个分片TS的最大的时长;
#EXT-X-TARGETDURATION:10 每个分片的最大时长是 10s
#EXT-X-ALLOW-CACHE 是否允许cache;
#EXT-X-ALLOW-CACHE:YES
#EXT-X-ALLOW-CACHE:NO 默认情况下是YES
#EXT-X-ENDLIST M3U8文件结束符;
#EXTINF extra info,分片TS的信息,如时长,带宽等;一般情况下是
#EXTINF:<duration>,[<title>] 后面可以跟着其他的信息,逗号之前是当前分片的ts时长,分片时长 移动要小于
#EXT-X-TARGETDURATION 定义的值;
#EXT-X-VERSION M3U8版本号
#EXT-X-DISCONTINUITY 该标签表明其前一个切片与下一个切片之间存在中断。下面会详解
#EXT-X-PLAYLIST-TYPE 表明流媒体类型;
#EXT-X-KEY 是否加密解析,
#EXT-X-KEY:METHOD=AES-128,URI="http://localhost:8080/ld/encrypt.key" 加密方式是AES-128,秘钥需要请求http://localhost:8080/ld/encrypt.key,请求回来存储在本地;
5、解密与合并
5.1 文件准备(来自第四部分)
5.2 解密合并命令
ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i part.m3u8 -c copy 2.mp4
一定要确保m3u8里面的请求路径能访问到文章来源:https://www.toymoban.com/news/detail-715003.html
到了这里,关于ffmpeg教程:视频切片与合并,加密与解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!