mirror of
https://github.com/danielmiessler/fabric.git
synced 2026-09-10 07:36:44 -04:00
feat: internationalize YouTube visual extraction flags and error messages
- Move visual flag descriptions to i18n locale system - Add visual extraction strings to all 11 locale files - Replace hardcoded English error messages with i18n lookups - Register visual flags in `flagDescriptionMap` for help system - Remove inline `description` tags from visual CLI flag structs - Localize FFmpeg, Tesseract, and yt-dlp error messages - Add `youtube_visual_frame_cue` translation key across locales
This commit is contained in:
parent
428df31486
commit
c78576deb7
|
|
@ -56,9 +56,9 @@ type Flags struct {
|
|||
YouTubePlaylist bool `long:"playlist" description:"Prefer playlist over video if both ids are present in the URL"`
|
||||
YouTubeTranscript bool `long:"transcript" description:"Grab transcript from YouTube video and send to chat (it is used per default)."`
|
||||
YouTubeTranscriptWithTimestamps bool `long:"transcript-with-timestamps" description:"Grab transcript from YouTube video with timestamps and send to chat"`
|
||||
YouTubeVisual bool `long:"visual" description:"Extract visual data from video using OCR and FFmpeg"`
|
||||
YouTubeVisualSensitivity float64 `long:"visual-sensitivity" default:"0.4" description:"Tolerance for FFmpeg scene detection (0.0 - 1.0)"`
|
||||
YouTubeVisualFps int `long:"visual-fps" default:"0" description:"Extract a specific number of frames per second instead of using scene detection"`
|
||||
YouTubeVisual bool `long:"visual"`
|
||||
YouTubeVisualSensitivity float64 `long:"visual-sensitivity" default:"0.4"`
|
||||
YouTubeVisualFps int `long:"visual-fps" default:"0"`
|
||||
YouTubeComments bool `long:"comments" description:"Grab comments from YouTube video and send to chat"`
|
||||
YouTubeMetadata bool `long:"metadata" description:"Output video metadata"`
|
||||
YtDlpArgs string `long:"yt-dlp-args" yaml:"ytDlpArgs" description:"Additional arguments to pass to yt-dlp (e.g. '--cookies-from-browser brave')"`
|
||||
|
|
|
|||
|
|
@ -43,6 +43,9 @@ var flagDescriptionMap = map[string]string{
|
|||
"playlist": "prefer_playlist_over_video",
|
||||
"transcript": "grab_transcript_from_youtube",
|
||||
"transcript-with-timestamps": "grab_transcript_with_timestamps",
|
||||
"visual": "youtube_extract_visual_data_help",
|
||||
"visual-sensitivity": "youtube_visual_sensitivity_help",
|
||||
"visual-fps": "youtube_visual_fps_help",
|
||||
"comments": "grab_comments_from_youtube",
|
||||
"metadata": "output_video_metadata",
|
||||
"yt-dlp-args": "additional_yt_dlp_args",
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "Fehler beim Abrufen der Videodetails: %v",
|
||||
"youtube_error_parsing_duration": "Fehler beim Parsen der Videodauer: %v",
|
||||
"youtube_error_saving_csv": "Fehler beim Speichern der Videos in CSV: %v",
|
||||
"youtube_extract_visual_data_help": "Visuelle Daten mit OCR und FFmpeg aus dem Video extrahieren",
|
||||
"youtube_failed_create_temp_dir": "temporäres Verzeichnis konnte nicht erstellt werden: %v",
|
||||
"youtube_failed_fetch_comments": "Kommentare konnten nicht abgerufen werden: %v",
|
||||
"youtube_failed_get_stream_url": "Stream-URL konnte über yt-dlp nicht ermittelt werden: %v",
|
||||
"youtube_failed_parse_http_stream_url": "gültige HTTP-Stream-URL konnte aus der yt-dlp-Ausgabe nicht geparst werden",
|
||||
"youtube_failed_walk_directory": "Verzeichnis konnte nicht durchlaufen werden: %v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "FFmpeg-Frame-Extraktion fehlgeschlagen: %v, Ausgabe: %s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "ffmpeg wird für die visuelle Extraktion benötigt, wurde aber im PATH nicht gefunden",
|
||||
"youtube_invalid_duration_string": "ungültige Dauer-Zeichenfolge: %s",
|
||||
"youtube_invalid_seconds_format": "ungültiges Sekundenformat %q: %w",
|
||||
"youtube_invalid_timestamp_format": "ungültiges Zeitstempel-Format: %s",
|
||||
"youtube_invalid_url": "ungültige YouTube-URL, kann keine Video- oder Playlist-ID abrufen: '%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "ungültige yt-dlp-Argumente: %v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "kein klarer Text in visuellen Videoframes gefunden",
|
||||
"youtube_no_transcript_content": "kein Transkriptinhalt in VTT-Datei gefunden",
|
||||
"youtube_no_url_provided": "Keine YouTube-URL angegeben",
|
||||
"youtube_no_video_found_with_id": "kein Video mit ID gefunden: %s",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "Wiedergabeliste gespeichert unter %s",
|
||||
"youtube_rate_limit_exceeded": "YouTube-Ratenlimit überschritten. Versuche es später erneut oder verwende andere yt-dlp-Argumente wie '--sleep-requests 1', um Anfragen zu verlangsamen.",
|
||||
"youtube_setup_description": "YouTube - zum Erfassen von Video-Transkripten (via yt-dlp) und Kommentaren/Metadaten (via YouTube API)",
|
||||
"youtube_tesseract_frame_failed": "tesseract für Frame %d fehlgeschlagen: %v, stderr: %s",
|
||||
"youtube_tesseract_required_visual_extraction": "tesseract wird für die visuelle Extraktion benötigt, wurde aber im PATH nicht gefunden",
|
||||
"youtube_url_help": "YouTube-Video oder Playlist-\"URL\" zum Abrufen von Transkript und Kommentaren und Senden an Chat oder Ausgabe in Konsole und Speichern in Ausgabedatei",
|
||||
"youtube_url_is_playlist_not_video": "URL ist eine Playlist, kein Video",
|
||||
"youtube_video_id_title_header": "VideoID: Titel",
|
||||
"youtube_visual_fps_help": "Eine bestimmte Anzahl von Frames pro Sekunde extrahieren, statt Szenenerkennung zu verwenden",
|
||||
"youtube_visual_frame_cue": "[VISUELLER FRAME-HINWEIS]",
|
||||
"youtube_visual_sensitivity_help": "Toleranz für die FFmpeg-Szenenerkennung (0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "yt-dlp wurde nicht in PATH gefunden. Bitte installiere yt-dlp, um die YouTube-Transkript-Funktionalität zu nutzen",
|
||||
"youtube_ytdlp_required_visual_extraction": "yt-dlp wird für die visuelle Extraktion benötigt, wurde aber im PATH nicht gefunden",
|
||||
"youtube_ytdlp_stderr_error": "fehler beim Lesen von yt-dlp stderr"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "error getting video details: %v",
|
||||
"youtube_error_parsing_duration": "error parsing video duration: %v",
|
||||
"youtube_error_saving_csv": "error saving videos to CSV: %v",
|
||||
"youtube_extract_visual_data_help": "Extract visual data from video using OCR and FFmpeg",
|
||||
"youtube_failed_create_temp_dir": "failed to create temp directory: %v",
|
||||
"youtube_failed_fetch_comments": "failed to fetch comments: %v",
|
||||
"youtube_failed_get_stream_url": "failed to get stream URL via yt-dlp: %v",
|
||||
"youtube_failed_parse_http_stream_url": "failed to parse valid HTTP stream URL from yt-dlp output",
|
||||
"youtube_failed_walk_directory": "failed to walk directory: %v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "ffmpeg frame extraction failed: %v, output: %s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "ffmpeg is required for visual extraction but not found in PATH",
|
||||
"youtube_invalid_duration_string": "invalid duration string: %s",
|
||||
"youtube_invalid_seconds_format": "invalid seconds format %q: %w",
|
||||
"youtube_invalid_timestamp_format": "invalid timestamp format: %s",
|
||||
"youtube_invalid_url": "invalid YouTube URL, can't get video or playlist ID: '%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "invalid yt-dlp arguments: %v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "no clear text found in video visual frames",
|
||||
"youtube_no_transcript_content": "no transcript content found in VTT file",
|
||||
"youtube_no_url_provided": "No YouTube URL provided",
|
||||
"youtube_no_video_found_with_id": "no video found with ID: %s",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "Playlist saved to %s",
|
||||
"youtube_rate_limit_exceeded": "YouTube rate limit exceeded. Try again later or use different yt-dlp arguments like '--sleep-requests 1' to slow down requests.",
|
||||
"youtube_setup_description": "YouTube - to grab video transcripts (via yt-dlp) and comments/metadata (via YouTube API)",
|
||||
"youtube_tesseract_frame_failed": "tesseract failed on frame %d: %v, stderr: %s",
|
||||
"youtube_tesseract_required_visual_extraction": "tesseract is required for visual extraction but not found in PATH",
|
||||
"youtube_url_help": "YouTube video or play list \"URL\" to grab transcript, comments from it and send to chat or print it put to the console and store it in the output file",
|
||||
"youtube_url_is_playlist_not_video": "URL is a playlist, not a video",
|
||||
"youtube_video_id_title_header": "VideoID: Title",
|
||||
"youtube_visual_fps_help": "Extract a specific number of frames per second instead of using scene detection",
|
||||
"youtube_visual_frame_cue": "[VISUAL FRAME CUE]",
|
||||
"youtube_visual_sensitivity_help": "Tolerance for FFmpeg scene detection (0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "yt-dlp not found in PATH. Please install yt-dlp to use YouTube transcript functionality",
|
||||
"youtube_ytdlp_required_visual_extraction": "yt-dlp is required for visual extraction but not found in PATH",
|
||||
"youtube_ytdlp_stderr_error": "error reading yt-dlp stderr"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "error al obtener detalles del video: %v",
|
||||
"youtube_error_parsing_duration": "error al analizar la duración del video: %v",
|
||||
"youtube_error_saving_csv": "error al guardar videos en CSV: %v",
|
||||
"youtube_extract_visual_data_help": "Extraer datos visuales del video usando OCR y FFmpeg",
|
||||
"youtube_failed_create_temp_dir": "falló al crear directorio temporal: %v",
|
||||
"youtube_failed_fetch_comments": "No se pudieron obtener los comentarios: %v",
|
||||
"youtube_failed_get_stream_url": "no se pudo obtener la URL del flujo mediante yt-dlp: %v",
|
||||
"youtube_failed_parse_http_stream_url": "no se pudo analizar una URL HTTP de flujo válida desde la salida de yt-dlp",
|
||||
"youtube_failed_walk_directory": "falló al recorrer el directorio: %v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "la extracción de fotogramas con ffmpeg falló: %v, salida: %s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "ffmpeg es requerido para la extracción visual pero no se encontró en PATH",
|
||||
"youtube_invalid_duration_string": "cadena de duración inválida: %s",
|
||||
"youtube_invalid_seconds_format": "formato de segundos inválido %q: %w",
|
||||
"youtube_invalid_timestamp_format": "formato de marca de tiempo inválido: %s",
|
||||
"youtube_invalid_url": "URL de YouTube no válida, no se puede obtener ID de video o lista de reproducción: '%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "argumentos de yt-dlp inválidos: %v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "no se encontró texto legible en los fotogramas visuales del video",
|
||||
"youtube_no_transcript_content": "no se encontró contenido de transcripción en el archivo VTT",
|
||||
"youtube_no_url_provided": "No se proporcionó una URL de YouTube",
|
||||
"youtube_no_video_found_with_id": "no se encontró video con ID: %s",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "Lista de reproducción guardada en %s",
|
||||
"youtube_rate_limit_exceeded": "Límite de tasa de YouTube excedido. Intenta de nuevo más tarde o usa diferentes argumentos de yt-dlp como '--sleep-requests 1' para ralentizar las solicitudes.",
|
||||
"youtube_setup_description": "YouTube - para obtener transcripciones de video (vía yt-dlp) y comentarios/metadatos (vía API de YouTube)",
|
||||
"youtube_tesseract_frame_failed": "tesseract falló en el fotograma %d: %v, stderr: %s",
|
||||
"youtube_tesseract_required_visual_extraction": "tesseract es requerido para la extracción visual pero no se encontró en PATH",
|
||||
"youtube_url_help": "Video de YouTube o \"URL\" de lista de reproducción para obtener transcripción, comentarios y enviar al chat o imprimir en la consola y almacenar en el archivo de salida",
|
||||
"youtube_url_is_playlist_not_video": "la URL es una lista de reproducción, no un video",
|
||||
"youtube_video_id_title_header": "VideoID: Título",
|
||||
"youtube_visual_fps_help": "Extraer un número específico de fotogramas por segundo en lugar de usar detección de escenas",
|
||||
"youtube_visual_frame_cue": "[MARCADOR DE FOTOGRAMA VISUAL]",
|
||||
"youtube_visual_sensitivity_help": "Tolerancia para la detección de escenas de FFmpeg (0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "yt-dlp no encontrado en PATH. Por favor instala yt-dlp para usar la funcionalidad de transcripción de YouTube",
|
||||
"youtube_ytdlp_required_visual_extraction": "yt-dlp es requerido para la extracción visual pero no se encontró en PATH",
|
||||
"youtube_ytdlp_stderr_error": "error al leer stderr de yt-dlp"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "خطا در دریافت جزئیات ویدیو: %v",
|
||||
"youtube_error_parsing_duration": "خطا در تجزیه مدت زمان ویدیو: %v",
|
||||
"youtube_error_saving_csv": "خطا در ذخیره ویدیوها در CSV: %v",
|
||||
"youtube_extract_visual_data_help": "استخراج دادههای بصری از ویدیو با استفاده از OCR و FFmpeg",
|
||||
"youtube_failed_create_temp_dir": "ایجاد دایرکتوری موقت ناموفق بود: %v",
|
||||
"youtube_failed_fetch_comments": "دریافت نظرات ناموفق بود: %v",
|
||||
"youtube_failed_get_stream_url": "دریافت URL جریان از طریق yt-dlp ناموفق بود: %v",
|
||||
"youtube_failed_parse_http_stream_url": "تجزیه یک URL معتبر HTTP برای جریان از خروجی yt-dlp ناموفق بود",
|
||||
"youtube_failed_walk_directory": "پیمایش دایرکتوری ناموفق بود: %v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "استخراج فریم با ffmpeg ناموفق بود: %v، خروجی: %s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "برای استخراج بصری به ffmpeg نیاز است اما در PATH پیدا نشد",
|
||||
"youtube_invalid_duration_string": "رشته مدت زمان نامعتبر: %s",
|
||||
"youtube_invalid_seconds_format": "فرمت ثانیه نامعتبر %q: %w",
|
||||
"youtube_invalid_timestamp_format": "فرمت مهر زمانی نامعتبر: %s",
|
||||
"youtube_invalid_url": "URL یوتیوب نامعتبر است، نمیتوان ID ویدیو یا فهرست پخش را دریافت کرد: '%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "آرگومانهای yt-dlp نامعتبر: %v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "متن واضحی در فریمهای بصری ویدیو پیدا نشد",
|
||||
"youtube_no_transcript_content": "محتوای رونوشتی در فایل VTT یافت نشد",
|
||||
"youtube_no_url_provided": "هیچ URL یوتیوبی ارائه نشده است",
|
||||
"youtube_no_video_found_with_id": "هیچ ویدیویی با ID یافت نشد: %s",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "لیست پخش ذخیره شد در %s",
|
||||
"youtube_rate_limit_exceeded": "محدودیت نرخ یوتیوب فراتر رفته است. بعداً دوباره امتحان کنید یا از آرگومانهای مختلف yt-dlp مانند '--sleep-requests 1' برای کاهش سرعت درخواستها استفاده کنید.",
|
||||
"youtube_setup_description": "YouTube - برای دریافت رونوشت ویدیو (از طریق yt-dlp) و نظرات/متادیتا (از طریق API یوتیوب)",
|
||||
"youtube_tesseract_frame_failed": "tesseract روی فریم %d شکست خورد: %v، stderr: %s",
|
||||
"youtube_tesseract_required_visual_extraction": "برای استخراج بصری به tesseract نیاز است اما در PATH پیدا نشد",
|
||||
"youtube_url_help": "ویدیو یوتیوب یا \"URL\" فهرست پخش برای دریافت رونوشت، نظرات و ارسال به گفتگو یا چاپ در کنسول و ذخیره در فایل خروجی",
|
||||
"youtube_url_is_playlist_not_video": "URL یک فهرست پخش است، نه یک ویدیو",
|
||||
"youtube_video_id_title_header": "شناسه ویدیو: عنوان",
|
||||
"youtube_visual_fps_help": "استخراج تعداد مشخصی فریم در هر ثانیه بهجای استفاده از تشخیص صحنه",
|
||||
"youtube_visual_frame_cue": "[نشانه فریم بصری]",
|
||||
"youtube_visual_sensitivity_help": "میزان حساسیت تشخیص صحنه در FFmpeg (0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "yt-dlp در PATH یافت نشد. لطفاً yt-dlp را نصب کنید تا از قابلیت رونویسی یوتیوب استفاده کنید",
|
||||
"youtube_ytdlp_required_visual_extraction": "برای استخراج بصری به yt-dlp نیاز است اما در PATH پیدا نشد",
|
||||
"youtube_ytdlp_stderr_error": "خطا در خواندن stderr yt-dlp"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "erreur lors de l'obtention des détails de la vidéo : %v",
|
||||
"youtube_error_parsing_duration": "erreur lors de l'analyse de la durée de la vidéo : %v",
|
||||
"youtube_error_saving_csv": "erreur lors de l'enregistrement des vidéos en CSV : %v",
|
||||
"youtube_extract_visual_data_help": "Extraire les données visuelles de la vidéo avec OCR et FFmpeg",
|
||||
"youtube_failed_create_temp_dir": "échec de création du répertoire temporaire : %v",
|
||||
"youtube_failed_fetch_comments": "Échec de la récupération des commentaires : %v",
|
||||
"youtube_failed_get_stream_url": "échec de récupération de l’URL du flux via yt-dlp : %v",
|
||||
"youtube_failed_parse_http_stream_url": "échec de l’analyse d’une URL HTTP de flux valide depuis la sortie de yt-dlp",
|
||||
"youtube_failed_walk_directory": "échec du parcours du répertoire : %v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "extraction des images avec ffmpeg échouée : %v, sortie : %s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "ffmpeg est requis pour l’extraction visuelle mais est introuvable dans PATH",
|
||||
"youtube_invalid_duration_string": "chaîne de durée invalide : %s",
|
||||
"youtube_invalid_seconds_format": "format de secondes invalide %q : %w",
|
||||
"youtube_invalid_timestamp_format": "format d'horodatage invalide : %s",
|
||||
"youtube_invalid_url": "URL YouTube invalide, impossible d'obtenir l'ID de vidéo ou de liste de lecture : '%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "arguments yt-dlp invalides : %v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "aucun texte lisible trouvé dans les images visuelles de la vidéo",
|
||||
"youtube_no_transcript_content": "aucun contenu de transcription trouvé dans le fichier VTT",
|
||||
"youtube_no_url_provided": "Aucune URL YouTube fournie",
|
||||
"youtube_no_video_found_with_id": "aucune vidéo trouvée avec l'ID : %s",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "Liste de lecture enregistrée dans %s",
|
||||
"youtube_rate_limit_exceeded": "Limite de taux YouTube dépassée. Réessayez plus tard ou utilisez différents arguments yt-dlp comme '--sleep-requests 1' pour ralentir les requêtes.",
|
||||
"youtube_setup_description": "YouTube - pour récupérer les transcriptions vidéo (via yt-dlp) et les commentaires/métadonnées (via l'API YouTube)",
|
||||
"youtube_tesseract_frame_failed": "tesseract a échoué sur l’image %d : %v, stderr : %s",
|
||||
"youtube_tesseract_required_visual_extraction": "tesseract est requis pour l’extraction visuelle mais est introuvable dans PATH",
|
||||
"youtube_url_help": "Vidéo YouTube ou \"URL\" de liste de lecture pour récupérer la transcription, les commentaires et envoyer au chat ou afficher dans la console et stocker dans le fichier de sortie",
|
||||
"youtube_url_is_playlist_not_video": "l'URL est une liste de lecture, pas une vidéo",
|
||||
"youtube_video_id_title_header": "VideoID : Titre",
|
||||
"youtube_visual_fps_help": "Extraire un nombre précis d’images par seconde au lieu d’utiliser la détection de scènes",
|
||||
"youtube_visual_frame_cue": "[REPÈRE D’IMAGE VISUELLE]",
|
||||
"youtube_visual_sensitivity_help": "Tolérance pour la détection de scènes FFmpeg (0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "yt-dlp introuvable dans PATH. Veuillez installer yt-dlp pour utiliser la fonctionnalité de transcription YouTube",
|
||||
"youtube_ytdlp_required_visual_extraction": "yt-dlp est requis pour l’extraction visuelle mais est introuvable dans PATH",
|
||||
"youtube_ytdlp_stderr_error": "erreur lors de la lecture du stderr de yt-dlp"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "errore nell'ottenere i dettagli del video: %v",
|
||||
"youtube_error_parsing_duration": "errore nell'analizzare la durata del video: %v",
|
||||
"youtube_error_saving_csv": "errore nel salvare i video in CSV: %v",
|
||||
"youtube_extract_visual_data_help": "Estrarre dati visivi dal video usando OCR e FFmpeg",
|
||||
"youtube_failed_create_temp_dir": "impossibile creare la directory temporanea: %v",
|
||||
"youtube_failed_fetch_comments": "Recupero dei commenti fallito: %v",
|
||||
"youtube_failed_get_stream_url": "impossibile ottenere l’URL dello stream tramite yt-dlp: %v",
|
||||
"youtube_failed_parse_http_stream_url": "impossibile analizzare un URL HTTP di stream valido dall’output di yt-dlp",
|
||||
"youtube_failed_walk_directory": "impossibile esplorare la directory: %v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "estrazione dei fotogrammi con ffmpeg non riuscita: %v, output: %s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "ffmpeg è richiesto per l’estrazione visiva ma non è stato trovato nel PATH",
|
||||
"youtube_invalid_duration_string": "stringa di durata non valida: %s",
|
||||
"youtube_invalid_seconds_format": "formato secondi non valido %q: %w",
|
||||
"youtube_invalid_timestamp_format": "formato timestamp non valido: %s",
|
||||
"youtube_invalid_url": "URL YouTube non valido, impossibile ottenere l'ID del video o della playlist: '%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "argomenti yt-dlp non validi: %v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "nessun testo leggibile trovato nei fotogrammi visivi del video",
|
||||
"youtube_no_transcript_content": "nessun contenuto di trascrizione trovato nel file VTT",
|
||||
"youtube_no_url_provided": "Nessun URL YouTube fornito",
|
||||
"youtube_no_video_found_with_id": "nessun video trovato con ID: %s",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "Playlist salvata in %s",
|
||||
"youtube_rate_limit_exceeded": "Limite di richieste YouTube superato. Riprova più tardi o usa argomenti yt-dlp diversi come '--sleep-requests 1' per rallentare le richieste.",
|
||||
"youtube_setup_description": "YouTube - per ottenere trascrizioni video (tramite yt-dlp) e commenti/metadati (tramite API YouTube)",
|
||||
"youtube_tesseract_frame_failed": "tesseract non riuscito sul fotogramma %d: %v, stderr: %s",
|
||||
"youtube_tesseract_required_visual_extraction": "tesseract è richiesto per l’estrazione visiva ma non è stato trovato nel PATH",
|
||||
"youtube_url_help": "Video YouTube o \"URL\" della playlist per ottenere trascrizioni, commenti e inviarli alla chat o stamparli sulla console e memorizzarli nel file di output",
|
||||
"youtube_url_is_playlist_not_video": "l'URL è una playlist, non un video",
|
||||
"youtube_video_id_title_header": "VideoID: Titolo",
|
||||
"youtube_visual_fps_help": "Estrarre un numero specifico di fotogrammi al secondo invece di usare il rilevamento scene",
|
||||
"youtube_visual_frame_cue": "[INDICATORE FOTOGRAMMA VISIVO]",
|
||||
"youtube_visual_sensitivity_help": "Tolleranza per il rilevamento scene di FFmpeg (0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "yt-dlp non trovato in PATH. Per favore installa yt-dlp per usare la funzionalità di trascrizione YouTube",
|
||||
"youtube_ytdlp_required_visual_extraction": "yt-dlp è richiesto per l’estrazione visiva ma non è stato trovato nel PATH",
|
||||
"youtube_ytdlp_stderr_error": "errore durante la lettura dello stderr di yt-dlp"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "動画の詳細取得エラー: %v",
|
||||
"youtube_error_parsing_duration": "動画の長さ解析エラー: %v",
|
||||
"youtube_error_saving_csv": "動画のCSV保存エラー: %v",
|
||||
"youtube_extract_visual_data_help": "OCR と FFmpeg を使用して動画から視覚データを抽出",
|
||||
"youtube_failed_create_temp_dir": "一時ディレクトリの作成に失敗しました: %v",
|
||||
"youtube_failed_fetch_comments": "コメントの取得に失敗しました: %v",
|
||||
"youtube_failed_get_stream_url": "yt-dlp 経由でストリーム URL を取得できませんでした: %v",
|
||||
"youtube_failed_parse_http_stream_url": "yt-dlp の出力から有効な HTTP ストリーム URL を解析できませんでした",
|
||||
"youtube_failed_walk_directory": "ディレクトリの走査に失敗しました: %v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "ffmpeg によるフレーム抽出に失敗しました: %v, 出力: %s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "視覚抽出には ffmpeg が必要ですが、PATH に見つかりません",
|
||||
"youtube_invalid_duration_string": "無効な長さ文字列: %s",
|
||||
"youtube_invalid_seconds_format": "無効な秒形式 %q: %w",
|
||||
"youtube_invalid_timestamp_format": "無効なタイムスタンプ形式: %s",
|
||||
"youtube_invalid_url": "無効なYouTube URL、動画またはプレイリストIDを取得できません: '%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "無効なyt-dlp引数: %v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "動画の視覚フレーム内に判読可能なテキストが見つかりませんでした",
|
||||
"youtube_no_transcript_content": "VTTファイルにトランスクリプトコンテンツが見つかりません",
|
||||
"youtube_no_url_provided": "YouTube URLが提供されていません",
|
||||
"youtube_no_video_found_with_id": "IDの動画が見つかりません: %s",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "プレイリストが %s に保存されました",
|
||||
"youtube_rate_limit_exceeded": "YouTubeのレート制限を超えました。後でもう一度試すか、'--sleep-requests 1'のような異なるyt-dlp引数を使用してリクエストを遅くしてください。",
|
||||
"youtube_setup_description": "YouTube - 動画の転写(yt-dlp経由)とコメント/メタデータ(YouTube API経由)を取得",
|
||||
"youtube_tesseract_frame_failed": "フレーム %d で tesseract が失敗しました: %v, stderr: %s",
|
||||
"youtube_tesseract_required_visual_extraction": "視覚抽出には tesseract が必要ですが、PATH に見つかりません",
|
||||
"youtube_url_help": "YouTube動画またはプレイリスト\"URL\"から転写、コメントを取得してチャットに送信、またはコンソールに出力して出力ファイルに保存",
|
||||
"youtube_url_is_playlist_not_video": "URLはプレイリストであり、動画ではありません",
|
||||
"youtube_video_id_title_header": "動画ID: タイトル",
|
||||
"youtube_visual_fps_help": "シーン検出の代わりに、1 秒あたりの特定フレーム数を抽出",
|
||||
"youtube_visual_frame_cue": "[視覚フレームキュー]",
|
||||
"youtube_visual_sensitivity_help": "FFmpeg のシーン検出の許容度 (0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "PATHにyt-dlpが見つかりません。YouTubeトランスクリプト機能を使用するにはyt-dlpをインストールしてください",
|
||||
"youtube_ytdlp_required_visual_extraction": "視覚抽出には yt-dlp が必要ですが、PATH に見つかりません",
|
||||
"youtube_ytdlp_stderr_error": "yt-dlp stderrの読み取りエラー"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "błąd podczas pobierania szczegółów wideo: %v",
|
||||
"youtube_error_parsing_duration": "błąd podczas przetwarzania czasu trwania wideo: %v",
|
||||
"youtube_error_saving_csv": "błąd podczas zapisywania filmów do CSV: %v",
|
||||
"youtube_extract_visual_data_help": "Wyodrębnij dane wizualne z filmu przy użyciu OCR i FFmpeg",
|
||||
"youtube_failed_create_temp_dir": "nie udało się utworzyć katalogu tymczasowego: %v",
|
||||
"youtube_failed_fetch_comments": "nie udało się pobrać komentarzy: %v",
|
||||
"youtube_failed_get_stream_url": "nie udało się pobrać adresu URL strumienia przez yt-dlp: %v",
|
||||
"youtube_failed_parse_http_stream_url": "nie udało się przetworzyć prawidłowego adresu URL strumienia HTTP z danych wyjściowych yt-dlp",
|
||||
"youtube_failed_walk_directory": "nie udało się przejść przez katalog: %v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "ekstrakcja klatek przez ffmpeg nie powiodła się: %v, wyjście: %s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "ffmpeg jest wymagany do ekstrakcji wizualnej, ale nie został znaleziony w PATH",
|
||||
"youtube_invalid_duration_string": "nieprawidłowy ciąg czasu trwania: %s",
|
||||
"youtube_invalid_seconds_format": "nieprawidłowy format sekund %q: %w",
|
||||
"youtube_invalid_timestamp_format": "nieprawidłowy format znacznika czasu: %s",
|
||||
"youtube_invalid_url": "nieprawidłowy URL YouTube, nie można uzyskać identyfikatora wideo lub playlisty: '%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "nieprawidłowe argumenty yt-dlp: %v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "nie znaleziono czytelnego tekstu w wizualnych klatkach wideo",
|
||||
"youtube_no_transcript_content": "nie znaleziono zawartości transkrypcji w pliku VTT",
|
||||
"youtube_no_url_provided": "Nie podano URL YouTube",
|
||||
"youtube_no_video_found_with_id": "nie znaleziono wideo o ID: %s",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "Playlista zapisana do %s",
|
||||
"youtube_rate_limit_exceeded": "Przekroczono limit żądań YouTube. Spróbuj ponownie później lub użyj innych argumentów yt-dlp, np. '--sleep-requests 1', aby spowolnić żądania.",
|
||||
"youtube_setup_description": "YouTube - do pobierania transkrypcji wideo (przez yt-dlp) i komentarzy/metadanych (przez API YouTube)",
|
||||
"youtube_tesseract_frame_failed": "tesseract nie powiódł się dla klatki %d: %v, stderr: %s",
|
||||
"youtube_tesseract_required_visual_extraction": "tesseract jest wymagany do ekstrakcji wizualnej, ale nie został znaleziony w PATH",
|
||||
"youtube_url_help": "URL wideo lub playlisty YouTube do pobrania transkrypcji, komentarzy i wysłania do czatu lub wypisania na konsolę i zapisania w pliku wyjściowym",
|
||||
"youtube_url_is_playlist_not_video": "URL jest playlistą, nie filmem",
|
||||
"youtube_video_id_title_header": "ID wideo: Tytuł",
|
||||
"youtube_visual_fps_help": "Wyodrębnij określoną liczbę klatek na sekundę zamiast używać wykrywania scen",
|
||||
"youtube_visual_frame_cue": "[ZNACZNIK KLATKI WIZUALNEJ]",
|
||||
"youtube_visual_sensitivity_help": "Czułość wykrywania scen FFmpeg (0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "nie znaleziono yt-dlp w PATH. Zainstaluj yt-dlp, aby korzystać z funkcji transkrypcji YouTube",
|
||||
"youtube_ytdlp_required_visual_extraction": "yt-dlp jest wymagany do ekstrakcji wizualnej, ale nie został znaleziony w PATH",
|
||||
"youtube_ytdlp_stderr_error": "błąd podczas odczytu stderr yt-dlp"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "erro ao obter detalhes do vídeo: %v",
|
||||
"youtube_error_parsing_duration": "erro ao analisar a duração do vídeo: %v",
|
||||
"youtube_error_saving_csv": "erro ao salvar vídeos em CSV: %v",
|
||||
"youtube_extract_visual_data_help": "Extrair dados visuais do vídeo usando OCR e FFmpeg",
|
||||
"youtube_failed_create_temp_dir": "falha ao criar diretório temporário: %v",
|
||||
"youtube_failed_fetch_comments": "Falha ao buscar comentários: %v",
|
||||
"youtube_failed_get_stream_url": "falha ao obter a URL do stream via yt-dlp: %v",
|
||||
"youtube_failed_parse_http_stream_url": "falha ao analisar uma URL HTTP válida de stream da saída do yt-dlp",
|
||||
"youtube_failed_walk_directory": "falha ao percorrer o diretório: %v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "extração de quadros com ffmpeg falhou: %v, saída: %s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "ffmpeg é necessário para extração visual, mas não foi encontrado no PATH",
|
||||
"youtube_invalid_duration_string": "string de duração inválida: %s",
|
||||
"youtube_invalid_seconds_format": "formato de segundos inválido %q: %w",
|
||||
"youtube_invalid_timestamp_format": "formato de timestamp inválido: %s",
|
||||
"youtube_invalid_url": "URL do YouTube inválida, não é possível obter o ID do vídeo ou da playlist: '%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "argumentos do yt-dlp inválidos: %v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "nenhum texto legível encontrado nos quadros visuais do vídeo",
|
||||
"youtube_no_transcript_content": "nenhum conteúdo de transcrição encontrado no arquivo VTT",
|
||||
"youtube_no_url_provided": "Nenhuma URL do YouTube fornecida",
|
||||
"youtube_no_video_found_with_id": "nenhum vídeo encontrado com o ID: %s",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "Lista de reprodução salva em %s",
|
||||
"youtube_rate_limit_exceeded": "Limite de taxa do YouTube excedido. Tente novamente mais tarde ou use argumentos diferentes do yt-dlp como '--sleep-requests 1' para desacelerar as requisições.",
|
||||
"youtube_setup_description": "YouTube - para obter transcrições de vídeo (via yt-dlp) e comentários/metadados (via API do YouTube)",
|
||||
"youtube_tesseract_frame_failed": "tesseract falhou no quadro %d: %v, stderr: %s",
|
||||
"youtube_tesseract_required_visual_extraction": "tesseract é necessário para extração visual, mas não foi encontrado no PATH",
|
||||
"youtube_url_help": "Vídeo do YouTube ou URL da playlist para obter transcrição, comentários e enviar ao chat ou imprimir no console e armazenar no arquivo de saída",
|
||||
"youtube_url_is_playlist_not_video": "a URL é uma playlist, não um vídeo",
|
||||
"youtube_video_id_title_header": "VideoID: Título",
|
||||
"youtube_visual_fps_help": "Extrair um número específico de quadros por segundo em vez de usar detecção de cenas",
|
||||
"youtube_visual_frame_cue": "[MARCADOR DE QUADRO VISUAL]",
|
||||
"youtube_visual_sensitivity_help": "Tolerância para detecção de cenas do FFmpeg (0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "yt-dlp não encontrado no PATH. Por favor instale o yt-dlp para usar a funcionalidade de transcrição do YouTube",
|
||||
"youtube_ytdlp_required_visual_extraction": "yt-dlp é necessário para extração visual, mas não foi encontrado no PATH",
|
||||
"youtube_ytdlp_stderr_error": "erro ao ler stderr do yt-dlp"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "erro ao obter detalhes do vídeo: %v",
|
||||
"youtube_error_parsing_duration": "erro ao analisar a duração do vídeo: %v",
|
||||
"youtube_error_saving_csv": "erro ao guardar vídeos em CSV: %v",
|
||||
"youtube_extract_visual_data_help": "Extrair dados visuais do vídeo usando OCR e FFmpeg",
|
||||
"youtube_failed_create_temp_dir": "falha ao criar diretório temporário: %v",
|
||||
"youtube_failed_fetch_comments": "Falha ao obter comentários: %v",
|
||||
"youtube_failed_get_stream_url": "falha ao obter o URL do stream via yt-dlp: %v",
|
||||
"youtube_failed_parse_http_stream_url": "falha ao analisar um URL HTTP válido de stream a partir da saída do yt-dlp",
|
||||
"youtube_failed_walk_directory": "falha ao percorrer o diretório: %v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "a extração de fotogramas com ffmpeg falhou: %v, saída: %s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "ffmpeg é necessário para extração visual, mas não foi encontrado no PATH",
|
||||
"youtube_invalid_duration_string": "cadeia de duração inválida: %s",
|
||||
"youtube_invalid_seconds_format": "formato de segundos inválido %q: %w",
|
||||
"youtube_invalid_timestamp_format": "formato de timestamp inválido: %s",
|
||||
"youtube_invalid_url": "URL do YouTube inválido, não é possível obter o ID do vídeo ou da lista de reprodução: '%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "argumentos do yt-dlp inválidos: %v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "nenhum texto legível encontrado nos fotogramas visuais do vídeo",
|
||||
"youtube_no_transcript_content": "nenhum conteúdo de transcrição encontrado no ficheiro VTT",
|
||||
"youtube_no_url_provided": "Nenhum URL do YouTube fornecido",
|
||||
"youtube_no_video_found_with_id": "nenhum vídeo encontrado com o ID: %s",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "Lista de reprodução guardada em %s",
|
||||
"youtube_rate_limit_exceeded": "Limite de taxa do YouTube excedido. Tente novamente mais tarde ou utilize argumentos diferentes do yt-dlp como '--sleep-requests 1' para desacelerar os pedidos.",
|
||||
"youtube_setup_description": "YouTube - para obter transcrições de vídeo (via yt-dlp) e comentários/metadados (via API do YouTube)",
|
||||
"youtube_tesseract_frame_failed": "tesseract falhou no fotograma %d: %v, stderr: %s",
|
||||
"youtube_tesseract_required_visual_extraction": "tesseract é necessário para extração visual, mas não foi encontrado no PATH",
|
||||
"youtube_url_help": "Vídeo do YouTube ou \"URL\" de playlist para obter transcrição, comentários e enviar ao chat ou imprimir na consola e armazenar no ficheiro de saída",
|
||||
"youtube_url_is_playlist_not_video": "o URL é uma lista de reprodução, não um vídeo",
|
||||
"youtube_video_id_title_header": "VideoID: Título",
|
||||
"youtube_visual_fps_help": "Extrair um número específico de fotogramas por segundo em vez de usar deteção de cenas",
|
||||
"youtube_visual_frame_cue": "[MARCADOR DE FOTOGRAMA VISUAL]",
|
||||
"youtube_visual_sensitivity_help": "Tolerância para deteção de cenas do FFmpeg (0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "yt-dlp não encontrado no PATH. Por favor instale o yt-dlp para usar a funcionalidade de transcrição do YouTube",
|
||||
"youtube_ytdlp_required_visual_extraction": "yt-dlp é necessário para extração visual, mas não foi encontrado no PATH",
|
||||
"youtube_ytdlp_stderr_error": "erro ao ler stderr do yt-dlp"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -715,15 +715,21 @@
|
|||
"youtube_error_getting_video_details": "获取视频详情时出错:%v",
|
||||
"youtube_error_parsing_duration": "解析视频时长时出错:%v",
|
||||
"youtube_error_saving_csv": "将视频保存为 CSV 时出错:%v",
|
||||
"youtube_extract_visual_data_help": "使用 OCR 和 FFmpeg 从视频中提取视觉数据",
|
||||
"youtube_failed_create_temp_dir": "创建临时目录失败:%v",
|
||||
"youtube_failed_fetch_comments": "获取评论失败:%v",
|
||||
"youtube_failed_get_stream_url": "无法通过 yt-dlp 获取流 URL:%v",
|
||||
"youtube_failed_parse_http_stream_url": "无法从 yt-dlp 输出中解析出有效的 HTTP 流 URL",
|
||||
"youtube_failed_walk_directory": "遍历目录失败:%v",
|
||||
"youtube_ffmpeg_frame_extraction_failed": "ffmpeg 提取帧失败:%v,输出:%s",
|
||||
"youtube_ffmpeg_required_visual_extraction": "视觉提取需要 ffmpeg,但在 PATH 中未找到",
|
||||
"youtube_invalid_duration_string": "无效的时长字符串:%s",
|
||||
"youtube_invalid_seconds_format": "无效的秒数格式 %q:%w",
|
||||
"youtube_invalid_timestamp_format": "无效的时间戳格式:%s",
|
||||
"youtube_invalid_url": "无效的 YouTube URL,无法获取视频或播放列表 ID:'%s'",
|
||||
"youtube_invalid_ytdlp_arguments": "无效的 yt-dlp 参数:%v",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_no_clear_text_visual_frames": "在视频视觉帧中未找到清晰文本",
|
||||
"youtube_no_transcript_content": "在 VTT 文件中未找到转录内容",
|
||||
"youtube_no_url_provided": "未提供 YouTube URL",
|
||||
"youtube_no_video_found_with_id": "未找到 ID 为 %s 的视频",
|
||||
|
|
@ -734,9 +740,15 @@
|
|||
"youtube_playlist_saved_to": "播放列表已保存到 %s",
|
||||
"youtube_rate_limit_exceeded": "超过 YouTube 速率限制。请稍后重试,或使用不同的 yt-dlp 参数(如 '--sleep-requests 1')来减慢请求速度。",
|
||||
"youtube_setup_description": "YouTube - 获取视频转录(通过 yt-dlp)和评论/元数据(通过 YouTube API)",
|
||||
"youtube_tesseract_frame_failed": "tesseract 在第 %d 帧上失败:%v,stderr:%s",
|
||||
"youtube_tesseract_required_visual_extraction": "视觉提取需要 tesseract,但在 PATH 中未找到",
|
||||
"youtube_url_help": "YouTube 视频或播放列表 \"URL\",用于获取转录、评论并发送到聊天或打印到控制台并存储到输出文件",
|
||||
"youtube_url_is_playlist_not_video": "URL 是播放列表,而不是视频",
|
||||
"youtube_video_id_title_header": "视频 ID:标题",
|
||||
"youtube_visual_fps_help": "按指定的每秒帧数提取画面,而不是使用场景检测",
|
||||
"youtube_visual_frame_cue": "[视觉帧提示]",
|
||||
"youtube_visual_sensitivity_help": "FFmpeg 场景检测的容差(0.0 - 1.0)",
|
||||
"youtube_ytdlp_not_found": "在 PATH 中未找到 yt-dlp。请安装 yt-dlp 以使用 YouTube 转录功能",
|
||||
"youtube_ytdlp_required_visual_extraction": "视觉提取需要 yt-dlp,但在 PATH 中未找到",
|
||||
"youtube_ytdlp_stderr_error": "读取 yt-dlp stderr 时出错"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -840,13 +840,13 @@ func (o *YouTube) GrabByFlags() (ret *VideoInfo, err error) {
|
|||
flag.BoolVar(&options.Duration, "duration", false, "Output only the duration")
|
||||
flag.BoolVar(&options.Transcript, "transcript", false, "Output only the transcript")
|
||||
flag.BoolVar(&options.TranscriptWithTimestamps, "transcriptWithTimestamps", false, "Output only the transcript with timestamps")
|
||||
flag.BoolVar(&options.Visual, "visual", false, "Output visual text extracted from video frames")
|
||||
flag.Float64Var(&options.VisualSensitivity, "visual-sensitivity", 0.4, "Tolerance for FFmpeg scene detection (0.0 - 1.0)")
|
||||
flag.IntVar(&options.VisualFps, "visual-fps", 0, "Extract a specific number of frames per second instead of using scene detection")
|
||||
flag.BoolVar(&options.Visual, "visual", false, i18n.T("youtube_extract_visual_data_help"))
|
||||
flag.Float64Var(&options.VisualSensitivity, "visual-sensitivity", 0.4, i18n.T("youtube_visual_sensitivity_help"))
|
||||
flag.IntVar(&options.VisualFps, "visual-fps", 0, i18n.T("youtube_visual_fps_help"))
|
||||
flag.BoolVar(&options.Comments, "comments", false, "Output the comments on the video")
|
||||
flag.StringVar(&options.Lang, "lang", "en", "Language for the transcript (default: English)")
|
||||
flag.BoolVar(&options.Metadata, "metadata", false, "Output video metadata")
|
||||
flag.StringVar(&options.YtDlpArgs, "yt-dlp-args", "", "Additional arguments to pass to yt-dlp")
|
||||
flag.StringVar(&options.YtDlpArgs, "yt-dlp-args", "", i18n.T("additional_yt_dlp_args"))
|
||||
flag.Parse()
|
||||
|
||||
if flag.NArg() == 0 {
|
||||
|
|
@ -861,13 +861,13 @@ func (o *YouTube) GrabByFlags() (ret *VideoInfo, err error) {
|
|||
// GrabVisual retrieves visual data from the video by extracting frames via FFmpeg and OCR parsing them via Tesseract.
|
||||
func (o *YouTube) GrabVisual(videoId string, language string, additionalArgs string, sensitivity float64, fps int) (string, error) {
|
||||
if _, err := exec.LookPath("yt-dlp"); err != nil {
|
||||
return "", errors.New("yt-dlp is required for visual extraction but not found in PATH")
|
||||
return "", errors.New(i18n.T("youtube_ytdlp_required_visual_extraction"))
|
||||
}
|
||||
if _, err := exec.LookPath("ffmpeg"); err != nil {
|
||||
return "", errors.New("ffmpeg is required for visual extraction but not found in PATH")
|
||||
return "", errors.New(i18n.T("youtube_ffmpeg_required_visual_extraction"))
|
||||
}
|
||||
if _, err := exec.LookPath("tesseract"); err != nil {
|
||||
return "", errors.New("tesseract is required for visual extraction but not found in PATH")
|
||||
return "", errors.New(i18n.T("youtube_tesseract_required_visual_extraction"))
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Minute)
|
||||
|
|
@ -875,7 +875,7 @@ func (o *YouTube) GrabVisual(videoId string, language string, additionalArgs str
|
|||
|
||||
tempDir, err := os.MkdirTemp("", "fabric-vfabric-"+videoId+"-*")
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to create temp directory: %v", err)
|
||||
return "", fmt.Errorf(i18n.T("youtube_failed_create_temp_dir"), err)
|
||||
}
|
||||
defer os.RemoveAll(tempDir)
|
||||
|
||||
|
|
@ -885,7 +885,7 @@ func (o *YouTube) GrabVisual(videoId string, language string, additionalArgs str
|
|||
if additionalArgs != "" {
|
||||
parsed, parseErr := shellquote.Split(additionalArgs)
|
||||
if parseErr != nil {
|
||||
return "", fmt.Errorf("invalid yt-dlp-args: %v", parseErr)
|
||||
return "", fmt.Errorf(i18n.T("youtube_invalid_ytdlp_arguments"), parseErr)
|
||||
}
|
||||
ytArgs = append(ytArgs, parsed...)
|
||||
}
|
||||
|
|
@ -894,7 +894,7 @@ func (o *YouTube) GrabVisual(videoId string, language string, additionalArgs str
|
|||
cmdUrl := exec.CommandContext(ctx, "yt-dlp", ytArgs...)
|
||||
urlBytes, err := cmdUrl.Output()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to get stream URL via yt-dlp: %v", err)
|
||||
return "", fmt.Errorf(i18n.T("youtube_failed_get_stream_url"), err)
|
||||
}
|
||||
|
||||
streamUrls := strings.Split(strings.TrimSpace(string(urlBytes)), "\n")
|
||||
|
|
@ -906,7 +906,7 @@ func (o *YouTube) GrabVisual(videoId string, language string, additionalArgs str
|
|||
}
|
||||
}
|
||||
if streamUrl == "" {
|
||||
return "", errors.New("failed to parse valid http stream url from yt-dlp output")
|
||||
return "", errors.New(i18n.T("youtube_failed_parse_http_stream_url"))
|
||||
}
|
||||
|
||||
var filter string
|
||||
|
|
@ -919,7 +919,7 @@ func (o *YouTube) GrabVisual(videoId string, language string, additionalArgs str
|
|||
framePattern := filepath.Join(tempDir, "frame_%04d.jpg")
|
||||
cmdFfmpeg := exec.CommandContext(ctx, "ffmpeg", "-i", streamUrl, "-vf", filter, "-fps_mode", "vfr", framePattern)
|
||||
if out, err := cmdFfmpeg.CombinedOutput(); err != nil {
|
||||
return "", fmt.Errorf("ffmpeg frame extraction failed: %v, output: %s", err, string(out))
|
||||
return "", fmt.Errorf(i18n.T("youtube_ffmpeg_frame_extraction_failed"), err, string(out))
|
||||
}
|
||||
|
||||
files, err := filepath.Glob(filepath.Join(tempDir, "frame_*.jpg"))
|
||||
|
|
@ -947,7 +947,7 @@ func (o *YouTube) GrabVisual(videoId string, language string, additionalArgs str
|
|||
ocrErr := cmdOcr.Run()
|
||||
if ocrErr != nil {
|
||||
errMut.Lock()
|
||||
errs = append(errs, fmt.Errorf("tesseract failed on frame %d: %v, stderr: %s", idx, ocrErr, stderrBuf.String()))
|
||||
errs = append(errs, fmt.Errorf(i18n.T("youtube_tesseract_frame_failed"), idx, ocrErr, stderrBuf.String()))
|
||||
errMut.Unlock()
|
||||
return
|
||||
}
|
||||
|
|
@ -972,7 +972,8 @@ func (o *YouTube) GrabVisual(videoId string, language string, additionalArgs str
|
|||
mins := (secs % 3600) / 60
|
||||
sec := secs % 60
|
||||
sb.WriteString(fmt.Sprintf("\n%02d:%02d:%02d.000 --> %02d:%02d:%02d.999\n", hours, mins, sec, hours, mins, sec))
|
||||
sb.WriteString("[VISUAL FRAME CUE]\n")
|
||||
sb.WriteString(i18n.T("youtube_visual_frame_cue"))
|
||||
sb.WriteString("\n")
|
||||
sb.WriteString(text)
|
||||
sb.WriteString("\n")
|
||||
}
|
||||
|
|
@ -980,7 +981,7 @@ func (o *YouTube) GrabVisual(videoId string, language string, additionalArgs str
|
|||
|
||||
ret := sb.String()
|
||||
if ret == "" {
|
||||
return "", errors.New("no clear text found in video visual frames")
|
||||
return "", errors.New(i18n.T("youtube_no_clear_text_visual_frames"))
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue