在当今的网络世界中,M3U8格式的视频流应用广泛,尤其是在直播和在线视频平台上。很多时候,我们需要将这些视频下载并转换成更加常见的MP4格式,以便进行离线观看或保存。那么,如何使用FFmpeg实现这一目标呢?这篇文章将详细介绍从安装到完成下载和转换的每一步,即使您对电脑的操作不够熟练也能够轻松掌握。
🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:
gylzbk
)
💬 博主粉丝群介绍:① 群内高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【工具推荐】使用ffmpeg免费下载m3u8网络视频并转化为mp4格式
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.ts
、5f0***2b_1.ts
一直到5f0***2b_104.ts
、5f0***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
- 打开FFmpeg官方页面的下载页面,如下图所示,点击
ffmpeg-git-essentials.7z
(国外网站,下载稍慢)。
- 选择下载路径,放在任意一个文件夹内即可,比如我放在了
此电脑 > 视频 > 捕获
下。
2.1.2 安装FFmpeg
下载完成后,解压缩文件。因为我们只需要ffmpeg.exe这一个工具,所以只需要将ffmpeg.exe解压出来即可。为了方便后续操作,我们将ffmpeg.exe拖拽解压到任意一个文件夹内,比如我放到了同一目录下:此电脑 > 视频 > 捕获
。
2.2 MacOS系统
-
使用Homebrew来安装FFmpeg。先确保Homebrew已经安装,如果没有,打开终端(Terminal)输入以下命令进行安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
安装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为例演示查找过程:
-
打开Chrome浏览器,然后打开一个新标签页。
-
按下
F12
,调出开发者工具,点击媒体
选项 -
在这个标签页,访问网站:https://bbs.csdn.net/topics/603400063。下方开发者工具的媒体筛选页面,就会自动出现一个m3u8结尾的文件名。在这个文件名上点击
鼠标右键
,依次选择复制
-复制网址
。即可自动复制完整的m3u8文件路径:https://v-blog.csdnimg.cn/asset/c096ba1166c72ea0bf849edb6c843b32/play_video/5f09992800031887a7699e3388734d2b.m3u8
。
3.2 下载m3u8并自动转换为mp4格式
- 如果使用的是Windows,那么找到前面解压ffmpeg.exe的文件夹,在文件夹的任意空白处,按住
Shift
键,点击鼠标右键,选择在此处打开 Powershell 窗口
。
- 在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 登录授权问题
- 有些网站的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命令,最终完成了视频下载和转换。如果你有任何疑问或遇到困难,欢迎在评论区留言,我们会尽量帮助你解决问题。