ffmpeg 视频转ts切片并生成m3u8播放列表文件

近期做视频点播,要求将视频文件切片成ts文件。经搜索得到以下两个命令,可完成这个任务。

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

      1.可以预先使用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

 

二  将mp4文件转为ts文件并生成m3u8

      1. 将mp4转为完整的ts

      命令来自:百度知道 

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

      上面错误,下面修正命令

      ffmpeg -i out.mp4 -vcodec copy -vbsf h264_mp4toannexb output.ts

 

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

      命令来自:http://www.mworkbox.com/wp/work/491.html

 

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

注:output.ts是源文件名,playlist.m3u8是生成的m3u8文件名,10 是切片秒数,output%03d.ts是输出文件名

      OK完成!

强制每10秒一个关键帧,文件时长不变 ,参考https://blog.csdn.net/u014552102/article/details/103302731


ffmpeg -i abc.ts -force_key_frames "expr:gte(t,n_forced*10)" -strict -2 -c:a aac -c:v libx264 -hls_time 10 -f hls out.m3u8


ffmpeg -i abc.ts -force_key_frames "expr:gte(t,n_forced*10)" -strict -2 -hls_time 10 -f hls out.m3u8

第一个引入-c:a aac -c:v libx264
第二个不引入

因强制每10秒一个关键帧后造成生成m3u8不全的话,也可先强制关键帧转码生成.ts文件后再切片,代码如果

第一条命令是强制每10秒一个关键帧转码成.ts文件(此转码过程可加水印logo等,命令自测)
ffmpeg -i test.mp4 -force_key_frames "expr:gte(t,n_forced*10)" -strict -2 -c:a aac -c:v libx264 test.ts

第二条命令是无需转码每10秒快速切片生成m3u8列表文件
ffmpeg -i test.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts

注:现在用这个命令,不转码不关键帧快速hls切片,解决强制每10秒一个关键帧后生成m3u8不全的问题

ffmpeg -i 3.mp4 -vcodec copy -acodec copy -hls_time 10 -hls_list_size 0 out.m3u8

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值