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等可作为直播传输流的视频,则不需要此参数


操作m3u8的参数.png


EXT-X-TARGETDURATION:最大的分片时长,整数,四舍五入

EXT-X-MEDIA-SEQUENCE:直播切片序列,当打开文件时以这个标签的值为参考。

EXT-X-ENDLIST:结束标签,如果没有这个标签,都是从倒数第三片开始播放,如果不满三片则不播放。

EXTINF:为每一个分片的duration

EXT-X-DISCONTINUITY:前一分片与后一分片有不连续的时候播放可能会出错,需要这个标签,以播放当前分片的duraiton时间刷新M3U8列表,然后做对应的加载动作

EXT-X-STREAM-INF:
主要出现在多级M3U8文件中

AVERAGE-BANDWIDTH:当播放EXT-STREAM-INF下对应的M3U8时占用的平均码率 可选

CODECS:声明EXT-X-STREAM-INF下面对应的音频编码、视频编码信息
FRAME-RATE:视频帧率 可选

FFMpeg切片segment参数:

segment参数.png
segment参数1.png

将mp4转m3u8,内部格式依然是mp4:
只生成切片:
./ffmpeg -re -i test.mp4 -c copy -f segment -segment_format mp4 test_output_%d.mp4
生成切片以及m3u8:
./ffmpeg -re -i test.mp4 -c copy -f segment -segment_format mp4 -segment_list_type m3u8 -segment_list output.m3u8 test_output_%d.mp4

截取视频:
截取前10秒
./ffmpeg -i test2.mp4 -c copy -t 10 -copyts output.mp4
从第6秒开始截取:
./ffmpeg -ss 6 -i test2.mp4 -c copy output_ss6.mp4

从第6秒开始截取10秒:
ffmpeg -ss 6 -i test2.mp4 -c copy -t 10 output_ss6_t10.mp4

指定起始播放时间为第5秒,小于这个时间的会放不出来:
./ffmpeg -i test2.mp4 -c copy -t 10 -output_ts_offset 5 output_s5.mp4

抽出音频aac文件:
./ffmpeg -i test2.mp4 -vn -acodec copy output.aac

抽出视频流H.264:
./ffmpeg -i test2.mp4 -vcodec copy -an output.h264
抽出视频流H.265(测试无效??):
./ffmpeg -i test2.mp4 -vcodec copy -an -bsf hevc_mp4toannext -f hevc output.hevc

你可能感兴趣的:(ffmpeg分片 m3u8以及视频截取)