ffmpeg教程:视频切片与合并,加密与解密

目录

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>新建>粘贴>确认

                

                

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里面的请求路径能访问到

                

猜你喜欢

转载自blog.csdn.net/weixin_50684992/article/details/132362215