从视频流下载TS文件

问题描述 投票:34回答:8

大多数网站上的视频都使用渐进式下载,这意味着视频会下载到我的计算机上,并且易于跟踪。有很多扩展可以做到这一点,甚至在开发工具中这很容易做到。

在某些网站上,视频会流式传输。这意味着我们不只是下载1个文件,我们下载了很多小包。在开发工具中,可以跟踪这些包。我感兴趣的网站是:http://www.rtlxl.nl/#!/goede-tijden-slechte-tijden-10821/c8e2bff7-5a5c-45cb-be2b-4b3b3e866ffb

- 包的扩展名为.TS。

- 可以通过复制请求的URL来保存包

- 我无法播放这些文件。

我一定做错了什么,或者我错过了什么。我想知道我做错了什么。我想为个人使用创建一个chrome扩展,它可以捕获所有包的URL。当我有所有网址时,我想将它们传递给php脚本,下载它们并使用ffmpeg将它们粘贴到mp4文件中。

请帮我拿到包裹。

video stream ffmpeg download package
8个回答
22
投票

更新:

Stream Video Dowloader Chrome扩展程序允许无缝下载m3u8流。安装并按下播放视频,它将识别流。

除了@aalhanane和@Micheal Espinola Jr

由于m3u8x仅适用于Windows。一旦确定了m3u8网址,您还可以使用Jdownloader2或VLC Media Player下载并连接流。

Jdownloader2:只需在Jdownloader打开时复制m3u8网址即可。它将识别Linkgrabber选项卡中的流。

VLC 3:

打开网络 - >粘贴m3u8 url - >选中标记Streamoutput - >选择设置。选择输出文件,容器,视频和音频编码。 (例如output.mp4,container:mpeg4,video:h264,audio:mp4a)Start Stream。它不会播放视频,而是对其进行编码,通过移动视频播放进度条来显示编码进度。


14
投票

--->打开Firefox

--->打开视频页面

--->播放视频

单击--->打开菜单

单击--->打开Web开发人员工具

单击--->开发人员工具栏

单击--->网络

--->转到过滤网址--->写“M3u8” - >查找“m3u8”

--->复制网址“.m3u8”

========================

现在下载软件“m3u8x”----> https://tajaribsoft-en.blogspot.com/2016/06/m3u8x.html#downloadx12

--->打开软件“m3u8x”

--->粘贴网址“m3u8”

--->选择选项“One ... One”

--->单击“下载”

--->开始下载

========================

图像“打开菜单”===>

图像“开发人员工具栏”===>

图像“m3u8x”===>

enter image description here

enter image description here


10
投票

您需要下载所有传输流(.ts)文件,并将它们连接成一个mpeg进行播放。像这样的传输流具有关联的播放列表文件(.m3u8),列出了您需要下载和连接的所有.ts文件。如果可用,可能会有一个辅助.m3u8播放列表,它将单独列出字幕蒸汽文件(.vtt)。


8
投票

使用this帖子

  • 打开Firefox / chrome
  • 打开视频页面
  • 播放视频
  • 点击键盘上的F12 - > network
  • Filter URLs ts
  • 复制ts的链接
  • 从链接中删除索引和ts扩展名 例如: http://vid.com/vod/mp4:vod/PRV/Yg0WGN_6.mp4/media_b180000_454.ts 将被复制为 http://vid.com/vod/mp4:vod/PRV/Yg0WGN_6.mp4/media_b180000

LINK下面插入下面的脚本

#!/bin/bash

# insert here urls
LINK=(

'http://vid.com/vod/mp4:vod/PRV/Yg0WGN_6.mp4/media_b180000' # replace this with your url 

)

mkdir my-videos
cd mkdir my-videos

CNT=0

for URL in ${LINK[@]}
do
  # create folder for streaming media
  CNT=$((CNT + 1))
  mkdir $CNT
  cd $CNT

  (

   DIR="${URL##*/}"

   # download all videos
   wget $URL'_'{0..1200}.ts

   # link videos
   echo $DIR'_'{0..1200}.ts | tr " " "\n" > tslist
   while read line; do cat $line >> $CNT.mp4; done < tslist

   rm -rf media* tslist
   ) &
   cd ..

done

wait

编辑

在python中添加脚本 - 在Windows和Linux上运行

import urllib2
import os
import shutil

my_lessons = [
   #  http://vid.com/vod/mp4:vod/PRV/Yg0WGN_6.mp4/media_b180000_454.ts
    "http://vid.com/vod/mp4:vod/PRV/Yg0WGN_6.mp4/media_b180000" # replace this with your url 


]

lesson_dir = "my_vids"
try:
    shutil.rmtree(lesson_dir)
except:
    print "ok"

os.makedirs(lesson_dir)
os.chdir(lesson_dir)

for lesson, dwn_link in enumerate(my_lessons):
    print ("downloading lesson  %d.. " % (lesson), dwn_link)
    file_name = '%d.mp4' % lesson
    f = open(file_name, 'ab')
    for x in range(0, 1200):
        try:
            rsp = urllib2.urlopen(dwn_link + "_%d.ts" % (x) )
        except:
            break
        file_name = '%d.mp4' % lesson
        print "downloading  %d.ts" % (x)
        f.write(rsp.read())
    f.close()



print "done good luck!! ==================  "

如果脚本失败,或者下载空文件,请尝试删除try包以查看失败的内容


4
投票

我需要从具有会话保护内容和application/mp2t MIME内容类型的电子学习门户下载HLS视频和音频流。

手动将所有身份验证标头复制到下载脚本中会非常麻烦。

但是在Video DownloadHelper Firefox扩展和Companion App的帮助下,任务变得更容易了。它允许通过点击按钮将具有TS块列表和实际视频和音频流的m3u8播放列表下载到mp4文件中,同时正确保留认证头。

由此产生的独立视频和音频文件可以是mergedffmpeg

ffmpeg -i video.mp4 -i audio.mp4 -acodec copy -vcodec copy video-and-audio.mp4 

或与mp4box

mp4box -add audio.mp4#audio video.mp4 -out video-and-audio.mp4

也试过Video DownloadHelper Chrome extension,但它对我不起作用。


2
投票

在macOS上简单的youtube-dl示例(在命令行终端;也支持Windows):

$ youtube-dl -F https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8
[generic] f08e80da-bf1d-4e3d-8899-f0f6155f6efa: Requesting header
[generic] f08e80da-bf1d-4e3d-8899-f0f6155f6efa: Downloading m3u8 information
[info] Available formats for f08e80da-bf1d-4e3d-8899-f0f6155f6efa:
format code           extension  resolution note
audio-English_stereo  mp4        audio only [en] 
628                   mp4        320x180     628k , avc1.42c00d, video only
928                   mp4        480x270     928k , avc1.42c00d, video only
1728                  mp4        640x360    1728k , avc1.42c00d, video only
2528                  mp4        960x540    2528k , avc1.42c00d, video only
4928                  mp4        1280x720   4928k , avc1.42c00d, video only
9728                  mp4        1920x1080  9728k , avc1.42c00d, video only (best)

$ youtube-dl --format 628 https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8
...
frame= 5257 fps=193 q=-1.0 Lsize=    6746kB time=00:03:30.16 bitrate= 263.0kbits/s speed=7.73x    
video:6679kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.998669%
[ffmpeg] Downloaded 6907810 bytes
[download] 100% of 6.59MiB in 00:29

$ open f08e80da-bf1d-4e3d-8899-f0f6155f6efa-f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mp4

在启动流式视频时,使用浏览器的开发人员工具>网络获取m3u8(HLS清单)URL。


1
投票

将其中一个.ts视频文件复制并粘贴到Chrome中的新标签中。删除.ts文件的标识号(0,1,2,3等或它的任何数字)并将扩展名从“.ts”更改为“.mp4”。这应该像往常一样在浏览器中显示视频文件。


1
投票

我对dina的答案做了一些修改,以避免在没有那么多的情况下尝试下载/组合1200个部分。

我还发现在chrome的网络选项卡中按waterfall排序很有帮助。这将按文件下载的时间排序,因此当您流式传输视频时,最近下载的部分将位于顶部,从而可以轻松找到.ts链接。

#!/bin/bash

# Name of the containing folder
GROUP="My Videos"

# Example link: https://vids.net/ABCAED/AADDCDE/m3u8/AADDCDE/AADDCDE_0.ts
# Insert below as: https://vids.net/ABCAED/AADDCDE/m3u8/AADDCDE/AADDCDE

# INSERT LINKS TO VIDEOS HERE
LINK=(
'Title for the video link'
'https://vids.net/ABCAED/AADDCDE/m3u8/AADDCDE/AADDCDE'
'Title for the next video'
'https://vids.net/EECEADFE/EECEADFE/m3u8/EECEADFE/EECEADFE'
)

# ------------------------------------------------------------------------------
mkdir "$GROUP"
cd "$GROUP"

I=0
while [ $I -lt ${#LINK[@]} ]
do
  # create folder for streaming media
  TITLE=${LINK[$I]}
  mkdir "$TITLE"
  cd "$TITLE"
  mkdir 'parts'
  cd 'parts'

  J=$((I + 1))
  URL=${LINK[$J]}

  I=$((I + 2))

  DIR="${URL##*/}"

  # download all streaming media parts
  VID=-1
  while [ $? -eq 0 ];
  do
    VID=$((VID + 1))
    wget $URL'_'$VID.ts
  done

  # combine parts
  COUNTER=0
  while [  $COUNTER -lt $VID ]; do
    echo $DIR'_'$COUNTER.ts | tr " " "\n" >> tslist
    let COUNTER=COUNTER+1
  done
  while read line; do cat $line >> $TITLE.ts; done < tslist

  rm -rf tslist
  mv "$TITLE.ts" "../$TITLE.ts"

  cd ..
  rm -rf 'parts'
  cd ..

done
© www.soinside.com 2019 - 2024. All rights reserved.