大多数网站上的视频都使用渐进式下载,这意味着视频会下载到我的计算机上,并且易于跟踪。有很多扩展可以做到这一点,甚至在开发工具中也很容易做到。
在某些网站上,视频会进行流式传输。这意味着我们不只是下载1个文件,我们下载了很多小包。在开发工具中,可以跟踪这些包。我感兴趣的网站是:http://www.rtlxl.nl/#!/goede-tijden-slechte-tijden-10821/c8e2bff7-5a5c-45cb-be2b-4b3b3e866ffb。
- 包的扩展名为.TS。
- 可以通过复制请求的网址来保存包裹
- 我无法播放这些文件。
我一定做错了,或者我错过了什么。我想知道我做错了什么。我想为个人使用创建一个chrome扩展,它可以捕获所有包的URL。当我有所有网址时,我想将它们传递给php脚本,下载它们并使用ffmpeg将它们粘贴到mp4文件中。
请帮我拿到包裹。
答案 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"
--->单击下载
--->开始下载
========================
图像"打开菜单" ===>
image"开发人员工具栏" ===>
image" m3u8x" ===>
答案 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文件中,同时正确保留认证头。
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)
使用以下脚本,您可以将电影保存到“视频”文件夹
用法示例:
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)
答案 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} 的位置