php-ffmpeg切片,ffmpeg视频切片

m3u8转MP4

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

ffmpeg视频切片

安装FFmpeg

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

提示没有yasm或太旧了,于是安装yasm

:

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,你也可以调整成更大的参数。

ffmpeg分片 m3u8以及视频截取

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);

你可能感兴趣的:(php-ffmpeg切片)