Jak pobrać wideo za pomocą adresu URL obiektu blob?

94

Próbuję pobrać wideo za pomocą src url blob:https%3A//www.youtube.com/23aea5c8-9ae2-40dc-9417-e675ea99b386.

Czy istnieje proces, który można wykonać, aby pobrać wszystkie tego typu filmy?

vinesh
źródło
Jeśli chcesz pobierać filmy z YouTube'a, użyj rozszerzeń takich jak Video Downloadhelper (Firefox)
Ganesh R.
Chcę pobrać z adresu Vimeo.
vinesh
Vinesh, spróbuj przejść do strony vimeo i rozpocznij odtwarzanie wideo, które chcesz pobrać. Pobieranie wideoHelper wykryje go i da ci możliwość pobrania. Próbowałem tego.
Ganesh R.
Brak szczęścia. kiedy zacząłem odtwarzać wideo, zobaczyłem wiele sugestii wideo z rozszerzenia, o którym wspomniałeś, każde z około 2 MB. kiedy pobrałem część, nie byłem w stanie odtworzyć tego małego pliku. Wystąpił błąd, że plik jest uszkodzony.
vinesh
umieść link w komentarzach
Ganesh R.

Odpowiedzi:

69

Znalazłem sposób na pobranie wideo za pomocą blob urlin Vimeo(czytając tutaj zrozumiałem, jak to zrobić). Piszę tutaj proste kroki. Używam Google Chrome:

  1. Otwórz More ToolsDeveloper Tools
  2. Sprawdź, czy w tagu wideo jest coś takiego:

    <video preload="" src="blob:https://player.vimeo.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"></video>
    
  3. Skopiuj src tagu iframe, jeśli istnieje, coś w rodzaju, http://player.vimeo.com/video/XYZjeśli go znalazłeś, możesz przejść bezpośrednio do punktu 7, w przeciwnym razie wykonaj kroki 4, 5, 6.
  4. Teraz poszukaj tego ciągu https://skyfire.vimeocdn.com/.../master.json?base64_init=1na stronie (używając Widoku programisty), powinieneś go znaleźć wewnątrz funkcji javascript, jak to:

    (function(e,a){var t={"cdn_url":"https://f.vimeocdn.com","view":1,"request":{"files":{"dash":{"origin":"gcs","url":"https://48skyfiregce-a.akamaihd.net/.../master.json?base64_init=1","cdn":"
    
  5. Skopiuj link w polu adresu URL na nowej karcie Chrome, na przykład https://48skyfiregce-a.akamaihd.net/.../master.json?base64_init=1otwórz go w przeglądarce, otworzy Ci się plik json taki jak ten:

    {
        "clip_id": XYZ,
        "base_url": "../",
        "video": [
                     { ... ... ...
    
  6. Teraz utwórz adres URL ze swoim identyfikatorem w XYZten sposób:https://player.vimeo.com/video/XYZ

  7. Zamień blob:https://player.vimeo.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXwewnątrz tagu wideo na ostatni adres URL (ten utworzony w poprzednim kroku # 6).
  8. Teraz zauważysz, że magicznie zmieniło się pole src wewnątrz tagu wideo (jeśli nie, spróbuj krok 7 wiele razy) ...

    <video preload="none" src="https://fpdl.vimeocdn.com/vimeo-prod-skyfire-std-us/XX/XXX/X/XXXXXXXX/XXXXXXXXX.mp4?token=abcdefg"></video>
    
  9. Użyj tego nowego linku, aby pobrać bezpośrednio, to coś takiego: https://fpdl.vimeocdn.com/vimeo-prod-skyfire-std-us/XX/XXX/X/XXXXXXXX/XXXXXXXXX.mp4?token=abcdefg

madx
źródło
7
Imponujący. Jak to wymyśliłeś?
gronostaj
1
W kroku 7, co masz na myśli przez „ten ostatni adres URL w html”?
joaorodr84
6
Działa idealnie, ale sztuczka polega na tym, że czasami trzeba wielokrotnie zastępować wartość „src”, aby wygenerować link do pobrania.
Ashrith
19
Obecnie dla Vimeo jest to znacznie łatwiejsze i nie wymaga wszystkich kroków. Wystarczy otworzyć wideo Vimeo, znaleźć <video>znacznik w strukturze DOM narzędzi deweloperskich i zmienić srcatrybut z blob:...na x. Nic się nie stanie - w porządku. Teraz zmień to ponownie, na y. Chrome przekształci go „magicznie” na adres URL, jak w kroku 8 lub 9. :-)
StanE
3
@StanE działa jak urok, także w Firefoksie i jest zdecydowanie szybszy ...
ling
10

Ta odpowiedź dotyczy adresów URL na Twitterze -

  1. Kliknij wideo prawym przyciskiem myszy i kliknij polecenie Sprawdź elementy -

Znajdziesz taki kod

<div id="playerContainer" class="player-container full-screen-enabled" data-config="{&quot;is_360&quot;:false,&quot;duration&quot;:28617,&quot;scribe_widget_origin&quot;:true,&quot;heartbeatEnabled&quot;:true,&quot;video_url&quot;:&quot;https:\/\/video.twimg.com\/ext_tw_video\/844504104512749568\/pu\/pl\/e91Du5N2TZ09ZaW_.m3u8&quot;,&quot;disable_embed&quot;:&quot;0&quot;,&quot;videoInfo&quot;:{&quot;title&quot;:null,&quot;description&quot;:null,&quot;publisher&quot;:{&quot;screen_name&quot;:&quot;MountainButorac&quot;,&quot;name&quot;:&quot;Mountain Butorac&quot;,&quot;profile_image_url&quot;:&quot;https:\/\/pbs.twimg.com\/profile_images\/808318456701521920\/vBvlAASx_normal.jpg&quot;}},&quot;cardUrl&quot;:&quot;https:\/\/t.co\/SdSorop3uN&quot;,&quot;content_type&quot;:&quot;application\/x-mpegURL&quot;,&quot;owner_id&quot;:&quot;14120461&quot;,&quot;looping_enabled&quot;:true,&quot;show_cookie_override_en&quot;:true,&quot;visit_cta_url&quot;:null,&quot;scribe_playlist_url&quot;:&quot;https:\/\/twitter.com\/MountainButorac\/status\/844505243538931714\/video\/1&quot;,&quot;source_type&quot;:&quot;consumer&quot;,&quot;image_src&quot;:&quot;https:\/\/pbs.twimg.com\/ext_tw_video_thumb\/844504104512749568\/pu\/img\/FFt3qkbeOh0RlGfZ.jpg&quot;,&quot;heartbeatIntervalInMs&quot;:5000.0,&quot;use_tfw_live_heartbeat_event_category&quot;:true,&quot;video_loading_timeout&quot;:45000.0,&quot;status&quot;:{&quot;created_at&quot;:&quot;Wed Mar 22 11:05:14 +0000 2017&quot;,&quot;id&quot;:844505243538931714,&quot;id_str&quot;:&quot;844505243538931714&quot;,&quot;text&quot;:&quot;Took my Goddaughter to meet the pope. She stole his hat! https:\/\/t.co\/SdSorop3uN&quot;,&quot;truncated&quot;:false,&quot;entities&quot;:{&quot;hashtags&quot;:[],&quot;symbols&quot;:[],&quot;user_mentions&quot;:[],&quot;urls&quot;:[],&quot;media&quot;:[{&quot;id&quot;:844504104512749568,&quot;id_str&quot;:&quot;844504104512749568&quot;,&quot;indices&quot;:[57,80],&quot;media_url&quot;:&quot;http:\/\/pbs.twimg.com\/ext_tw_video_thumb\/844504104512749568\/pu\/img\/FFt3qkbeOh0RlGfZ.jpg&quot;,&quot;media_url_https&quot;:&quot;https:\/\/pbs.twimg.com\/ext_tw_video_thumb\/844504104512749568\/pu\/img\/FFt3qkbeOh0RlGfZ.jpg&quot;,&quot;url&quot;:&quot;https:\/\/t.co\/SdSorop3uN&quot;,&quot;display_url&quot;:&quot;pic.twitter.com\/SdSorop3uN&quot;,&quot;expanded_url&quot;:&quot;https:\/\/twitter.com\/MountainButorac\/status\/844505243538931714\/video\/1&quot;,&quot;type&quot;:&quot;photo&quot;,&quot;sizes&quot;:{&quot;small&quot;:{&quot;w&quot;:340,&quot;h&quot;:604,&quot;resize&quot;:&quot;fit&quot;},&quot;thumb&quot;:{&quot;w&quot;:150,&quot;h&quot;:150,&quot;resize&quot;:&quot;crop&quot;},&quot;large&quot;:{&quot;w&quot;:576,&quot;h&quot;:1024,&quot;resize&quot;:&quot;fit&quot;},&quot;medium&quot;:{&quot;w&quot;:576,&quot;h&quot;:1024,&quot;resize&quot;:&quot;fit&quot;}}}]},&quot;source&quot;:&quot;\u003ca href=\&quot;http:\/\/twitter.com\/download\/iphone\&quot; rel=\&quot;nofollow\&quot;\u003eTwitter for iPhone\u003c\/a\u003e&quot;,&quot;in_reply_to_status_id&quot;:null,&quot;in_reply_to_status_id_str&quot;:null,&quot;in_reply_to_user_id&quot;:null,&quot;in_reply_to_user_id_str&quot;:null,&quot;in_reply_to_screen_name&quot;:null,&quot;geo&quot;:null,&quot;coordinates&quot;:null,&quot;place&quot;:null,&quot;contributors&quot;:null,&quot;retweet_count&quot;:0,&quot;favorite_count&quot;:0,&quot;favorited&quot;:false,&quot;retweeted&quot;:false,&quot;possibly_sensitive&quot;:false,&quot;lang&quot;:&quot;en&quot;},&quot;show_cookie_override_all&quot;:true,&quot;video_session_enabled&quot;:false,&quot;media_id&quot;:&quot;844504104512749568&quot;,&quot;view_counts&quot;:null,&quot;statusTimestamp&quot;:{&quot;local&quot;:&quot;4:05 AM - 22 Mar 2017&quot;},&quot;media_type&quot;:1,&quot;user&quot;:{&quot;screen_name&quot;:&quot;MountainButorac&quot;,&quot;name&quot;:&quot;Mountain Butorac&quot;,&quot;profile_image_url&quot;:&quot;https:\/\/pbs.twimg.com\/profile_images\/808318456701521920\/vBvlAASx_bigger.jpg&quot;},&quot;watch_now_cta_url&quot;:null,&quot;tweet_id&quot;:&quot;844505243538931714&quot;}" data-source-type="consumer">

2. Kopiuj Wklej powyżej kodu w notatniku ++. Wymień wszystkie &quot;z "i \/WTH /w Notepad ++. (Użyj CTRL + H)

Dostaniesz coś takiego

{
    "is_360": false,
    "duration": 28617,
    "scribe_widget_origin": true,
    "heartbeatEnabled": true,
    "video_url": "https://video.twimg.com/ext_tw_video/844504104512749568/pu/pl/e91Du5N2TZ09ZaW_.m3u8",

    "disable_embed": "0",
    "videoInfo": {
        "title": null,
        "description": null,
        "publisher": {
            "screen_name": "MountainButorac",
            "name": "Mountain Butorac",
            "profile_image_url": "https://pbs.twimg.com/profile_images/808318456701521920/vBvlAASx_normal.jpg"
        }
    },
    "cardUrl": "https://t.co/SdSorop3uN",
    "content_type": "application/x-mpegURL",
    "owner_id": "14120461",
    "looping_enabled": true,
    "show_cookie_override_en": true,
    "visit_cta_url": null,
    "scribe_playlist_url": "https://twitter.com/MountainButorac/status/844505243538931714/video/1",
    "source_type": "consumer",
    "image_src": "https://pbs.twimg.com/ext_tw_video_thumb/844504104512749568/pu/img/FFt3qkbeOh0RlGfZ.jpg",
    "heartbeatIntervalInMs": 5000.0,
    "use_tfw_live_heartbeat_event_category": true,
    "video_loading_timeout": 45000.0,
    "status": {
        "created_at": "Wed Mar 22 11:05:14 +0000 2017",
        "id": 844505243538931714,
        "id_str": "844505243538931714",
        "text": "Took my Goddaughter to meet the pope. She stole his hat! https://t.co/SdSorop3uN",
        "truncated": false,
        "entities": {
            "hashtags": [],
            "symbols": [],
            "user_mentions": [],
            "urls": [],
            "media": [{
                "id": 844504104512749568,
                "id_str": "844504104512749568",
                "indices": [57, 80],
                "media_url": "http://pbs.twimg.com/ext_tw_video_thumb/844504104512749568/pu/img/FFt3qkbeOh0RlGfZ.jpg",
                "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/844504104512749568/pu/img/FFt3qkbeOh0RlGfZ.jpg",
                "url": "https://t.co/SdSorop3uN",
                "display_url": "pic.twitter.com/SdSorop3uN",
                "expanded_url": "https://twitter.com/MountainButorac/status/844505243538931714/video/1",
                "type": "photo",
                "sizes": {
                    "small": {
                        "w": 340,
                        "h": 604,
                        "resize": "fit"
                    },
                    "thumb": {
                        "w": 150,
                        "h": 150,
                        "resize": "crop"
                    },
                    "large": {
                        "w": 576,
                        "h": 1024,
                        "resize": "fit"
                    },
                    "medium": {
                        "w": 576,
                        "h": 1024,
                        "resize": "fit"
                    }
                }
            }]
        },
        "source": "\u003ca href=\"http://twitter.com/download/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c/a\u003e",
        "in_reply_to_status_id": null,
        "in_reply_to_status_id_str": null,
        "in_reply_to_user_id": null,
        "in_reply_to_user_id_str": null,
        "in_reply_to_screen_name": null,
        "geo": null,
        "coordinates": null,
        "place": null,
        "contributors": null,
        "retweet_count": 0,
        "favorite_count": 0,
        "favorited": false,
        "retweeted": false,
        "possibly_sensitive": false,
        "lang": "en"
    },
    "show_cookie_override_all": true,
    "video_session_enabled": false,
    "media_id": "844504104512749568",
    "view_counts": null,
    "statusTimestamp": {
        "local": "4:05 AM - 22 Mar 2017"
    },
    "media_type": 1,
    "user": {
        "screen_name": "MountainButorac",
        "name": "Mountain Butorac",
        "profile_image_url": "https://pbs.twimg.com/profile_images/808318456701521920/vBvlAASx_bigger.jpg"
    },
    "watch_now_cta_url": null,
    "tweet_id": "844505243538931714"
}

Z powyższego formatu JSON zobacz wartość video_url

https://video.twimg.com/ext_tw_video/844504104512749568/pu/pl/e91Du5N2TZ09ZaW_.m3u8

Problem polega na tym, że po 1 sierpnia 2016 r. Twitter nie używa już filmów .mp4, ale konwertuje do nowego formatu HLS, adaptacyjnego przesyłania strumieniowego, z rozszerzeniem pliku .m3u8 .

Pliki .m3u8 są w zasadzie tylko opakowaniem plików tekstowych, są bardzo małe (300-500 bajtów), a po otwarciu w edytorze tekstu zawierają łącza do różnych rozmiarów wideo

  1. Otwórz plik m3u8 w notatniku ++, zawiera on taki kod

EXTM3U EXT-X-INDEPENDENT-SEGMENTS EXT-X-STREAM-INF: ID-PROGRAMU = 1, SZEROKOŚĆ PASMA = 256000, ROZDZIELCZOŚĆ = 180x320, KODEKS = "mp4a.40.2, avc1.42001f" / ext_tw_video / 844504104512749568 / pu 180x320 / _Z42SY5zwMlLdFYx.m3u8 EXT-X-STREAM-INF: ID-PROGRAMU = 1, SZEROKOŚĆ PASMA = 832000, ROZDZIELCZOŚĆ = 360x640, KODEKS = "mp4a.40.2, avc1.42001f" / ext_tw_video / 844504104512 Phfjbbx2yinirLi.m3u8

  1. Skopiuj odpowiedni link z góry zgodnie z potrzebą rozdzielczości. Powtarzaj ten sam krok, aż będziesz mieć plik .ts . Pobierz plik .ts (plik wideo).
Pirat X
źródło
Co masz na myśli mówiąc „dostaniesz coś takiego” - skąd?
Użytkownik
@ Użytkownik z powyższego kodu, który zaczyna się jak<div id="playerContainer"
Pirate X
3
Hej, w kroku 4, co rozumiesz przez „skopiuj odpowiedni link”? To nie jest prawidłowy adres URL i nie mogę znaleźć sposobu, aby uzyskać z nim film. EDYCJA: OK, prawda, znalazłem to. Powinieneś wspomnieć, że musisz umieścić „ video.twimg.com ” przed nim i uzyskać dostęp do adresu URL.
Elzo
Jeśli nie możesz znaleźć id="playerContainer"elementu, poszukaj og:video:urli otwórz adres URL w treści oraz sprawdź jego źródło.
guillefix,
Innym sposobem, aby to zrobić na Twitterze, jest uruchomienie document.querySelector('video').srcw konsoli konsoli narzędzi programisty przeglądarki.
Farzad YZ
8
<video src="blob:https://www.example.tv/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">
  <source src="https://cdn.example.tv/api/media/tv/xyzxyz/index" type="application/x-mpegurl">
</video>

Miałem też blob:adres URL video/@src, ale oglądając Developer tools> Networkpodczas odtwarzania okazało się, że video/source/@srcbył to adres URL m3u8listy odtwarzania.

Film z m3u8kopią zapasową można łatwo pobrać:

  • ffplay -i "https://cdn.example.tv/api/media/tv/xyzxyz/1080/index.m3u8"
  • ffmpeg -i "https://cdn.example.tv/api/media/tv/xyzxyz/1080/index.m3u8" -codec copy file.mkv

tl; dr - adres URL obiektu blob brzmi jak plik binarny, który chcesz uzyskać, ale może być łatwiejszy sposób na uzyskanie wideo. Wystarczy sprawdzić kartę Sieć w narzędziach programistycznych podczas odtwarzania wideo, aby zobaczyć, co faktycznie pobierasz.

Vlastimil Ovčáčík
źródło
1
Działa na mojej maszynie! I możesz dostarczyć różnego rodzaju wejścia strumieniowe, -i <URL> -i <URL> -i <URL>aby połączyć wideo, audio i napisy w jednym wyjściu :)
mcandre
@mcandre Tak, to dobra wskazówka. Można też ewentualnie znaleźć m3u8 Metalist (tj M3U8 plik odnosząc inne pliki M3U8) i ffmpeg będzie pobrać i scalić je prawidłowo, więc nie trzeba ręcznie określić wiele wejść -i.
Vlastimil Ovčáčík
0

Znalazłem inny sposób na pobranie wideo za pomocą blob urlin Vimeo(zobacz inną odpowiedź na tej stronie).

To rozwiązanie jest odpowiednie tylko wtedy, gdy chcesz tylko wideo bez dźwięków!

Więc jeśli chcesz pobrać tylko wideo Vimeo (często bez dźwięków), mogę potwierdzić, że to rozszerzenie Google Chrome działa naprawdę dobrze: Flash Video Downloader .

madx
źródło