1. 首页
  2. 做趣事

ffmpeg自动分割mp4为m3u8格式脚本

食用方法:打开命令窗口,输入

命令名称+空格+拖入mp4文件

Enter会车 即可自动转码切片,把mp4视频转为m3u8视频。

把tom3u8()函数写入m3u8.sh,并加载此脚本文件在终端启动时。

function tom3u8(){
for f in "$@"
do
name=$(basename "$f")
dir=$(dirname "$f")
echo "转码文件为:"$f
ffmpeg -i "$f" -c copy -hls_time 10 -hls_list_size 0 -f hls -hls_segment_filename "$dir/${name%.*}-%03d.ts" -y "$dir/${name%.*}.m3u8"
echo "已输出播放列表$dir/${name%.*}.m3u8"
echo "切片存储目录$dir"
done
}

说明:

#转码切片、视频切割(ts+m3u8)
#每个 ts文件 按照 10s 切割,时间太大不利于流畅播放
#将一个mp4视频文件切割为多个ts片段,并在切割过程中对每一个片段使用 AES-128 加密,最后生成一个m3u8的视频索引文件
# -hls_playlist_type vod 是点播,表示PlayList不会变
# -hls_segment_filename每个小段的文件名,如果不设置分段存储的目录,则默认存在终端当前目录下。
# -hls_key_info_file key_info_file对段进行加密
# "-bsf:v h264_mp4toannexb"参数的作用是将MP4中的H.264数据转换为常见于实时传输流的H.264 AnnexB标准的编码。
# -hls_key_info_file "/Users/zzz/Documents/enc.keyinfo"
# -hls_list_size n:设置播放列表保存的最多条目,设置为0会保存所有切片信息,默认值为5
# -hls_time n: 设置每片的长度,默认值为2。单位为秒
# 暂时不加密切片,加密后的视频,播放器和网页都无法播放,-hls_key_info_file "/Users/zzz/Documents/enc.keyinfo"

# 虽然转码切片同时可以添加水印,为了提高转码切片大文件的效率,必须尽量精简操作,专注转码,并且不重新编解码音视频,以实现快速切片大文件,减轻cpu运算负担和机器过热减少电脑使用寿命。
# 并且copy编码瞬间切片的每小段基本都是按照设定的分段时间切片的,如果是逐帧编码切片的话,每小段都不是严格按照设定的时间分段的,只是尽量靠近那个时间。
# 转码的同时可以加透明背景的图片水印 -acodec copy -vf "movie='/Users/zzz/Documents/tianzu_Z.png',scale=210:70[watermark]; [in][watermark]overlay=main_w-overlay_w:main_h-overlay_h[out]"
# -c copy 音频视频都复制copy转码切片会比音频视频重新编解码快,瞬间切片完成,而不需要逐帧编码 -bsf:v h264_mp4toannexb -c:v libx264 -c:a aac

测试命令 tom3u8 拖入文件

ffmpeg自动分割mp4为m3u8格式脚本

执行结果

ffmpeg自动分割mp4为m3u8格式脚本

在设定的目录下生成了分割后的ts文件,m3u8是播放列表,里面包含了所有的ts文件,用播放器直接播放m3u8文件就能打开视频。

原创文章,作者:维尼兔,如若转载,请注明出处:https://www.v2v0.com/?p=280

发表评论

邮箱地址不会被公开。 必填项已用*标注

联系我们

 

工作时间:周一至周五,09:30-17:00,节假日休息