从视频流下载TS文件

时间:2014-03-05 04:08:16

标签: video stream ffmpeg download package

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

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

- 包的扩展名为.TS。

- 可以通过复制请求的网址来保存包裹

- 我无法播放这些文件。

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

请帮我拿到包裹。

16 个答案:

答案 0 :(得分:20)

更新

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

@aalhanane和@Micheal Espinola Jr的附加内容

因为m3u8x仅适用于Windows。 确定了m3u8网址后,您还可以使用Jdownloader2或VLC Media Player下载和连接流。

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

VLC 3:

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

答案 1 :(得分:14)

--->打开Firefox

--->打开视频页面

--->播放视频

点击--->打开菜单

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

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

点击--->网络

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

--->复制网址" .m3u8"

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

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

--->打开软件" m3u8x"

--->粘贴网址" m3u8"

--->选择了选项" One ... One"

--->单击下载

--->开始下载

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

图像"打开菜单" ===>

a busy cat

image"开发人员工具栏" ===>

a busy cat

image" m3u8x" ===>

enter image description here

enter image description here

答案 2 :(得分:10)

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

答案 3 :(得分:9)

使用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 :(得分:4)

我需要从具有import { AndroidDriver } from "appium-android-driver" MIME内容类型的会话保护内容的电子学习门户网站下载HLS视频和音频流。

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

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

生成的单独视频和音频文件可以是merged ffmpeg

application/mp2t

mp4box

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

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

答案 5 :(得分:1)

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

答案 6 :(得分: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

答案 7 :(得分:1)

在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。

答案 8 :(得分:1)

虽然本来就不应该问这个问题并且首先要通过审核过程,但我不知道...但是我还是要给出答案。

在基本研究了此处介绍的所有选项之后,事实证明最简单的往往是最好的。

首先从以下网址下载ffmpeg:https://evermeet.cx/ffmpeg/

接下来,在获取.m3u8播放列表文件(很可能来自网页来源或网络流量)后,运行以下命令:

ffmpeg -i "http://host/folder/file.m3u8" -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 file.mp4

我尝试从本地保存的m4u8文件运行该文件,但该文件不起作用,因为ffmpeg下载过程会下载相对于URL的数据块,因此请确保您使用网站url。

答案 9 :(得分:1)

许多网站将其视频打包为多个传输流文件 (.ts)。如果您想输出全长视频,您需要下载所有 .ts 文件片段并组装它们。使用 FFmpeg 命令行工具可以轻松完成组装。

如果有人正在寻找从视频流下载 TS 文件的 Java 方式,这里有一个很好的实用程序示例和文章,其中还详细介绍了 TS 和 M3U8 文件的工作原理 >> https://jet-cabral.medium.com/java-ts-video-downloader-a0fcf23ab84a

下载所有 .ts 文件后,用于组装/连接视频的 ffmpeg 命令如下所示:

ffmpeg -i "concat:C:\users\your-name\file_0.ts|C:\users\your-name\file_1.ts|C:\users\your-name\file_2.ts|C:\users\your-name\file_3.ts

如果您已经知道包含要下载的 .ts 文件的 .m3u8 文件的 url。然后以下命令下载所有 .ts 文件并输出单个 .mp4 文件

ffmpeg -i "http://www.some-website.com/video/someM3U8_file.m3u8" -c copy -bsf:a aac_adtstoasc "full_video.mp4"

答案 10 :(得分:0)

1)请阅读@aalhanane的说明(在“粘贴URL m3u8”步骤之后,您必须输入文件的名称,例如“视频”,然后单击“质量”旁边的“手”图标,然后您才应该选择“一对一”并“下载”。

2)流将视频和音频拆分,因此您需要分别下载它们,然后使用相同的m3u8x将它们https://youtu.be/he-tDNiVl2M结合在一起(可选地转换为mp4)。

3)m3u8x可以下载视频而没有任何问题,但就我而言,它无法提取音频链接。因此,我只下载了* .m3u8文件并搜索了包含GROUP-ID =“ audio-0”的行,然后向右滚动并复制了链接(!包括令牌!),并将其直接粘贴到m3u8x的“质量URL”字段中应用程式。然后“一对一”并下载类似于视频流的视频。

一旦我拥有视频和音频,我就加入并获得成功=)

p.s。如果将来自动提取功能将停止工作,您可以使用相同的方法手动提取视频链接。

答案 11 :(得分:0)

  • 从开发人员工具的“网络”标签中获取一个链接
  • 从链接中删除索引和ts扩展名

使用以下脚本,您可以将电影保存到“视频”文件夹

用法示例:

download-video.sh https://url.com/video.mp4 video-name

download-video.sh

#!/bin/bash
LINK=$1
NAME=$2

START=0
END=2000

help()
{
    echo "download-video.sh <url> <output-name>"
    echo "<url>: x.mp4 (without .ts)"
    echo "<output-name>: x (without .mp4)"
} 

create_folders()
{
    # create folder for streaming media
    cd ~/Videos
    mkdir download-videos
    cd download-videos
}

print_variables()
{
    echo "Execute Download with following parameters"
    echo "Link $LINK"
    echo "Name $NAME"
}

check_video()
{
    i=$START
    while [[ $i -le $END ]]
    do
        URL=$LINK'-'$i.ts
        STATUS_CODE=$(curl -o /dev/null --silent --head --write-out '%{http_code}\n' $URL)
        if [ "$STATUS_CODE" == "200" ]; then
            break
        fi
        ((i = i + 1))
    done

    if [ "$STATUS_CODE" == "200" ]; then
        START=$i
        echo "START is $START"
    else 
        echo "File not found"
    fi
} 


download_video()
{
    i=$START
    e=$END
    while [[ $i -le $END ]]
    do
        URL=$LINK'-'$i.ts
        STATUS_CODE=$(curl -o /dev/null --silent --head --write-out '%{http_code}\n' $URL)
        if [ "$STATUS_CODE" != "200" ]; then
            break
        fi
        wget $URL
        e=$i
        ((i = i + 1))
    done

    END=$e
}

concat_videos()
{
    DIR="${LINK##*/}"

    i=$START
    echo "i is $i"
    while [[ $i -le $END ]]
    do
        FILE=$DIR'-'$i.ts
        echo $FILE | tr " " "\n" >> tslist
        ((i = i + 1))
    done
    while read line; 
    do 
        echo "gugu"$line
        cat $line >> $NAME.mp4; 
    done < tslist

    rm *.ts tslist
}

if [ "$1" == "" ]; then
    echo "No video url provided"
    help
else
    LINK=$1
    if [ "$2" == "" ]; then
        echo "No video output-name provided"
        help
    else
        NAME=$2
        create_folders
        print_variables
        check_video
        download_video
        concat_videos
    fi
fi

答案 12 :(得分:0)

您可以为此使用Xtreme Download Manager(XDM)软件。该软件可以这种格式从任何站点下载。 即使该软件也可以更改ts文件格式。下载时只需更改格式。

like:https://www.videohelp.com/software/Xtreme-Download-Manager-

答案 13 :(得分:0)

我想出了一个高效的并行化的单行代码,它使用GNU Parallel将一系列.ts文件连接成一个.mp4文件:

 parallel -k curl https://example.com/video/seg-{}-f4-v1-a1.ts ::: {1..279} >> result.mp4

关键是用{}替换URL的变体部分,并将{a..b}设置为上下限。就是这样!

答案 14 :(得分:0)

  • 下载VLC Player
  • 媒体
  • 转换/保存
  • 网络(标签)
  • 输入[播放列表] .m3u8的URL
  • 按照其余向导步骤设置流目标(文件)
  • 设置适当的转码配置文件(此答案时为MP4)
  • 观看视频

答案 15 :(得分:0)

就像这两个命令一样简单:

<块引用>

wget https://example.com/videos/tschunks_{0..10}.ts

<块引用>

cat tschunks_{0..10} > video.mp4

*- 可以在 m3u8 文件中找到 https://example.com/videos/tschunks_{0..10} 的位置