问题:如何将视频进行切片?
解决:使用ffmpeg工具
方法:
1、安装
sudo apt-get install ffmpeg
或 sudo apt-get install libav-tools
2、查看视频文件编码方式
ffprobe input.mp4
可以以json格式输出
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
3、将视频文件转为视频编码h264,音频编码aac格式的mp4文件
如果编码为h264/aac,则运行
ffmpeg -i input.mkv -acodec copy -vcodec copy out.mp4
或 avconv -i input.mkv -acodec copy -vcodec copy out.mp4
否则
ffmpeg -i input.mkv -acodec libfaac -vcodec libx264 out.mp4
4、将mp4文件转为ts文件
ffmpeg -i out.mp4 -c copy -bsf h264_mp4toannexb output.ts
如果报错:Packet header is not contained in global extradata
可以使用 ffmpeg -i out.mp4 -c copy -bsf:v h264_mp4toannexb output.ts
5、 将ts切片,并生成m3u8文件
ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts
注:如果第4步出现Unrecognized option 'c' Failed to set value 'copy' for option 'c'的错误时,可能是因为ffmpeg版本太旧,建议更新版本
第4步和第5步可以合并
ffmpeg -i video/vvvv.mp4 -c copy -map 0 -y -f segment -segment_list video/playlist.m3u8 -segment_time 10 -bsf:v h264_mp4toannexb video/cat_output%03d.ts
拓展:
# 获取video/vvvv.mp4的视频时间
ffmpeg -i video/vvvv.mp4 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//
# 生成缩略图, 其中out%d.png 表示生成多张图片%d表示占位符
ffmpeg -i video/vvvv.mp4 -y -f image2 -vf fps=fps=1 out%d.png
# 每一分钟截一次图
ffmpeg -i myvideo.avi -y -f image2 -vf fps=1/60 img%03d.jpg
# 生成10*10的缩略图 fps=fps=1 表示每一帧抓取一次 -y 表示同意覆盖
ffmpeg -i video/vvvv.mp4 -y -f image2 -vf "fps=fps=1,scale=180*75,tile=10x10" out%d.png
# 生成视频封面
ffmpeg -i input.flv -y -f image2 -ss 00:00:14.435 -t 0.001 out.png
参考:
http://blog.csdn.net/u010210927/article/details/51322155
http://blog.csdn.net/liuzhuanshaonian/article/details/52087815