Tüm bu “YouTube'dan video kaydet” hizmetleri nasıl çalışır?


62

Genelde nasıl çalışırlar? Bir video akışının bağlantısını (sadece bir Flash oynatıcı içeren sayfa değil) nasıl alırlar?

İnternette bir arama yaptım ancak faydalı bir şey bulamadım (tüm bağlantılar bu tür hizmetleri işaret ediyor, ancak hiçbiri gerçekten nasıl uygulandığını anlatmıyor).

Yanıtlar:


51

youtube-dlTam olarak bunu yapan çok popüler bir açık kaynaklı komut satırı indiricisi var. Gerçek bir video ve ses dosyası bağlantısını belirli bir YouTube bağlantısından (ya da Vimeo, Yahoo! Video, uStream vb.

Bunun nasıl yapıldığını görmek için YouTube çıkarıcısına bakın . Burada gösterilmek için çok fazla. Daha basit siteler için diğer çıkarıcılar mevcuttur . Steven Penny'nin YouTube için de basit bir JavaScript indiricisi var ve bu biraz daha kolay.

Ancak, temel olarak, bir Flash video oynatıcı için, bir JavaScript aracılığıyla başlatılmalı ve yapılandırılmalıdır. Basitçe konuşursak, Flash nesnesinin oynatıcısı yüklenecek bir video akışının URL’sini alacak.

Video akışını bulmak için, ilgili başlatma kodunu bulmak için video sayfasının HTML ve JS kodunu ayrıştırmanız gerekir ve ardından oradan asıl MP4 dosyasının bağlantısını bulmaya çalışırsınız. Plaintext içinde olabilir, ancak bazı özel indirme belirteçleriyle anında da oluşturulabilir. Genellikle, JavaScript yeniden yapılandırılmasını zorlaştırmak için gizlenir. Veya video bilgisi, JS tarafından senkronize olmayan şekilde yüklenen bir XML dosyasında bulunabilir.

HTML5 aşamalı indirme videosu için, asıl kaynak dosya genellikle doğrudan etiketin sourcealt kısmında yer alır video, bu nedenle sayfayı mp4veya benzeri bir arama yaparsanız . Örneğin, Alman Tagesschau 100 haber bülteninde şunları bulacaksınız:

<source src="http://media.tagesschau.de/video/2014/0626/TV-20140626-1649-5801.webl.h264.mp4" type="video/mp4">

MPEG DASH veya Apple'ın HTTP Canlı Yayını (HLS) gibi daha gelişmiş oynatma teknolojileri için, gerçek video akışını elde etmek için bir meta bilgi dosyasını ayrıştırmanız gerekir. Meta dosya ( .mpdörneğin DASH ve .m3u8HLS için), daha sonra oynatılabilir bir dosya elde etmek için birleştirmeniz gereken video ve ses bölümlerine bağlantılar içerir.

Bunun için genel bir çözüm yok. Hedef bölgenin dikkatlice incelenmesi ve hata ayıklanması gerekir.


3
Bir soru, Youtube / Google’ın bu konudaki politikası nedir? Bununla iyiler mi, çok mu değiller?
JMK

31
§5.1.L’deki YouTube Hizmet Şartları, içeriklerinin akıştan başka bir şekilde kullanılmasına izin vermez, bu nedenle teorik olarak izin verilmez. Uygulamada, yine de bunu uygulayamayacaklar. Herhangi bir indirici aşağı yukarı akışının sadece daha fazla olduğunu simüle edebilir.
slhck

2
@StevenPenny herhangi bir küçültülmüş versiyonuna sahip değil misiniz?
TankorSmash

5
@slhck Flash ayrıca kendiliğinden HTTP istekleri yapabilir. Bunun yerine, tarayıcının HTTP motorunu kullanır. Flash istekleri kendisi yapsa, tarayıcıda "görünür" olmazdı. Tabi reklamverenler için çok iyi olurdu. ;)
Daniel B

3
@slhck programlı olarak uygulayamazlar , ancak avukat ekibini dışarı çıkarırlarsa yasal olarak zorlayabilirler mi ?
Cruncher

35

YouTube Bookmarklet

JavaScript ile böyle yaptım

ytplayer.config.argsNesne ile başla . Bu, video için tüm URL’leri içerir. Ayrıldı

url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts              // DASH: contains video or audio stream

Bunların her biri, "stream nesneleri" olarak adlandırdığım şeyin virgülle ayrılmış bir dizisidir. Her "stream nesnesi" bu gibi değerler içerecektir

url  // direct HTTP link to a video
itag // code specifying the quality
s    // signature, security measure to counter downloading

Her URL kodlanmış olacak ve kodunu çözmeniz gerekecektir. Şimdi zor kısmı.

YouTube, videoları için en az 3 güvenlik seviyesine sahiptir

unsecured // as expected, you can download these with just the unencoded URL
s         // see below
RTMPE     // uses "rtmpe://" protocol, no known method for these

RTMPE videoları tipik olarak resmi tam uzunlukta filmlerde kullanılır ve SWF Doğrulama Tip 2 ile korunur. Bu, 2011'den bu yana olmuştur ve henüz tersine çevrilmemiştir.

"S" türündeki videolar gerçekten indirilebilecek en zor olanlardır. Bunları VEVO videolarında ve benzerlerinde tipik olarak göreceksiniz. Gibi bir imza ile başlarlar

AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5

Sonra imza böyle bir fonksiyonla karıştırılır

function mo(a) {
  a = a.split("");
  a = lo.rw(a, 1);
  a = lo.rw(a, 32);
  a = lo.IC(a, 1);
  a = lo.wS(a, 77);
  a = lo.IC(a, 3);
  a = lo.wS(a, 77);
  a = lo.IC(a, 3);
  a = lo.wS(a, 44);
  return a.join("")
}

Bu fonksiyon dinamiktir, genellikle her gün değişir. Daha zor hale getirmek için, işlev aşağıdaki gibi bir URL’de barındırılır:

http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js

Bu aynı kökenli politika sorununu ortaya koymaktadır . Temel olarak, bu dosyayı www.youtube.comfarklı alanlardan oldukları için indiremezsiniz . Bu sorunun geçici çözümü CORS'tur . CORS ile s.ytimg.combu başlığı ekleyebilir

Access-Control-Allow-Origin: http://www.youtube.com

ve JavaScript'in indirilmesini sağlar www.youtube.com. Elbette bunu yapmazlar. Bu geçici çözüm için bir geçici çözüm, bir CORS proxy'si kullanmaktır. Bu, tüm isteklere aşağıdaki başlık ile cevap veren bir proxy'dir

Access-Control-Allow-Origin: *

Böylece, JS dosyanızı proxy'ye dönüştürdüğünüz ve imzayı karıştırmak için işlevi kullandığınız için, sorguyu video indirmek için kullanabilirsiniz.


1
(DASH oynatımı için) YouTube oynatıcısının medya temsilinden istenen bayt aralıklarını nasıl belirlediğini biliyor musunuz? MPD dosyası sadece bölümleri listeler.
slhck

2
Tam olarak değil .. Video ve ses için tek bir dosya var, ancak YouTube birkaç parça halinde bayt aralığına göre istiyor. Başka bir kaliteye geçerseniz, bayt aralığını da değiştirir. Oyuncunun hangi saniyenin hangi byte ofsetine karşılık geldiğini nasıl bildiğini merak ediyorum.
slhck

1
Bir svideo RTMPEtürü ve video türü örneği verebilir misiniz ?
Chloe,

Burada @SurajJain yeni sayfası - Artık farklı bir yöntemi kullanmak gibi bu cevabı yeniden edilecektir github.com/svnpenn/umber/blob/master/bmklet/youtube/download.js
Steven Penny

Bağlantı bana bir 404 verir. Depoyu kaldırdınız mı?
darksoulsong

1

Cevabım: 22 Ocak 2019 tarihinden itibaren, kullanıcı bilgilerinizi de bağlamadan atlamayı denerseniz bu yöntemleri kullanarak yakalanabilir.

Neden? bu platformda yeni bir kullanıcı olduğum için @ Daniel-B tarafından belirtilen kural için yorum yapamam . Yeni ToS’a göre (Almanya’da olduğum gibi Almanca; lütfen tercüme edin) YouTube için 6.1 $ 'ın altında :

Herhangi bir otomatik sistemi (bunlarla sınırlı olmamak üzere, herhangi bir robot, örümcek veya çevrimdışı okuyucu da dahil olmak üzere) web sitesinde erişecek şekilde kullanmak için, YouTube’a belirli bir süre içinde sunucuya daha fazla istek gönderilmesini sağlayacak şekilde kabul edersiniz. kamuya açık, değiştirilmemiş standart bir web tarayıcısı kullanan aynı süre içinde bir insan;

Artık her isteğin zaman süresini bulabilir ve ihlal edip etmediğinizi izleyebilirler. Şimdi, bu senaryo göz önüne alındığında ve kullanıcı IP bilgilerini herhangi bir servise bağlamadan kendinizi korumak için bir VPN kullanıyor olsanız bile harici IP adresiniz bilinecektir.


1
Gelecekten hoşgeldin
yolcusu ...

Belirli bir cevap konusunda yazarı uyarmak istemeniz durumunda, bir yorum yapmalı ve izleyebilecek olası yasal sorunlar nedeniyle yararlı olmadığını düşündüğünüz herhangi bir cevabı reddetmelisiniz. Bu cevap, bir tartışma forumu yayınında bulacağınız gibi gözüküyor ve Süper Kullanıcı, tartışma forumu değil
Ramhound
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.