一种下载 HLS(m3u8) 视频并无压制合并封装为 mp4 的方法 (FFmpeg)

作者:一年又一年 分类: 📐 技术 发布时间:2018-10-3 18:05 6991 次浏览 2 条评论

通常情况下,一则 HLS 视频由 .ts 分段和 .m3u8 分段索引构成。本文将介绍一种使用 FFmpeg Tool 实现 HLS 视频下载、无压制合并封装成 mp4 的方法。

ffmpeg -i "http://website/.m3u8" -c:v copy -c:a copy -bsf:a aac_adtstoasc 1.mp4 

使用 FFmpeg 以 HLS 视频作为输入(-i "http://website/.m3u8"), FFmpeg 将自动解析 m3u8 并下载 ts 分段视频,随后复制视频流与音频流(-c:v copy -c:a copy),重新混流封装成 mp4,并输出到文件1.mp4

FFmpeg HLS m3u8 下载 合并 download ts join merge mp4

♥ 若您欲转载敝站的原创内容,还请您附注出处及相应链接

评论

  1. Avatar of O
    O 2019-04-25 15:52 回复

    问个问题,像这种copy方式似乎是不支持用segment 切片的?想把m3u8直播流下载并再次切片为固定时长的话有啥一步到位的方法么

    1. Avatar of 一年又一年
      一年又一年 2019-05-15 11:22 回复

      @O:这个问题挺好的,你应该注意到了,这篇博文的“HLS 视频”实际上是指那些已经给出完整的切片列表的定长 HLS 视频流,因而这样下载并合并没有什么大碍。但是对于切片列表动态变化的 HLS 直播流,要实时持续地下载 .ts 切片,目前我个人的做法是使用自己写的一个工具轮询下载来实现,而没有具体地了解是否可以通过 FFmpeg 快捷实现。

      据 FFmpeg 的这则邮件讨论(https://lists.ffmpeg.org/pipermail/ffmpeg-user/2018-April/039599.html)来看,FFmpeg 应该不能实现只做下载器,隐式地输出多个 .ts 切片。邮件里还提到可以考虑使用 youtube-dl 工具实现下载 .ts 切片,但我不确定它是否能正确下载直播流;并且 youtube-dl 废弃了有关直播流的一个功能(https://github.com/ytdl-org/youtube-dl/issues/11618#issuecomment-362766566)因而可能需要使用 streamlink 来实现(record 功能),但是 streamlink 目前似乎无法实现多文件(而是合并成单个 .ts)保存。

      此外,也有人使用 aria2 来下载 .ts 切片(https://gist.github.com/patrickgill/130bf9eaa76138596137c7234e80f339),我同样不是很清楚它是否能正确地下载直播流。

发表评论

* 标注的项目为必填项。

您的邮箱地址将不会在页面中公开
您的站点地址将会被检查,如被认为不适则可能被移除
Ɣ回顶部