zoukankan      html  css  js  c++  java
  • ffmpeg 视频ts切片生成m3u8

    下面几种转换方式是不同版本和方法

    新版本ffmpeg转视频直接可以切边并生成 m3u8(目前用的方式,也可以用选项 segment ):

    ffmpeg -i '源文件.mp4' -c:v h264 -flags +cgop -g 30 -hls_time 20 -hls_list_size 0 -hls_segment_filename index%3d.ts 'index.m3u8'

    好像非 MP4 文件也可以直接切分,试了下 mkv、avi等,不太懂之后在研究,先使用就行。

    或者这个:

    ffmpeg -i input.mp4 -vcodec copy -acodec copy -hls_time 60 -hls_list_size 0 index.m3u8

    一、方法一

    1、首先将视频文件转为视频编码h264,音频编码aac格式的mp4文件

    使用ffprobe查看文件编码方式

    ffprobe input.mkv

    如果音视频编码为h264/aac则执行

    ffmpeg -i input.mkv -acodec copy -vcodec copy out.mp4

    否则执行

    ffmpeg -i input.mkv -acodec libfaac -vcodec libx264 out.mp4

    2、将mp4文件转为ts文件并生成m3u8

    1. 将mp4转为完整的ts

    ffmpeg -i out.mp4 -c copy -bsf h264_mp4toannexb output.ts

    如果不使用 -bsf h264_mp4toannexb 参数会提示错误,主要是因为使用了mp4中的h264编码 而h264有两种封装:

    一种是annexb模式,传统模式有statrtcode SPS和PPS是在ES中。

    另一种是mp4模式,一般mp4 mkv avi会没有startcode SPS和PPS以及其他信息被封装在container中 每一个frame前面是这个frame的长度,

    很多解码器只支持 annexb 这种模式,因此需要将mp4做转换,在ffmpeg中用 h264_mp4toannexb_filter 可以做转换,所以需要使用 -bsf h264_mp4toannexb 来进行转换。

    2. 将ts切片,并生成m3u8文件

    ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts

    二、方法二

    1.ffmpeg切片命令,以H264和AAC的形式对视频进行输出

    ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls output.m3u8

    注:-strict -2 之前是实验参数表示 aac音频编码,如果不使用aac音频编码使用使其的编码好像还需要导入第三方的音频编码库,使用FFmpeg自带的aac音频编码带上-strict -2 参数就可以了。

    2.ffmpeg转化成HLS时附带的指令 

    • -hls_time n: 设置每片的长度,默认值为2。单位为秒
    • -hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
    • -hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量
    • -hls_start_number n:设置播放列表中sequence number的值为number,默认值为0

    3.对ffmpeg切片指令的使用

    ffmpeg -i output.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 0 -hls_time 5 output1.m3u8

    三、方法三

    1、看看原视频是不是MP4啦 如果不是就需要转成MP4一下咯  

    ffmpeg -i 源文件 -y -c:v libx264 -strict -2 homexxx.mp4

    2、把MP4转成ts文件

    ffmpeg -y -i homexxx.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb homexxx.ts

    3、切分ts文件

    ffmpeg -i homexxx.ts -c copy -map 0 -f segment -segment_list homexxxindex.m3u8 -segment_time 30 homexxx
    xb-%04d.ts
    • -segment_list 指定 m3u8 文件
    • -segment_time 30 指定切片ts文件长度30秒

    如果是MP4文件,直接执行

    ffmpeg -i xxx.mp4 -f segment -segment_time 60 -segment_format mpegts -segment_list /home/xxx/video_name.m3u8 -c copy -bsf:v h264_mp4toannexb -map 0 /home/xxx/course-%04d.ts
  • 相关阅读:
    C#中IPAddress转换成整型int
    没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
    VB.NET或C#报错:You must hava a license to use this ActiveX control.
    c#几种随机数组和数组乱序
    C#封装的websocket协议类
    VB生成条形码(EAN-13)
    VB控件间的拖放
    VB用API模拟截屏键PrintScreen
    VB读写进程的内存
    几个VB常见又内涵的错误
  • 原文地址:https://www.cnblogs.com/fieldtianye/p/13427303.html
Copyright © 2011-2022 走看看