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

新版本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 \home\xxx.mp4

2、把MP4转成ts文件

ffmpeg -y -i \home\xxx.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb \home\xxx.ts

3、切分ts文件

ffmpeg -i \home\xxx.ts -c copy -map 0 -f segment -segment_list \home\xxx\index.m3u8 -segment_time 30 \home\xxx\nxb-%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

ffmpeg 视频ts切片生成m3u8的更多相关文章

  1. ffmpeg 视频转ts切片 生成m3u8视频播放列表

    近期做视频点播,要求将视频文件切片成ts文件.经搜索得到以下两个命令,可完成这个任务. 一  首先将视频文件转为视频编码h264,音频编码aac格式的mp4文件      1.可以预先使用ffprob ...

  2. ffmpeg把ts文件转m3u8并切片

    Linux_x86_64流媒体环境:nginx + EasyDarwin-master 客户端播放器:VLC media player 下载windows下的ffmepg二进制版本,请进网站http: ...

  3. ffmpeg文件生成m3u8文件及ts切片程序(一)

    ffmpeg文件生成m3u8文件及ts切片程序(一) 实现目标:输入本地文件,实现m3u8切片,功能点请看注释,注意:注释很重要. 参考: http://www.cnblogs.com/mystory ...

  4. 如何下载HLS视频到本地(m3u8)

      如何下载HLS视频到本地(m3u8)? CreateTime--2018年3月21日16:07:00 Author:Marydon 一.需求 很多连载的动漫需要VIP会员才能观看,而且有的由于版权 ...

  5. nginx RTMP FFmpeg 视频直播

    /**************************************************************************** * nginx RTMP FFmpeg 视频 ...

  6. ffmpeg解析TS流

    介绍:  MPEG的系统层编码为不同的应用场景设计了两种格式:  TS(Transport Stream) 和PS(Program Stream), 它们两者之间不具有层级关系, 在逻辑上,它们两者都 ...

  7. C# ffmpeg 视频处理格式转换具体案例

    C# ffmpeg 视频处理格式转换 C# ffmpeg 视频处理格式转换avi到MP4格式 1.代码如下: using System;using System.Diagnostics; namesp ...

  8. 分析ffmpeg解析ts流信息的源码

    花费一些时间,然后全部扔了.为了不忘记和抛砖引玉,特发此贴. ffmpeg解析ts流 1.目的     打算软件方式解析出pat,pmt等码流信息 2.源代码所在位置         下载ffmpeg ...

  9. c# ffmpeg视频转换

    c#  ffmpeg视频转换 什么是ffmpeg,它有什么作用呢,怎么可以使用它呢,带着问题去找答案吧!先参考百度百科把,我觉得它很强大无奇不有,为了方便大家我就把链接提供了! http://baik ...

随机推荐

  1. python 爬取网络小说 清洗 并下载至txt文件

    什么是爬虫 网络爬虫,也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人.其目的一般为编纂网络索引. 网络搜索引擎等站点通过爬虫软件更新自身的网站内容或其对其他网站的索引.网络爬虫可以 ...

  2. 【LeetCode】724. 寻找数组的中心下标

    724. 寻找数组的中心下标 知识点:数组:前缀和: 题目描述 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的 ...

  3. 关于如何在mysql中插入一条数据后,返回这条数据的id

    简单的总结一下如何在mysql中出入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetI ...

  4. Selenium3自动化测试【20】CSS定位元素

    CSS 指层叠样式表 (CascadingStyleSheets),CSS一种用来表现HTML或XML等文件样式的计算机语言,其能够灵活的为页面提供丰富样式的风格. CSS使用选择器为页面元素绑定属性 ...

  5. 利用 PGO 提升 .NET 程序性能

    引子 .NET 6 开始初步引入 PGO.PGO 即 Profile Guided Optimization,通过收集运行时信息来指导 JIT 如何优化代码,相比以前没有 PGO 时可以做更多以前难以 ...

  6. 【LeetCode】142. 环形链表 II

    142. 环形链表 II 知识点:链表:set:快慢指针 题目描述 给定一个链表,判断链表中是否有环. 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表 ...

  7. 完整的URL是怎样的?

    完整的URL字段解读: URL:http://localhost:80/MzyPractice/chapter10/testb.php?name=Mei&radio=Test#dowel ht ...

  8. 通过Xlib枚举指定进程下所有窗体

    在windows系统下如果想要枚举指定进程的窗体,我们可以通过EnumWindows加上自己实现的回调函数进行实现,那么在linux下该如何做呢? 其实也很简单,在linux下,我们可以通过xlib中 ...

  9. html拖动元素排序(插件版)

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  10. Spring WebFlux 基础教程:WebSocket 使用

    WebSocket 协议简介 WebSocket 协议提供了一种标准化的方式,在客户端和服务端建立在一个TCP 连接之上的全双工,双向通信的协议. WebSocket 交互开始于 HTTP 请求,使用 ...