网页视频下载(TS流下载合成)

网页视频下载(TS流下载合成)前言最近《流浪地球》比较火,想找资源下载看看,无奈只找到了网址http://m.tlyy.tv/,但是我的chrome插件也嗅探不到网页上的视频。。于是乎,右击页面,inspect走起…步骤首先发现m3u8文件映入眼帘/偷笑,m3u8文件是什么文件呢,copyaddressandwget下来看看:文件playlist.m3u8内容如下,可见网页里的视频是根据这个play…

大家好,又见面了,我是你们的朋友全栈君。

前言

最近《流浪地球》比较火,想找资源下载看看,无奈只找到了网址 http://m.tlyy.tv/ ,但是我的chrome插件也嗅探不到网页上的视频。。于是乎,右击页面,inspect 走起…

步骤

首先发现
在这里插入图片描述
m3u8文件映入眼帘 /偷笑,m3u8文件是什么文件呢,copy address and wget 下来看看:
文件 playlist.m3u8 内容如下,可见网页里的视频是根据这个 playlist 组织的 ts 流一段一段组成视频播放的。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:14
#EXTINF:5.966667,
out000.ts
#EXTINF:4.300000,
out001.ts
#EXTINF:5.166667,
out002.ts
#EXTINF:5.700000,
out003.ts
#EXTINF:4.433333,
out004.ts
#EXTINF:5.166667,
out005.ts
#EXTINF:4.833333,
out006.ts
#EXTINF:5.500000,
out007.ts
#EXTINF:4.900000,
out008.ts
.......
#EXTINF:5.733333,
out1444.ts
#EXTINF:0.266667,
out1445.ts
#EXT-X-ENDLIST

而且ts流命名规范有规律,易下载,一开始打算来个shell脚本用 wget 解决

#!/bin/bash
str="out"

for i in `seq 0 1000`
do
    a=$((1000+$i))
    str1=$str${a:1:3}\.ts # 生成 string "out000.ts"~"out999.ts"
    echo $str1
    wget https\:\/\/doubanzyv4\.tyswmp\.com\:888\/2019\/02\/07\/06SfTJsUSa6nKqG9\/$str1 -P ./ts_list/
done

但是下着下着发现老是一直 connecting,就卡住了(可能是网络问题),后来就发现chrome 下载这种文件特别快,但是要注意控制延迟,因为 chrome 下载序列数目有限,超出就会下载错误,shell 脚本如下:

#!/bin/bash
str="out"

for i in `seq 0 999`
do
    a=$((1000+$i))
    str1=$str${a:1:3}\.ts # 生成 string "out000.ts"~"out999.ts"
    echo $str1
	google-chrome https\:\/\/doubanzyv4\.tyswmp\.com\:888\/2019\/02\/07\/hLShLmXEtVqiYix9\/$str1
    sleep 1s	# 延迟1s,视网速而定
done

下载完所有 ts 流文件之后,开始合成,祭出大杀器:ffmpeg,利用 mpeg concat 分离器,先在 ts 文件目录下创建一个文本文件 filelist.txt,即 ts 流文件的顺序列表:

file ‘out000.ts’
file ‘out001.ts’
file ‘out002.ts’

file ‘out1349.ts’
当然要借助程序( C )实现啦:

#include <stdio.h>

int main(void)
{ 
   
    FILE *fp = NULL;
    fp = fopen("./ts_list/filelist.txt", "w+");

    for (int i = 0; i < 1350; i++)
    { 
   
        fprintf(fp, "file \'out");
        fprintf(fp, "%03d", i);
        fputs(".ts\'\n", fp);
    }

    fclose(fp);
}

然后打开在文件目录打开 terminal ,利用 ffmpeg 合成:

ffmpeg -f concat -i filelist.txt -c copy output.mkv

大概一分钟就好了(如果出错,可尝试其他的输出格式:flv,mp4, wmv,avi),目录下便有了 output.mkv, enjoy it!

附:ffmpeg实用命令

ffmpeg -i input.mp4 output.mp3 # 从视频中抽取音频
ffmpeg -i input.mp4 -ss 00:01:20 -c copy -t 10 output.mp4 #从00:01:20开始截取10s钟视频输出
ffmpeg -i input.mp4 -c:v copy -an input-no-audio.mp4 #去除视频中音频
ffmpeg -i input-no-audio.mp4 -i input.mp3 -c copy output.mp4 #合并音视频

参考资料

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161212.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 通读音_Android API

    通读音_Android API所谓工欲善其事,必先利其器,所以通读了cheerio的API,顺便翻译了一遍,有些地方因为知道的比较少,不知道什么意思,保留了英文,希望各位不吝告诉我,然后一起把这个翻译完成。###cheerio为服务器特别定制的,快速、灵活、实施的jQuery核心实现.###Introduction将HTML告诉你的服务器varcheerio=require(‘cheerio’),$

    2025年6月21日
    0
  • 数据库的概念结构设计应在_数据库概念结构设计的任务

    数据库的概念结构设计应在_数据库概念结构设计的任务概念结构设计将需求分析得到的用户需求抽象成信息世界的概念结构模型的过程。概念结构是各种数据模型的基础,它比数据模型更独立于机器,更加抽象更加稳定。概念结构设计是数据库设计的关键。一般用ER图来描述。 概念结构设计的特点(1)能真实充分的反应现实世界。(2)可扩充,易于更改。(3)易于理解。(4)易于向其他数据模型转换。 概念结构设计的步骤与方法1.方法:自顶向下:先根据总需求获得全局概念结构的框架,再根据全局概念结构逐步细化。自底向上:根据子需求获得部

    2022年10月12日
    2
  • java setscale_java BigDecimal.setScale()的一些问题

    java setscale_java BigDecimal.setScale()的一些问题环境:Eclipse3.6jdk:1.6程序:packagecom.test.doubletest;importjava.math.BigDecimal;publicclassDoubleDataType{/***@paramargs*/publicstaticvoidmain(String[]args){Doubled_0=newDouble(0.00929…

    2022年10月20日
    3
  • html中颜色的编码,css颜色编码对照表[通俗易懂]

    html中颜色的编码,css颜色编码对照表[通俗易懂]css颜色编码对照表2018-09-14颜色名十六进制值RGB值PearlyGates#FFFFF2#fffff2PaleOlive#FBF5E6#fbf5e6white#FFFFFF#ffffffFrostedLime#F6F9ED#f6f9edWhiteOrchid#FDFDF0#fdfdf0GreenVeil#EEF3E2#eef3e2GrayClif…

    2022年5月17日
    60
  • SQLite下载、安装和使用并Qt链接SQLIte全部教程(windows)

    SQLite下载、安装和使用并Qt链接SQLIte全部教程(windows)第一步 下载 SQLIte 下载地址 https www sqlite org download html 下载两个内容 sqlite dll win64 x64 3360000 zipsqlite tools win32 x86 3360000 zip 下载完后直接解压 放到到一个文件夹下 这个文件夹可以随便在哪里 如下图 第二步 使用 SQLite 网上好多教程都是到这一步就配置环境变量 不知道他们脑子咋想的 轻量级数据库 SQLIte 本来就应该随着项目到处走 直接在解压且合并后

    2025年7月21日
    2
  • 常用渗透测试工具及应用范围_渗透测试入门

    常用渗透测试工具及应用范围_渗透测试入门全网最全合集建议收藏~

    2022年8月12日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号