在今年的任务计划中有一项是做一个视频网站,当然其中需要的就是将mp4转 m3u8 格式,为啥要转为m3u8呢?这是因为m3u8以片段的形式储存,快进的时候拉到哪就看哪,如果是完整的mp4文件,则需要全部下载,浪费服务器带宽和用户时间。
1、下载ffmpeg https://ffmpeg.zeranoe.com/builds/
下载完成后解压到任务目录(尽量不要有中文) 然后设置bin目录到系统环境变量(path)
2、对视频进行转码(转为MP4) 为啥要转码呢? 将视频文件转为视频编码h.264,音频编码aac格式的mp4文件
1 ffmpeg -i out.mp4 -c:v libx264 -strict -2 real.mp4 out.mp4 是待转码的文件(可以是其他格式,比如avi……之类的) real.mp4 是转码输出文件 libx264 转为 h.264编码
这里我为啥要讲mp4再转码一次呢?因为我这个mp4视频文件不是h.264编码,所以需要再转一次,不然到后面切片的时候会遇到很多莫名其妙的问题。
这个过程一般比较长,根据电脑CPU和视频长度决定。当然也可以使用GPU进行转码,这样更快~
3、将MP4转换为ts格式文件(单个ts) 命令格式如下:
1 2 ffmpeg -y -i 待转换mp4文件路径 -c copy -vbsf h264_mp4toannexb 目标ts文件 ffmpeg -i real.mp4 -c copy -vbsf h264_mp4toannexb output.ts 转码成功后会生成ts文件
4、将ts切片,并生成m3u8文件 命令格式:
1 2 3 4 5 6 7 ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 5 output%03d.ts #output.ts 已生成的ts文件 #playlist.m3u8 待生成的m3u8文件名 #5 切片时间,表示隔几秒进行切一个文件 #output%03d.ts 生成切割ts文件名,output%03d.ts 代表生成output001.ts、output002.ts这样的格式, #03d 可以随意修改,占位符。 这里我新建一个文件夹用了存放切片的 m3u8和output.ts文件,那么命令则是
...