使用FFMPEG创建HLS变体

时间:2015-10-19 22:29:55

标签: ffmpeg hls m3u8

我从高分辨率视频文件开始,我想为移动流媒体创建3种变体,低质量,中等质量和高质量。我希望将这些中/低/高变体分割成m3u8文件指向的ts片段。有没有办法在ffmpeg中的一行中执行此操作?

我已经使用ffmpeg成功生成了一个m3u8文件和ts段,我是否需要这样做3x并设置低/中/高规格?如果是这样,我如何将单个m3u8文件指向所有变体而不是每个变体?

这是我用来生成m3u8文件以及ts段的命令。

ffmpeg -i C:\Users\george\Desktop\video\hos.mp4 -strict -2 -acodec aac -vcodec libx264 -crf 25 C:\Users\user\Desktop\video\hos_Phone.m3u8

2 个答案:

答案 0 :(得分:9)

是的,您需要对所有变体进行编码并首先生成媒体播放列表(包含片段的播放列表)。

如果您愿意,可以在一个命令中执行此操作,因为def createUser = Action { implicit request => createUserForm.bindFromRequest.fold( println("You need to enter all the fields.") ){ case (username, password, role) => println(username, password, role) } } 支持multiple inputs/outputs。例如:

ffmepg

您必须提供多种质量/比特率的变体,但宽高比应保持不变。保持纵横比最初是强制性的,但在最新的HLS创作指南中,它被降级为建议。

所有变体流必须是关键帧对齐的,因此请使用ffmpeg -i input \ ... [encoding parameters 1] ... output1 \ ... [encoding parameters 2] ... output2 \ ....[encoding parameters 3] ... output3 选项设置GOP大小,禁用场景剪切检测并使用段持续时间-g,它是关键帧间隔的倍数。

获得所有3x hls_time媒体播放列表后,您可以手动创建指向每个媒体播放列表的主播放列表。

来自Apple HLS documentation的示例,您必须根据自己的编码选项更改带宽,编解码器,分辨率和播放列表文件名:

m3u8

答案 1 :(得分:0)

  • 宽高比不一定相同,没有意义。 你怎么知道客户可以玩什么?

    非高清的宽高比为4:3,高清变体为16:9。

  • 如果您愿意,请不要在一个ffmpeg命令中执行所有变体操作 需要段时间保持一致。
  • 同时观看向下转码,如果你从1080到360,那里 可能是问题。我经常得到的是音频降级和 听起来怪怪的。如果我想要高,我试着下降不超过一半 质量。
  • @DavidC十六进制是编解码器版本号。