Извлечение видео из .swf с использованием Python - PullRequest
3 голосов
/ 28 декабря 2011

Я написал код, который генерировал ссылки на видео, как показано ниже.После получения я пытаюсь загрузить его следующим образом:

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()   

Все, что я получаю, - это файл размером 58 КБ в этом каталоге, который не может быть прочитан.Может ли кто-нибудь указать мне правильное направление?

1 Ответ

16 голосов
/ 28 декабря 2011

С вашим кодом вы загружаете не закодированный видеофайл, а флэш-приложение (в формате CWS), которое используется для воспроизведения видео. Он выполняется в браузере, динамически загружает и воспроизводит видео. Вам нужно применить реверс-инжиниринг, чтобы выяснить фактический источник видео. Вот моя попытка:

Распаковка SWF-файла

Сначала сохраните файл 58K, который вы упомянули на жестком диске, под именем test.swf (или аналогично). Затем вы можете использовать небольшой Perl-скрипт cws2fws для этого:

perl cws2fws test.swf

В результате получается новый файл с именем test.fws.swf в том же каталоге

Поиск URL конфигурации в файле FWS

Я использовал простой

strings test.fws.swf | grep http

Что дает:

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

Интересно. Давайте попробуем поместить наши известные customerid, playerid и publishedid аргументы в этот 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

Это совершенно другое задание (оставлено читателю в качестве упражнения).

...