脚本工具之下载M3U8文件类型的完整视频

在Linux系统,解决很多问题都是靠shell脚本就能快速解决。

通常,直接下载视频的链接地址只能得到一小部分视频文件(M3U8列表文件的第一个片段),今天我们写个脚本解决某视频平台的下载M3U8文件类型的完整版视频文件问题

提示:本文介绍的是如何通过脚本来下载M3U8视频文件,侧重原理和逻辑。
一条ffmpeg命令下载M3U8类型视频文件 这篇文章的方法更加简单实用(推荐使用哦)。

文章目录

  • 脚本工具之下载M3U8文件类型的完整视频
    • 准备知识
    • 正文-下载M3U8视频
      • 1.获取M3U8文件链接地址
        • 方法一: 通过开发者工具找M3U8(有些繁琐)
        • 方法二:添加JS命令工具提取(操作简单)
      • 2.执行脚本工具下载视频
    • 最后
    • 更新

准备知识

M3U8是Unicode版本的M3U,用UTF-8编码。

那么,M3U又是什么呢?

M3U文件是一种纯文本文件,可以指定一个或多个多媒体文件的位置,其文件扩展名是“M3U”或者“m3u”。

M3U文件的作用通常是创建指向在线流媒体的播放列表,创建的文件可以轻松访问流媒体。M3U文件通常作为网站的下载资源。

正文-下载M3U8视频

今天以鹅厂里的一个视频为例介绍如何快速编写下载视频的脚本。

实验依赖环境:

  • Linux操作系统的Bash
  • you-get命令行下载工具

1.获取M3U8文件链接地址

方法一: 通过开发者工具找M3U8(有些繁琐)

打开Chrome或者Chromium等浏览器,随便找一个鹅厂视频点开,然后按F12打开开发者工具,之后在开发者工具里就找下图标记类型的链接,这个就是M3U8文件下载地址,鼠标右键,复制URL链接地址备用。

方法二:添加JS命令工具提取(操作简单)

在浏览器界面按快捷键Ctrl + D 添加收藏 ,点击更多, 然后将下面内容粘帖到网址这一输入框内,点击确定即可:

javascript:var a=prompt(PLAYER._DownloadMonitor.context.dataset.title,PLAYER._DownloadMonitor.context.dataset.ckc?PLAYER._DownloadMonitor.context.dataset.currentVideoUrl:PLAYER._DownloadMonitor.context.dataset.currentVideoUrl);

添加页面如下图:

添加成功后,随便打开一个鹅厂视频地址,然后点击收藏夹里的这个标签,就会显示出视频的M3U8文件URL地址啦,接下来我们要用这个地址下载对应的视频文件了。

2.执行脚本工具下载视频

脚本工具文件名为m3u8_download.sh: 执行命令如下:

$ m3u8_download.sh https://xxxxxxxxxxxxxxx/gzc_1000102_dldkfldjfkfla.f321004.ts.m3u8?ver=4  out.mp4
...
下载地址: https://xxxxxxx/0381_gzc_1000102_0b53tqaayaaaeeaivo6vmfq4bhgdbsiqacca.f321004.13.ts?index=381&start=4482560&end=4496426&brs=77478936&bre=82758539&ver=4&token=1a37516957376f20acf946bb1d94650b
Site:       v.smtcdns.com
Title:      0381_gzc_1000102_0b53tqaayaaaeeaivo6vmfq4bhgdbsiqacca.f321004.13
Type:       MPEG-2 transport stream (video/MP2T)
Size:       5.04 MiB (5279604 Bytes)Downloading 0381_gzc_1000102_0b53tqaayaaaeeaivo6vmfq4bhgdbsiqacca.f321004.13.ts ...100% (  5.0/  5.0MB) ├█████████████████████████████████████┤[1/1]   52 MB/sreal    13m4.497s
user    1m53.877s
sys     0m14.715s

这样,我们就用了13分钟时间完成下载视频任务了。成功得到了一个 out.mp4 视频文件。

最后

这里演示了一个脚本下载M3U8类型的视频文件方法,例子是固定的,但方法是活的。

例如你可以使用you-get,也可以使用wgetyoutube-dl等工具。

你当然可以并发同时下载多个文件, 比如一次下载50个文件(没有哪个厂家会认为这是合理的行为),适当控制,有代理池的话,你并发执行100个也是可以的。

当然,你有更好、更简单的方法可以给我留言,好方法一定要学会分享。

最后的最后,上脚本m3u8_download.sh文件的源码:

#!/usr/bin/env bash
# filename: m3u8_download.sh
# 功能: M3U8 下载视频脚本
# 依赖: curl + you-getusage() {cat <<ENDUsage:`basename $0`  <m3u8-url> <outfile>  [cookies_file]Desc:m3u8-url :  M3U8 链接地址outfile  :  输出的视频文件名
END
}ua='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'download_m3u8_ts() {# 下载ts文件m3u8_url="$1"outfile="$2"cookies_file="$3"if [ "$m3u8_url" = "" ] ; thenecho "参数错误: 设置M3U8文件的URL地址"usagereturn 1fiif [ "$outfile" = "" ] ; thenecho "参数错误: 设置输出文件名为空."usagereturn 2fiif [ -f "$outfile" ] ; thenecho "输出文件[$outfile] 已经存在了,请先删除或换个名字."return 3fiif [ -f "$cookies_file" ] ; thendn_cmd="you-get -c $cookies_file"curl_cmd="curl -k -b $cookies_file"elsedn_cmd="you-get"curl_cmd="curl -k"fim3u8_file="./temp_m3u.list"$curl_cmd -A "${ua}" $m3u8_url | awk '!/^#/'  > $m3u8_filefor m3u8_suffix in `cat $m3u8_file`doif [ "${m3u8_suffix:0:4}" = "http" ] ; then# 路径为 http(s) 开头的不同URL源绝对路径dn_url="$m3u8_suffix"ts_file=`basename "$m3u8_suffix"| cut -d '?' -f1`elif [ "${m3u8_suffix:0:1}" = "/" ] ; then# 路径为/ 开头的同URL源绝对路径home_url=`echo $m3u8_url | cut -d '/' -f1-3`dn_url="$home_url/$m3u8_suffix"ts_file=`basename "$m3u8_suffix"| cut -d '?' -f1`else# 路径为相对路径m3u8_prefix=`dirname $m3u8_url`dn_url="$m3u8_prefix/$m3u8_suffix"ts_file=`echo "$m3u8_suffix"| cut -d '?' -f1`fiecho "下载文件: $ts_file"$dn_cmd -O ${ts_file} ${dn_url}if [ ! -f "$ts_file" ] ; then# 下载失败,再尝试一次sleep 1echo "下载文件(失败了,重试一次): $ts_file"$dn_cmd ${dn_url}fi# sleep 1done# 合并ts文件for m3u8_suffix in `cat $m3u8_file`dots_file=`echo "$m3u8_suffix"| cut -d '?' -f1`cat $ts_file >> $outfiledonerm -f $m3u8_file
}time download_m3u8_ts $@

更新

总结一下,下载视频总共分两步:

  1. 获取M3U8文件,方法本文可能已经失效,但网上总会找到其他人分享的方法的。
  2. 通过ffmpeg 命令(开源且任何平台可用)工具下载 M3U8中的视频片段并输出一个完整的视频文件。 不了解如何用可以看下这篇 一条ffmpeg命令下载完整腾讯视频。

评论区里分享了一个链接,希望对你有帮助。

最后提醒:珍爱资源,请合理利用。

脚本工具之下载M3U8文件类型的完整视频相关推荐

  1. 脚本工具之下载M3U8文件类型的完整视频二-优酷

    上一篇文章<脚本工具之下载M3U8文件类型的完整视频>分享了鹅厂视频获取方法,今天分享一个优酷视频下载方法. 依赖说明 运行环境: Python3环境 内置播放命令: ffplay (需要 ...

  2. Python爬虫:从m3u8文件里提取小视频的正确操作

    文章目录 前言 1. HLS协议与m3u8文件 2. 第三方库----m3u8 3. 合成mp4文件 4. 完整代码 5. 结束语 前言   在网上爬取的小视频(.ts格式)打不开怎么搞?使用IDM下 ...

  3. 下载m3u8文件中的视频,使用FFMpeg解密合并.ts文件

    1.查看m3u8文件内容 #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:13 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-KEY:ME ...

  4. Linux_Shell脚本 + 配置文件:按照不同文件类型合并文件,小文件合并成大文件

    需求概述 某项业务中,我方通过文件接口与上游系统进行数据交互,上游系统通过ftp的方式推送接口数据文件到指定目录,我方通过sqlldr的方式入库并处理接口数据. 为保证接口数据的一致性,我方每天会将前 ...

  5. python多线程下载m3u8文件,python 实现多线程下载m3u8格式视频并使用fmmpeg合并

    如何把m3u8格式转换成mp4格式? 可以按照如下方式进行操作: 抑郁的人在水底,正常人在水面,小编沉浮在中间,上不去也下不来. 手机上面找到m3u8格式文件的存储位置,在打开方式里边选择" ...

  6. java文件头工具类_判断文件类型工具类

    package com.huawei.fileExerise; import java.io.FileInputStream; import java.io.IOException; import j ...

  7. 使用ffmpeg下载m3u8并转化为MP4视频格式

    因为网页视频下载的需要,需要把m3u8文件转换为MP4文件进行观看,于是发现了好用的ffmpeg. ffmpeg是一个开源的音视频转码工具,它提供了录制.转换以及流化音视频的完整解决方案,可以转码.压 ...

  8. m3u8解析_Python多进程教你下载M3U8加密或非加密视频!

    m3u8 是一种基于 HTTP Live Streaming 文件视频格式,它主要是存放整个视频的基本信息和分片(Segment)组成. 相信大家都看过m3u8格式文件的内容,我们直来对比一下有什么不 ...

  9. 使用多进程教你下载 m3u8 加密或非加密视频

    目录 一.两者不同 二.爬虫源码 三.爬虫内容详解 一.两者不同 m3u8 是一种基于 HTTP Live Streaming 文件视频格式,它主要是存放整个视频的基本信息和分片(Segment)组成 ...

  10. 根据文件头检测文件类型的完整代码

    <?php //检测文件类型 $filename = "11.jpg"; //图片的路径 $file = fopen($filename, "rb");/ ...

最新文章

  1. 探索 TVM 进行量化方法
  2. jquery通知插件toastr
  3. 企业环境下如何把ubuntu的dhcp改为静态IP
  4. 北京python培训班价格-北京Python编程培训多少钱
  5. 掌握11项技能,你就是优秀的前端开发工程师
  6. me21n增强BADI:ME_PROCESS_PO_CUST之process_account
  7. Netty自定义协议
  8. C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
  9. Aroma's Search(暴力)
  10. Android之把app作为独立的module导入其他项目遇到的坑
  11. 一般python项目的结构
  12. android开源2016_2016年十大开源项目
  13. 在sql中使用函数,遇到net.sf.jsqlparser.parser.ParseException异常
  14. OpenRefine使用教程
  15. Hibernate 拦截器 SQL语句提交前 更新表公共字段
  16. LINUX SHELL脚本中获得用户主目录
  17. ORACLE_mldn_002
  18. java学术论文_java毕业设计论文-学术参考网
  19. 管理信息系统期末测试题
  20. 文本挖掘--LTP-cloud 分词

热门文章

  1. 会员管理系统适用于哪些行业
  2. net-java-php-python-新华眼镜ERP系统计算机毕业设计程序
  3. smobiler介绍(一)
  4. 二进制像素绘制程序 scratch编程三级
  5. 合并m3u8(ts)文件的工具
  6. SystemV 共享内存
  7. JS获取本地局域网IP
  8. 二维条码和射频识别技术在仓储物流系统中的应用
  9. Qt中清空layout中所有控件
  10. JavaScript 动态生成表格