【工具推荐】使用ffmpeg免费下载m3u8网络视频并转化为mp4格式

在当今的网络世界中,M3U8格式的视频流应用广泛,尤其是在直播和在线视频平台上。很多时候,我们需要将这些视频下载并转换成更加常见的MP4格式,以便进行离线观看或保存。那么,如何使用FFmpeg实现这一目标呢?这篇文章将详细介绍从安装到完成下载和转换的每一步,即使您对电脑的操作不够熟练也能够轻松掌握。


🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:gylzbk

💬 博主粉丝群介绍:① 群内高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

1. 概述

1.1 什么是FFmpeg?

FFmpeg是一套可以用来录制、转换以及流化音视频的开源计算机程序。它支持绝大部分的音视频格式和编解码器,并且适用于几乎所有的操作系统,如Windows、Linux、MacOS等。FFmpeg的强大功能包括音视频捕捉、转码、多媒体文件的转封装、撷取和流化等。

1.2 什么是M3U8?

M3U8是一种多媒体播放列表格式,全世界的线上视频平台广泛用它来存储和传输流媒体视频。文件扩展名为.m3u8的文件是基于HTTP Live Streaming(HLS)协议的播放列表文件,用于描述如何播放视频流。它包含了一系列特定格式的标签和片段文件名,每个片段文件都是一个短时间的视频流(通常是.ts格式)。

1.3 M3U8格式详解

如下所示,是某个m3u8文件的文件内容:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:15
#EXT-X-MEDIA-SEQUENCE:0
5f09992800031887a7699e3388734d2b_0.ts
#EXTINF:10.000000,
5f09992800031887a7699e3388734d2b_1.ts

... //省略中间部分

#EXTINF:10.000000,
5f09992800031887a7699e3388734d2b_104.ts
#EXTINF:1.299000,
5f09992800031887a7699e3388734d2b_105.ts
#EXT-X-ENDLIST

其中,

  • #EXTM3U
    这是 M3U8 播放列表文件的标准声明。所有 M3U8 文件都以这个标签开头,表示它是一个扩展 M3U(M3U Extended)文件。

  • #EXT-X-VERSION:3
    这个标签表示用于描述播放列表的规范版本是3。不同版本支持不同的功能和标签,这里版本 3 是常见的一种,此时不再赘述版本的含义和差别。

  • #EXT-X-TARGETDURATION:15
    这个标签指定了播放列表中每个片段的最大时长(以秒为单位)。在这个文件中,最大时长是 15 秒。这并不意味着所有片段都会有这个长度,只是指定了一个最大值。

  • #EXT-X-MEDIA-SEQUENCE:0
    这个标签表示播放列表中的第一个片段序列号是0。这个序列号在直播流中尤为重要,因为它定义了每个片段的唯一编号。

  • #EXTINF:10.000000
    这个标签定义了每个视频片段的持续时间。在这个例子中,片段的时长是 10 秒。这个标签后面跟着片段文件的相对 URL。
    例如,5f09992800031887a7699e3388734d2b_0.ts 是一个时长为 10 秒的视频片段。

  • 5f0***2b_0.ts5f0***2b_1.ts一直到5f0***2b_104.ts5f0***2b_105.ts
    这个是视频片段文件的相对路径或文件名。你可以通过这个路径或文件名来获取具体的视频片段内容。比如m3u8的HTTP地址是https://v-blog.csdnimg.cn/asset/c096ba1166c72ea0bf849edb6c843b32/play_video/5f09992800031887a7699e3388734d2b.m3u8,那么每个视频片段的最终地址就是HTTP地址的前缀部分:https://v-blog.csdnimg.cn/asset/c096ba1166c72ea0bf849edb6c843b32/play_video/ + 视频片段文件名

  • #EXT-X-ENDLIST
    这是 M3U8 播放列表文件的标准声明。所有 M3U8 文件都以这个标签结尾,表示它是一个扩展 M3U(M3U Extended)文件。

总结一下,也就是说,这个m3u8文件描述了一个由106个视频片段组成的视频。其中前105个视频片段都是10秒,最后一个视频片段是1.299秒。所以,整个视频的长度为105x10 + 1.299=1051.299秒,也就是17分钟31秒(实际情况下,每个视频流片段的长度可能不是固定的,需要根据实际情况,逐个累加计算)。

2. 下载安装ffmpeg

在这里插入图片描述

ffmpeg是一款强大的多媒体处理工具,可以用于转换、编辑和流传输音视频文件。我们需要先下载并安装FFmpeg。

2.1 Windows系统

2.1.1 下载ffmpeg

  1. 打开FFmpeg官方页面的下载页面,如下图所示,点击ffmpeg-git-essentials.7z(国外网站,下载稍慢)。
    在这里插入图片描述
  2. 选择下载路径,放在任意一个文件夹内即可,比如我放在了此电脑 > 视频 > 捕获下。
    在这里插入图片描述

2.1.2 安装FFmpeg

下载完成后,解压缩文件。因为我们只需要ffmpeg.exe这一个工具,所以只需要将ffmpeg.exe解压出来即可。为了方便后续操作,我们将ffmpeg.exe拖拽解压到任意一个文件夹内,比如我放到了同一目录下:此电脑 > 视频 > 捕获
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 MacOS系统

  1. 使用Homebrew来安装FFmpeg。先确保Homebrew已经安装,如果没有,打开终端(Terminal)输入以下命令进行安装:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  2. 安装FFmpeg:

    brew install ffmpeg
    

安装完成后,输入以下命令验证安装:

ffmpeg -version

2.3 Linux/Ubuntu系统

在Linux系统下,可以直接通过包管理工具来安装FFmpeg,以Ubuntu系统为例:

sudo apt update
sudo apt install ffmpeg

同样,安装完成后输入以下命令来验证:

ffmpeg -version

3. 下载并转换M3U8视频

3.1 获取M3U8地址

巧妇难为无米之炊,首先需要获取M3U8文件的链接。通常可以通过视频播放页面的“查看页面源代码”或使用浏览器的开发者工具(F12)来找到。以下以Chrome浏览器和带有一个视频的网站页面:https://bbs.csdn.net/topics/603400063为例演示查找过程:

  1. 打开Chrome浏览器,然后打开一个新标签页。

  2. 按下F12,调出开发者工具,点击媒体选项在这里插入图片描述

  3. 在这个标签页,访问网站:https://bbs.csdn.net/topics/603400063。下方开发者工具的媒体筛选页面,就会自动出现一个m3u8结尾的文件名。在这个文件名上点击鼠标右键,依次选择复制-复制网址。即可自动复制完整的m3u8文件路径:https://v-blog.csdnimg.cn/asset/c096ba1166c72ea0bf849edb6c843b32/play_video/5f09992800031887a7699e3388734d2b.m3u8
    在这里插入图片描述

3.2 下载m3u8并自动转换为mp4格式

  1. 如果使用的是Windows,那么找到前面解压ffmpeg.exe的文件夹,在文件夹的任意空白处,按住Shift键,点击鼠标右键,选择在此处打开 Powershell 窗口
    在这里插入图片描述
  2. 在Powershell窗口中,执行以下命令
.\ffmpeg.exe -i "https://v-blog.csdnimg.cn/asset/c096ba1166c72ea0bf849edb6c843b32/play_video/5f09992800031887a7699e3388734d2b.m3u8" -c copy -bsf:a aac_adtstoasc output.mp4

在这个命令中:

  • -i 表示输入文件,后面跟的就是M3U8链接地址。
  • -c copy 表示直接复制流而不重新编码,能加快处理速度并保持原始视频的质量。
  • -bsf:a aac_adtstoasc 用于修复音频流,以确保音频正确转换并与MP4容器兼容。
  • output.mp4 是输出文件的名称,可以将其更改成你喜欢的文件名。

在这里插入图片描述
3. 稍等片刻,等待ffmpeg命令执行完成(这一过程可能需要一些时间,具体取决于你的网络速度和视频的大小)。下载过程中,能看到当前正在下载哪个视频流片段文件,可以据此了解到下载进度。下载完成之后,就可以在当前目录下得到一个名为output.mp4的视频文件,这就是我们需要的视频文件了。
在这里插入图片描述
在这里插入图片描述

如果是Linux或者MacOS系统,将前面命令中的.\ffmpeg.exe修改为ffmpeg,其它参数保持不变,打开终端输入执行就可以了:

ffmpeg -i "https://v-blog.csdnimg.cn/asset/c096ba1166c72ea0bf849edb6c843b32/play_video/5f09992800031887a7699e3388734d2b.m3u8" -c copy -bsf:a aac_adtstoasc output.mp4

3.3 额外提示

以本文举的例子,到此为止就已经得到视频文件了。除此之外,还有其它更复杂的情况需要考虑。下面再给出2种常见的情况以及解决方案,使用该方法下载其它网站的视频时,如有需要可按需使用。

3.3.1 登录授权问题

  1. 有些网站的M3U8链接可能需要授权或Cookies。这种情况下,你可以先用浏览器找出必要的请求头信息(本文不再讲述查找过程),并在FFmpeg命令中增加相应参数。

例如:

ffmpeg -headers "Cookie: 替换为具体的Cookie" -i "http://替换为真实的地址.m3u8" -c copy -bsf:a aac_adtstoasc output.mp4

3.3.2 网络带来的下载失败问题

如果网络不稳定或者视频服务器的下载速度受限,下载可能中途失败。此时可以使用带有-timeout选项的ffmpeg命令来设定重试间隔和次数,以提高成功几率。

ffmpeg -i "http://替换为真实的地址.m3u8" -c copy -bsf:a aac_adtstoasc -timeout 3000000 output.mp4

4. 总结

通过这篇文章,我们详细介绍了如何使用FFmpeg将一个M3U8链接的视频下载并转换成MP4文件。我们从FFmpeg的安装开始,逐步讲解了获取M3U8链接、编写和执行FFmpeg命令,最终完成了视频下载和转换。如果你有任何疑问或遇到困难,欢迎在评论区留言,我们会尽量帮助你解决问题。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I'mAlex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值