为了解决项目中视频大的问题,我的想法是把视频切分成一小段一小段的短视频,然后按序播放。
m3u8是一项新型播放格式,这种播放格式支持目前市面的windows、androis、ios设备主流的浏览器,同样的视频文件既可以在Flash环境播放,又能在无Flash的Html5环境播放,当然它的优势还不止于此,在这就不一一列举了,所以我们打算是用m3u8格式代替mp4视频格式。
将MP4格式转换成m3u8格式需要用到FFmpeg命令行软件。FFmpeg是一套用来记录、转换数字音频、视频的计算机开源程序。他提供了录制、转换以及流化音视频的完整解决方案,下面就介绍FFmpeg的使用方法
安装
1、下载
首先去官网下载自己需要的FFmpeg版本 ,官网地址:http://ffmpeg.org
2、安装
将下载的压缩包解压到指定文件夹下,我的路径为D:\ffmpeg
3、配置环境变量
添加到环境变量:d:\ffmpeg\bin
4、配置全局变量
配置全局变量,可在任意目录下使用FFmpeg命令行,配置方法见下面常见问题
5、查看
查看FFmpeg版本信息,打开命令行窗口,输入ffmpeg –version
如下图即安装完成,可正常使用:
视频切片
1、如果视频不为MP4格式,需先将视频转码为MP4,可使用如下命令进行转换
ffmpeg -i 本地视频地址 -y -c:v libx264 -strict -2 转换视频名称.mp4
2、将MP4格式转换为ts格式
ffmpeg -y -i 本地视频.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 转换视频.ts
3、将ts文件进行切片
ffmpeg -i 本地视频.ts -c copy -map 0 -f segment -segment_list 视频索引.m3u8 -segment_time 5 前缀-%03d.ts
实例截图如下:
(1、将WMV格式视频转码为MP4)
(2、将MP4格式转换为ts格式)
(3、将ts文件进行切片)
(实例解析)
视频合成
我们在培训过程中录制视频难免会有各种突发情况导致会录制多个视频,下面就看下怎样将多个视频和成一个视频。思路是先将 MP4 转化为同样编码形式的 ts 流,因为 ts流是可以 concate 的,先把 MP4 封装成 ts ,然后 concate ts 流, 最后再把 ts 流转化为 MP4。
ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.tsffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.tsffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
其他功能
1、将视频 MP4 转化为 GIF
ffmpeg -i small.mp4 small.gif
从视频中第二秒开始,截取时长为3秒的片段转化为 gif
ffmpeg -t 3 -ss 00:00:02 -i small.webm small-clip.gif
2、将 GIF 转化为 MP4
ffmpeg -f gif -i animation.gif animation.mp4
也可以将 GIF 转为其他视频格式
3、慢倍速播放视频
ffmpeg -i input.mov -filter:v "setpts=2.0*PTS" output.mov
4、加倍速播放视频
ffmpeg -i input.mov -filter:v "setpts=0.5*PTS" output.mov
5、静音视频(移除视频中的音频)
ffmpeg -i input.mov -an mute-output.mov
-an 就是禁止音频输出
常见问题与解决方案
1、在执行查看FFmpeg版本命令时,会突然关闭命令行窗口
解决办法:是因为你的电脑安装了拦截软件,点“允许”即可,如果不在出现拦截窗口且仍是关闭,然换个安装目录则会再出现,再点击允许即可
2、报错,并建议使用“.\ffmpeg”
一是在安装文件bin文件里面将命令中 ffmpeg 换成 .\ffmpeg 即可
二是将FFmpeg设置为全局变量,设置方法如下:
3、报错如下,是H-265编码格式问题
解决办法:命令行不支持H-265编码格式的转换,需要将H-265的视频在视频编辑器中转存为H-264编码格式的视频再进行切片处理