【问题标题】:How to extract mp4 video from m3u8 file如何从 m3u8 文件中提取 mp4 视频
【发布时间】:2018-06-20 05:32:53
【问题描述】:

我最近一直在使用 Chrome 扩展程序或下载网站从网站下载视频。但是,最近它开始提供m3u8 文件下载链接。我已经在互联网上搜索并尝试了多种方法,但无法下载这些视频。有谁知道如何获取此类视频的下载链接?

这些视频大部分是足球比赛的精彩片段,通常在浏览器中播放但无法下载。

这是我在使用 FFmpeg 时遇到的错误:

http @ 0000018479631d00] Protocol 'http' not on whitelist 'file,crypto'!
master.m3u8: Invalid argument

【问题讨论】:

  • 您应该可以使用 VLC 或 FFMPEG 播放和下载。

标签: video-streaming mp4 m3u8


【解决方案1】:

m3u8 文件通常是包含指向实际数据文件的链接的文本文件。

我使用的一个解决方案是在 Bash 循环中使用 curl 下载实际数据文件,然后连接播放列表的所有下载文件。

您可以尝试如下的 Bash 函数 [将其放入您的 .bashrc.bash_aliases 文件并根据需要进行相应编辑]:

function download-playlist() {
    if [[ -n "$1" ]]; then
        touch ./files.txt;
        counter=1;
        while read line; do
            if [[ "$line" == "http"* ]]; then
                curl --silent -o ${counter}.mp4 "$line";
                echo "file ${counter}.mp4" >> ./files.txt;
                ((counter++));
            fi;
        done < "$1";
        ffmpeg -f concat -safe 0 -i ./files.txt -codec copy output.mp4;
    else
        echo 'Usage: download-playlist <file.m3u8>';
    fi
}

然后你可以这样使用它:download-playlist master.m3u8

PS:通常master.m3u8 包含指向子播放列表的链接。该函数可能必须在子播放列表上运行,而不是在实际的master.m3u8 播放列表上运行。

【讨论】:

  • 不错的答案!你介意修复 ffmpeg 调用吗?缺少一个'f' :)
  • 不错的答案!在我的情况下,ffmpeg 选项 -safe 0 不是必需的。
【解决方案2】:

如果您有指向 .m3u8 文件的链接,则可以使用免费的 VLC media player 流式传输 M3U8 视频。 VLC 还可以将 M3U8 视频转换为 MP4 或其他所需的视频格式。

其他转换和下载方法可以在this article找到。

使用 VLC 播放/流式传输 M3U8

如果你有一个本地的.m3u8 文件,你可以像在 VLC 支持的任何其他视频格式一样在 VLC 中播放它。

如果您在本地没有.m3u8 文件,但您有指向要查看的文件的链接,则以下是流式传输视频的步骤:

  1. 打开 VLC
  2. 从 VLC 菜单栏中选择 Media,然后选择 Stream...(或使用 Ctrl+S 键盘快捷键)
  3. 在出现的对话框中,选择网络标签
  4. 将网址粘贴到文本框中,然后按串流按钮
  5. 下一步直到对话框关闭
  6. 缓冲一段时间后,您的视频应该会开始流式传输

将 M3U8 视频转换为不同的视频格式

如果您想将已下载的.m3u8 文件转换为其他视频格式,请按照以下说明操作:

  1. 打开 VLC
  2. 从 VLC 菜单栏中选择 Media,然后选择 Convert / Save...(或使用 Ctrl+ R 键盘快捷键)
  3. 在出现的对话框中,按添加...标签
  4. 选择您要转换的.m3u8 视频文件
  5. 点击转换/保存
  6. 配置文件下拉菜单中选择所需的输出视频格式
  7. 浏览按钮选择转换后的视频文件在您计算机上的存储位置
  8. 开始按钮开始转换
  9. VLC 将显示一个进度条,指示其转换进度。在转换完成之前不要关闭 VLC。

【讨论】:

    【解决方案3】:

    我已经找到答案了。问题是流是加密的,并且使用 FFmpeg 我遇到了一个错误,即 SAMPLE-AES 加密尚不支持。所以除非FFmpeg支持这个功能,否则这样的视频是无法下载的。

    【讨论】:

    • VLC 可以处理 AES 加密。如果您愿意自己编程,任何语言都可以解决问题。
    • @Enrico 你是指 vlc 还是编程解决方案? IIRC vlc 将自动处理加密。关于 DIY 的方式,我在这里写过我是如何解决类似问题的:andreasvolkmann.github.io/posts/2018-04-27-m3u8-and-ts-segments
    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    相关资源
    最近更新 更多