使用 Python 从 .swf 中提取视频

Posted

技术标签:

【中文标题】使用 Python 从 .swf 中提取视频【英文标题】:Extract video from .swf using Python 【发布时间】:2012-01-29 10:31:30 【问题描述】:

我编写了生成视频链接的代码,如下所示。 获得后,我尝试以这种方式下载它:

import urllib.request
import os

url = 'http://www.videodetective.net/flash/players/?customerid=300120&playerid=351&publishedid=319113&playlistid=0&videokbrate=750&sub=RTO&pversion=5.2%22%20width=%22670%22%20height=%22360%22'
response = urllib.request.urlopen(url).read()
outpath = os.path.join(os.getcwd(), 'video.mp4')
videofile = open(outpath , 'wb')
videofile.write(response)
videofile.close()   

我得到的只是该目录中无法读取的 58kB 文件。有人能指出我正确的方向吗?

【问题讨论】:

试试这个代码:***.com/questions/2678051/cant-download-youtube-video @Sologoub:这和这个问题有什么关系? 如果他想弄清楚,我链接到的代码可以作为一个工作的开始......虽然,正如你指出的那样,错误似乎更明显。 【参考方案1】:

使用您的代码,您不是在此处下载编码的视频文件,而是用于播放视频的 Flash 应用程序(CWS 格式)。它在浏览器中执行并动态加载和播放视频。您需要应用一些逆向工程来找出实际的视频源。以下是我的尝试:

解压 SWF 文件

首先,将您提到的 58K 文件以 test.swf(或类似名称)的名称保存在硬盘上。 然后,您可以为此使用小的 Perl 脚本 cws2fws:

perl cws2fws test.swf

这会在同一目录中生成一个名为 test.fws.swf 的新文件

在 FWS 文件中搜索配置 URL

我用了一个简单的

strings test.fws.swf | grep http

产量:

...
cookieOhttp://www.videodetective.net/flash/players/flashconfiguration.aspx?customerid=
...

有趣。让我们尝试将我们已知的 customeridplayeridpublishedid 参数放到这个 URL 中:

http://www.videodetective.net/flash/players/flashconfiguration.aspx?customerid=300120&playerid=351&publishedid=319113

如果我们在浏览器中打开它,我们可以看到播放器配置 XML,这反过来又指向我们

http://www.videodetective.net/flash/players/playlist.aspx?videokbrate=450&version=4.6&customerid=300120&fmt=3&publishedid=&sub=

现在如果我们打开它,我们终于可以看到源 URL:

http://cdn.videodetective.net/svideo/mp4/450/6993/293732.mp4?c=300120&r=450&s=293732&d=153&sub=&ref=&fmt=4&e=20111228220329&h=03e5d78201ff0d2f7df9a

现在我们可以下载这个 h264 视频文件,我们就完成了。

在 Python 脚本中自动化整个过程

这是一项完全不同的任务(留给读者作为练习)。

【讨论】:

原来perl脚本使用zlib,而且相当简单。这个也是github.com/binjo/utils/blob/master/cws2fws.py 好的,但实际上我认为您不需要提取文件来自动执行获取配置 XML 和所有这些内容的过程。这只是为了获取它所在的初始信息。玩得开心。 当我使用脚本将 cws 转换为 fws 时,它告诉我:zlib.error: Error -3 while decompressing data: incorrect header check。这是否意味着我的 swf 文件有一些错误或其他什么?顺便说一句,您的脚本链接已损坏。

以上是关于使用 Python 从 .swf 中提取视频的主要内容,如果未能解决你的问题,请参考以下文章

从python中的视频中提取音频

Python从视频文件中提取wav

如何使用 python 和 openCV 从 .yuv 视频文件 (YUV420) 中提取帧?

无法提取或转换 SWF 文件,因为它们似乎已损坏

python moviepy 从视频中提取音频

python moviepy 从视频中提取音频