ffmpeg -i http://vn.xcar.com.cn/xtv/qiniu/video/converted/m3u8/2019/10/25/m3u8_o_1do0gva3uqpps378l3kjnna0_720p.m3u8
-c copy -bsf:a aac_adtstoasc output.mp4
1.下载资源: wget http://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gz
2.解压:tar -zxvf ffmpeg-3.1.tar.gz
配置:cd ffmpeg-3.1
./configure --prefix=/usr/local/ffmpeg
编译:make && make install
3.设置环境变量:vi /etc/profile
添加PATH=$PATH:/usr/local/ffmpeg/bin
export PATH
保存并退出
使生效:source /ect/profile
4.验证:ffmpeg -version
:
1.下载资源: wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
2.解压:tar -zxvf yasm-1.3.0.tar.gz
配置:cd yasm-1.3.0
./configure
编译:make && make install
## 1.视频截取
简单命令:
ffmpeg -i input.mp4 -ss 1:05 -t 10 output.mp4
-ss 5指定从输入视频第1:05秒开始截取,-t 10指明最多截取10秒。
但是上面的命令可能会比较慢,更好的命令如下:
ffmpeg -ss 1:05 -i input.mp4 -t 10 -c:v copy -c:a copy output.mp4
把-ss 1:05放到-i前面,与原来的区别是,这样会先跳转到第1:05秒在开始解码输入视频,而原来的会从开始解码,只是丢弃掉前1:05秒的结果。
-c:v 和 -c:a分别指定视频和音频的编码格式。
-c:v copy -c:a copy标示视频与音频的编码不发生改变,而是直接复制,这样会大大提升速度
2、如果不是mp4的,可以用如下命令进行转
ffmpeg -i input.mkv -acodec copy -vcodec copy out.mp4
所以在这里我使用了ffmpeg切片,大致分为两步,第一步是构建TS文件,第二步是对ts文件切片(m3u8索引文件):
ffmpeg -i 输入视频源路径 -c copy -bsf h264_mp4toannexb 输出ts视频源路径
ffmpeg -i 11.mp4 -c copy -bsf h264_mp4toannexb cs.ts
ffmpeg -i 11.mp4 -c copy output.ts
ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 5 output%03d.ts
mp4转码m3u8
如果视频不为mp4格式,需先将视频转码为mp4,可使用如下命令进行转换
ffmpeg -i 本地视频地址 -y -c:v libx264 -strict -2 转换视频.mp4
将mp4格式转换为ts格式
ffmpeg -y -i 本地视频.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 转换视频.ts
将ts文件进行切片
ffmpeg -i 本地视频.ts -c copy -map 0 -f segment -segment_list 视频索引.m3u8 -segment_time 5 前缀-%03d.ts
其中segment 就是切片,-segment_time表示隔几秒进行切一个文件,上面命令是隔5s,你也可以调整成更大的参数。
M3u8:
从文件转HLS直播,也就是生成m3u8文件:
./ffmpeg -re -i test.mp4 -c copy -f hls -bsf:v h264_mp4toannexb output.m3u8
其中 -bsf:v h264_mp4toannexb是将MP4中的H.264数据转换为H.264AnnexB标准编码,如果源文件是FLV、TS等可作为直播传输流的视频,则不需要此参数
PHP执行命令
exec("ffmpeg -i 11.mp4 -c copy output.ts",$out,$status);
exec("ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 5 output%03d.ts ",$out,$status);