我想从一个使用flowplayer的站点下载一个视频。当我检查元素时,我得到了如下内容:
所以我们可以说这个视频是通过xhr传输的。有办法从这些文件中获取完整的视频吗?我尝试了Flash下载程序,它下载了.mp4中的文件,但是它坏了,无法通过一些工具来修复它。
发布于 2018-01-26 14:15:44
我没有一个真正的答案,但我也尝试下载这样一个支离破碎的流。好痛啊。是什么帮助了我回答这个问题:https://superuser.com/questions/1204497/download-all-m4s-files-of-a-mpeg-dash-stream
这样做的目的是从初始文件IS.mp4获取流的URL。所有后续部件编号为000000.m4s,000001.m4s,000002.m4s,.与IS.mp4共享相同的位置
生成所有部件的下载链接,下载并合并它们,可以很容易地编写脚本,如链接文章中所示:
echo "IS.mp4" >"links.txt"
seq -f "%06g.m4s" 0 394 >>"links.txt"
wget -i "links.txt" -O "audio.mp4" -B "http://80.188.78.212/aa/ffc8a55fe6f203b0bffecb73efacb69b/1494953435522/eda9c6f7b1e3de68db8e3e5dc0d14fc7/dna-61924494877285694-pc/1002-1502/"
您必须下载所有部分,包括IS.mp4,然后将它们合并到一个文件中。有时候,你也需要以这种方式下载音频。在您有视频和音频轨道后,将它们合并到一个容器中。
发布于 2020-10-12 10:11:29
嗯,我有一个半手动的解决方案,当然可以用较小的视频文件:
1分钟视频大约是10 MB JSON编码的文本.现在,您应该编写一个脚本,从保存的网络转储中解码和连接响应字节范围(HTTP 206)。示例PHP代码:
// for demonstration purposes only // no checks // at all //
$har = $argv[1]; // HAR input file //
$nam = $argv[2]; // video name from URL //
$out = $argv[3]; // MP4 output file //
$text = file_get_contents($har);
$json = json_decode($text);
$map = array(); // range map //
foreach ($json->log->entries as $e) {
if (!is_object($e) OR !property_exists($e, 'request') OR !property_exists($e, 'response')) {
continue;
}
if ($e->request->method != 'GET') {
continue;
}
if (strpos($e->request->url, $nam) === false) {
continue;
}
if ($e->response->status != 206) {
continue;
}
if ($e->response->content->encoding != 'base64') {
continue;
}
foreach ($e->response->headers as $h) {
if ($h->name == 'content-range' AND 0 < preg_match('/^bytes ([0-9]+)-([0-9]+)\\/([0-9]+)$/', $h->value, $match)) {
$map[$match[1]] = array(
'in' => $match[1],
'out' => $match[2],
'text' => $e->response->content->text,
);
break;
}
} // foreach //
} // foreach //
file_put_contents($out, '');
ksort($map);
$err = 0;
$j = -1;
foreach ($map as $k => $v) {
$i = $j + 1;
$j = $v['out'];
$part = base64_decode($v['text']);
file_put_contents($out, $part, FILE_APPEND);
} // foreach //
我刚刚成功地保存了一些短片。其持续时间从4分钟到8分钟不等。输出文件是一个mp4流,所以我将它转换为mkv:
ffmpeg -i har2bin.mp4 -c copy -y har2bin.mkv
现在,您可以使用vlc播放器播放mkv文件。
https://stackoverflow.com/questions/48233490
复制相似问题