! pip install pytube youtube-transcript-api reportlab -q
Videos für YouTube-Kanäle abrufen
Installation der benötigten Pakete
In diesem Abschnitt installieren wir die benötigten Python-Pakete.
Importieren der Bibliotheken
In diesem Abschnitt importieren wir die notwendigen Bibliotheken für die Transkript-Extraktion und PDF-Erstellung.
from pytube import YouTube, Playlist
from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled, NoTranscriptFound
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
import os
import zipfile
Funktion zum Extrahieren des Transkripts
In diesem Abschnitt definieren wir eine Funktion, um Transkripte von YouTube-Videos basierend auf bevorzugten Sprachen zu extrahieren.
# Funktion zum Extrahieren des Transkripts
def get_transcript_with_language_preference(video_id, preferred_languages=("en", "de"), prefer_manual=True):
"""
Extracts a transcript based on the preferred languages.
If no transcript is found in the preferred languages, it checks available languages.
Args:
video_id (str): The ID of the YouTube video.
preferred_languages (tuple): Preferred languages in order of priority.
prefer_manual (bool): Whether to prefer manually created transcripts over auto-generated ones.
Returns:
str: The transcript or an error message if not found.
"""
try:
# Fetch the transcript list for the video
= YouTubeTranscriptApi.list_transcripts(video_id)
transcript_list
# Filter transcripts for preferred languages and filter by manual or auto-generated type
= None
transcript for lang in preferred_languages:
try:
if prefer_manual:
= transcript_list.find_transcript([lang]) # Prefer manually created transcripts
transcript else:
= transcript_list.find_transcript([lang], filter_types=['generated']) # Prefer auto-generated transcripts
transcript
# If a valid transcript is found, break the loop
if transcript:
break
except Exception as e:
# Continue if no transcript found for this language
continue
# If no transcript was found in the preferred languages, return available transcripts
if not transcript:
= transcript_list
available_transcripts = {t.language_code: t.language for t in available_transcripts}
available_languages
= f"Kein Transkript in den gewünschten Sprachen {preferred_languages} gefunden.\n"
error_message += "Verfügbare Sprachen:\n"
error_message += "\n".join([f"- {code} ({lang})" for code, lang in available_languages.items()])
error_message return error_message
# Get the actual transcript text
= transcript.fetch()
transcript_data return "\n".join([entry["text"] for entry in transcript_data])
except TranscriptsDisabled:
return "Transkripte sind für dieses Video deaktiviert."
except NoTranscriptFound:
return "Es wurden keine Transkripte für dieses Video gefunden."
except Exception as e:
return f"Allgemeiner Fehler beim Abrufen des Transkripts: {e}"
Funktion zum Erstellen eines PDFs
In diesem Abschnitt definieren wir eine Funktion, um das extrahierte Transkript als PDF-Datei zu speichern.
# Funktion zum Erstellen eines PDFs
def save_transcript_as_pdf_with_pagination(title, transcript):
"""
Speichert ein Transkript als PDF mit Seitenumbrüchen, wenn der Text zu lang ist.
Args:
title (str): Der Titel, der als Dateiname verwendet wird.
transcript (str): Der Text des Transkripts.
Returns:
str: Der Name der gespeicherten PDF-Datei.
"""
# Sicheren Dateinamen erstellen
= f"{title}.pdf".replace("/", "_").replace("\\", "_")
filename
# PDF-Einstellungen
= canvas.Canvas(filename, pagesize=letter)
c = letter
width, height
# Schrift- und Layout-Einstellungen
= 50
margin = 14
line_height = int((height - 2 * margin) / line_height) - 2 # Platz für Titel und Seitenrand
max_lines_per_page
# Titel schreiben
"Helvetica-Bold", 16)
c.setFont(- margin, title)
c.drawString(margin, height
# Textblock initialisieren
"Helvetica", 12)
c.setFont(= height - margin - 30 # Platz für Titel
y_position
# Text Zeile für Zeile schreiben
= transcript.split("\n")
lines = 0
line_count
for line in lines:
if line_count >= max_lines_per_page: # Neue Seite bei Bedarf
c.showPage()"Helvetica-Bold", 16)
c.setFont(- margin, title)
c.drawString(margin, height "Helvetica", 12)
c.setFont(= height - margin - 30
y_position = 0
line_count
c.drawString(margin, y_position, line)-= line_height
y_position += 1
line_count
# PDF speichern
c.save()return filename
Eingabe der URLs
In diesem Abschnitt geben wir die URLs der YouTube-Videos oder -Playlists ein, deren Transkripte wir extrahieren möchten.
# Eingabe der URLs
= "https://www.youtube.com/playlist?list=PLfRDp3S7rLduqUTa6oXe_Zlv7bEeD06t6"
urls
= [] # Liste zur Speicherung der PDF-Dateinamen
pdf_filenames
# URL-Liste verarbeiten
= urls.splitlines()
url_list for url in url_list:
= url.strip()
url if not url:
continue
# Playlist-URL oder Video-URL?
if "playlist" in url:
= Playlist(url)
playlist = playlist.video_urls
video_urls else:
= [url]
video_urls
for video_url in video_urls[:5]:
try:
= YouTube(video_url)
yt = yt.video_id
video_id = video_id
title print(f"Verarbeite Video: {title}")
= get_transcript_with_language_preference(video_id)
transcript
# Speichern des Transkripts als PDF
= save_transcript_as_pdf_with_pagination(title, transcript)
pdf_filename
pdf_filenames.append(pdf_filename)print(f"Transkript für '{title}' gespeichert als {pdf_filename}.")
except Exception as e:
print(f"Fehler bei der Verarbeitung von {video_url}: {e}")
Erstellen eines ZIP-Archivs
In diesem Abschnitt erstellen wir ein ZIP-Archiv, das alle generierten PDF-Dateien enthält.
# Erstellen eines ZIP-Archivs
= "transcripts.zip"
zip_filename with zipfile.ZipFile(zip_filename, 'w') as zipf:
for pdf_filename in pdf_filenames:
zipf.write(pdf_filename)# Lösche die PDF-Dateien nach dem Hinzufügen zum ZIP-Archiv
os.remove(pdf_filename)
print(f"ZIP-Archiv '{zip_filename}' wurde erstellt.")
Löschen der ZIP-Datei
In diesem Abschnitt löschen wir die ZIP-Datei, falls sie nicht mehr benötigt wird.
# os.remove(zip_filename)
Fazit
In diesem Notebook haben wir gelernt, wie man YouTube-Transkripte extrahiert und als PDF-Dateien speichert. Wir haben die notwendigen Pakete installiert, Funktionen zur Transkript-Extraktion und PDF-Erstellung definiert, und schließlich die Transkripte von YouTube-Videos in einem ZIP-Archiv zusammengefasst. Diese Schritte ermöglichen eine effiziente Analyse und Speicherung von YouTube-Inhalten.