Python İle Youtube Video İndirme İşlemleri

Python ile Youtube videolarını indirme işlemini tüm çözünürlükler için ve sadece video/ses özellikleriyle beraber yapabilirsiniz. Hatta video altyazılarını ve thumbnail resmini de çekebilirsiniz. Bu dersimizde Youtube videosunu indirme ve işleme üzerine detaylı bir anlatım yapacağız.

İnternette birçok Youtube video indirme servisi ve sitesi bulunmaktadır. Bu siteleri kullanmak yerine Python ile aynı servisi yazarak kullanabilir ve hatta aynı şekilde bir siteyi yayına bile alabilirsiniz. Bu ders boyunca kullanacağımız kütüphane ile Python sayesinde Youtube videolarını rahatlıkla işleyebileceğiz. Öyleyse ilk neler yapabileceğimize bakalım.

Python ile Youtube üzerindeki bir videonun;

  • Video thumbnail resmini alabiliriz,
  • Video başlığını alabiliriz,
  • Video açıklamasını alabiliriz,
  • Video oylama oranını çekebiliriz (like/dislike),
  • Video izlenme sayısını çekebiliriz,
  • Video süresini çekebiliriz,
  • Kanal ismini çekebiliriz,
  • Videoyu indirebiliriz,
  • Sadece ses dosyasını indirebiliriz,
  • Sadece video dosyasını indirebiliriz,
  • Altyazı dosyasını xml ve srt formatında alabiliriz,

Python ile Youtube işlemleri sayesinde neler yapabileceğimizi küçük bir özet geçtik. Artık işlemlerimize başlayabiliriz.

1. Python Youtube Modülünü Ekleme

Python ile Youtube videoları üzerinde işlemlerimizi gerçekleştirebilmek için ilk olarak pytube kütüphanemizi indirerek projemize dahil etmeliyiz.

pip install pytube3

Şimdi kütüphanemizi projemize ekleyelim.

from pytube import YouTube

Başlangıç için ortamımızı hazırladıktan sonra işlemlerimize başlayabiliriz.

2. Python ile Youtube Videosunun Meta Verileri Çekmek

Kütüphanemizi hazırladıktan sonra örnek bir video üzerinde çalışmalarımıza başlayabiliriz. Bunun için YouTube() fonksiyonu ile video adresimizi aldıktan sonra video adısahibiaçıklamasıizlenme sayısıoy oranısüresithumbnail resmi gibi bilgileri hızlıca çekebiliriz.

from pytube import YouTube

yt = YouTube('https://www.youtube.com/watch?v=qolmz4FlnZ0')

print(f"Video Başlığı: {yt.title}")
print(f"Video Sahibi: {yt.author}")
print(f"Thumbnail Resmi: {yt.thumbnail_url}")
print(f"Video Uzunluğu: {yt.length}")
print(f"Video Rating: {yt.rating}")
print(f"İzlenme Sayısı: {yt.views}")
print("*"*30)
print(f"Video Açıklaması: {yt.description}")
print("*"*30)

Videomuzu seçtikten sonra özet meta bilgilerini ekrana bastırabileceğimiz örnek bir programı yukarıda yazdık. Bu programın çıktısı ise şu şekilde olacaktır:

3. Python ile Youtube Videosunu İndirme

Yukarıdaki örnekte temel bir giriş olarak pytube kütüphanemiz ile videomuza dair meta verilerini çekebildik. Şimdi ise videomuzun mevcut akışlarını kontrol ederek istediğimiz akışı seçeceğiz ve ardından indireceğiz. Öyleyse elimizdeki videonun akışlarını çekerek kontrol edelim.

from pytube import YouTube

yt = YouTube('https://www.youtube.com/watch?v=qolmz4FlnZ0')

for i in yt.streams:
    print(i)

Bu programımızın çıktısı şu şekilde olacaktır;

Listede gördüğünüz gibi videomuza ait birçok akış önümüze döküldü. Bir videoya ait bu kadar akış olmasının sebebi Youtube’un kalitesinden kaynaklanıyor. Çünkü birçok çözünürlükte ve mime tipinde akışlar sağlayarak her zaman kaliteli bir deneyimi bizlere sunabiliyor. Şimdi listeyi özetlersek;

  • progressive="True": Video ve sesin birleşik olduğu dosyalardır. 720p nin altında ki çözünürlüklerde geçerlidir. Bu akışı direkt indirerek kullanabilirsiniz.
  • progressive="False": Sadece video veya ses dosyalarıdır. Dynamic Adaptive Streaming over HTTP (DASH) teknolojisiyle kullanılabilen bu akışlar sayesinde dinamik kalitede videolar elde edebiliriz. Bu parametredeki istediğiniz bir video ve ses akışını ayrı ayrı indirerek ffmpeg gibi programlarla birleştirebilirsiniz.
  • mime_type: mp4 ve webm gibi medya türünü belli eder.
  • res: Video dosyalarının çözünürlerini belirler. (Ör. 360p, 720p gibi)
  • abr: Ses dosyalarının kbps değerlerini gösterir. (Ör. 128kbps, 160kbps gibi)
  • fps: Videonun frame değerini gösterir.
  • vcodec ve acodec: Video ve ses codec bilgisini gösterir.

Gelen akışlar üzerindeki bu parametrelerle hangi akışı seçeceğimizi belirleyebiliriz. Örneğin ses ve video dosyasının birleşik olduğu akışları seçebilmek için progressive="True" filtresini kullanabiliriz.

from pytube import YouTube

yt = YouTube('https://www.youtube.com/watch?v=qolmz4FlnZ0')

for i in yt.streams.filter(progressive=True):
    print(i)

Bu filtre ile çıktımızı şu şekilde olacaktır:

Aynı zamanda progressive yerine adaptive akışları belirleyerek ses ve videoları ayrı ayrı indirip daha sonra birleştirebiliriz. Bunun için filtremiz şu şekilde olacaktır:

from pytube import YouTube

yt = YouTube('https://www.youtube.com/watch?v=qolmz4FlnZ0')

for i in yt.streams.filter(adaptive=True):
    print(i)

Bu filtre ile çıktımızı şu şekilde olacaktır:

Bu filtrelerle beraber daha spesifik bir akış seçebilmek için filter(only_audio=True) ve filter(file_extension='mp4') gibi özel filtrelerde kullanabilirsiniz. Akışınızı belirledikten sonra da download() fonksiyonu ile dosyayı rahatlıkla indirebiliriz. Şimdi ki örneğimizde ses ve video dosyasının birleşik olduğu progressive akışımı seçerek indirme işlemini tamamlayalım.

from pytube import YouTube

yt = YouTube('https://www.youtube.com/watch?v=qolmz4FlnZ0')

stream = yt.streams.filter(progressive=True).first()
stream.download()

Tebrikler! videomuzu bulunduğumuz dizine video ismiyle beraber kaydettik. İsterseniz hemen bakabilirsiniz.

İsterseniz videonuzu stream.download('/Desktop') gibi özel bir konumada indirebilirsiniz.

4. Python ile Youtube Video Altyazılarını Alma

Video meta bilgilerini alıp videomuzu indirebildikten sonra son olarak altyazılar üzerinde çalışalım. Bunun için ilk olarak videomuzdaki altyazıları kontrol edelim.

from pytube import YouTube

yt = YouTube('https://www.youtube.com/watch?v=DyDfgMOUjCI')

for i in yt.captions:
    print(i)

Hemen hangi altyazıların olduğunu görmek için çıktımıza bakalım;

Şimdi istedğimiz altyazıyı seçerek onu XML formatında ekrana bastıralım. Siz isterseniz direkt dosyaya da yazdırabilirsiniz.

from pytube import YouTube

yt = YouTube('https://www.youtube.com/watch?v=DyDfgMOUjCI')

caption = yt.captions['en']
cc = caption.xml_captions

print(cc)

Altyazımız için seçtiğimiz en formatının XML çıktısını artık ekranınızda görebilirsiniz. Tabi isterseniz XML yerine srt şeklinde de çıktı alabilirsiniz. Bunun için ise kodumuz şu şekilde olacaktır;

from pytube import YouTube

yt = YouTube('https://www.youtube.com/watch?v=DyDfgMOUjCI')

caption = yt.captions['en']
cc = caption.generate_srt_captions()

print(cc)

5. Daha Fazla İşlem İçin

Python ile pytube modülü sayesinde Youtube üzerinde başarılı ve özgürce çalışabiliyorsunuz. Açık kaynak kodlu bu kütüphanenin dökümanını incelediğinizde video indirirken indirme yüzdesini alma, tamamlandığında farklı tetikleyicileri harekete geçirme gibi daha birçok faydalı fonksiyon ve özellik bulunmakta. Bu yazımızda sizler için en önemli kısmı olan video meta bilgisi, altyazılar ve indirme üzerine örnekleri gerçekleştirdik. Sizler daha fazlası için aşağıdaki linke tıklayarak dökümana gidebilir ve inceleyebilirsiniz.

Pytube Dökümantasyon sayfasına gitmek için Tıklayınız.