Dieses Mal werde ich zusammenfassen, wie man das auf YouTube veröffentlichte Video als MP3 herunterlädt.
Referenzseiten und Github werden ebenfalls veröffentlicht.
Wenn Sie Fehler oder Fragen haben, kommentieren Sie bitte.
Ich lade hauptsächlich Videos herunter, die ich persönlich auf YouTube hochgeladen habe, und konvertiere sie in MP3.
Daher sind wir nicht verantwortlich für Probleme, die durch die Verwendung der Tonquelle verursacht werden, die aus dem von einer anderen Person als Ihnen geposteten Video stammt.
Viele Leute sagen, dass die private Nutzung in Ordnung ist, aber bitte tun Sie dies nach eigenem Ermessen. Bitte sehen Sie unten mit dieser Absicht!
Es ist nur ein Beispiel. Angenommen, Sie möchten https://www.youtube.com/watch?v=E8bUKuF9v10 in MP3 konvertieren.
Mit anderen Worten, sie sind in der Reihenfolge des Downloads angeordnet.
Übrigens, wenn Sie in der ersten Phase auf Beenden drücken, wird das Fenster geschlossen, und selbst wenn Sie To Mp3, DeleteURL, Paste eingeben, wenn nichts eingegeben wird, wird der Vorgang nicht ausgeführt.
...\ffmpeg~static\bin
Darin befindet sich eine Hauptdatei von ffmpeg. Übergeben Sie also den Pfad dorthin. Legen Sie auch die Datei yououtue-dl exe in den Papierkorb. Auf diese Weise können Sie die exe an einer beliebigen Stelle in der Eingabeaufforderung starten.
-bin
- ffmpeg.exe
- ffplay.exe
- ffprobe.exe
- youtube-dl.exe
Es gibt unzählige YouTube-Video-Downloader im Internet, aber ich wollte die Daten nicht von einer unbekannten Website zurückerhalten.
Deshalb habe ich beschlossen, es auf meinem eigenen PC zu vervollständigen.
Anfangs wusste ich nichts über dedizierte Software, aber als ich googelte, fand ich eine gute und ich hatte das Gefühl, dass dies erreicht werden könnte.
Die zu implementierende Funktion war sehr einfach, so dass ich es möglich machte, mit der GUI zu arbeiten.
Wenn es sich um eine Python-Datei handelt, kann sie sofort in eine Exe konvertiert werden, sodass sie an Freunde verteilt werden kann.
Tkinter war als GUI berühmt, aber als ich es versuchte, fühlte ich mich übel, also benutzte ich pysimplegui.
Dank dessen denke ich, dass die GUI in kurzer Zeit fertiggestellt wurde.
github:
https://github.com/cota-eng/youtube-dl-in-windows
Ich werde es separat erklären.
import subprocess
import PySimpleGUI as sg
import sys
import re
import os
import pyperclip
from win32_setctime import setctime
from datetime import datetime
Alle sind py simplegui Programme. Es ist ein Ablauf, das Thema der Farbanordnung zu bestimmen, ein Layout zu erstellen und ein Fenster zu öffnen.
Die Bedeutung jeder Schaltfläche und jedes Textfelds entspricht der von englischen Wörtern.
sg.theme("SystemDefault")
layout = [
[sg.Text("Please Input Youtube URL!")],
[sg.Button(
'Quit', size=(34, 2))],
[sg.Button('To Mp3', size=(34, 2))],
[sg.InputText('', size=(39, 3))],
[sg.Button('DeleteURL', size=(16, 2)),
sg.Button('Paste', size=(16, 2))]
]
window = sg.Window('From Youtube To mp3', layout)
while True
while True:
event, values = window.read()
url = values[0]
event=="Quit" Es bedeutet einfach, dass diese Taste beim Drücken die while-Schleife verlässt.
if event == 'Quit':
break
Anstatt eine Pause am unteren Rand der while-Schleife zu machen, verwenden Sie if, elif usw., um an der entsprechenden Szene zu brechen.
event == "" bedeutet das Ereignis, das auftritt, wenn auf die Schaltfläche geklickt wird. Sie können das Programm eindeutig angeben, indem Sie den Namen der Schaltfläche abgleichen. Lassen Sie uns auf einfache Weise Fehler mit der Länge der URL-Eingabe während dieses Ereignisses verhindern. Von den Youtube-Links beträgt die erforderliche Länge ungefähr 40, daher habe ich sicher 32 als Standard festgelegt.
elif event == 'To Mp3':
if len(url) > 32:
cmd = r'youtube-dl {} -x --audio-format mp3 -o "C:\Users\INPUTUSERNAME\Music\youtube-dl\%(title)s.%(ext)s"'.format(
url)
subprocess.call(
cmd, cwd=r"C:\Program Files\ffmpeg-20200831-4a11a6f-win64-static\bin")
res = subprocess.check_output(f'youtube-dl -e {url}'.split())
res = res.decode('shift_jis').replace('\n', '')
res += '.mp3'
root = "C:\\Users\\INPUTUSERNAME\\Music\\youtube-dl\\"
filename = root + res
print(filename)
date = datetime.now()
year, month, day, hour, minute, second = date.year, date.month, date.day, date.hour, date.minute, date.second
now = datetime(date.year, date.month, date.day,
date.hour, date.minute, date.second).timestamp()
os.chdir(root)
setctime(filename, now)
os.utime(filename, (now, now))
Ich werde es separat erklären.
Durch die Verwendung von r "Zeichenfolge" können alle verwirrenden Symbole als Zeichen behandelt werden. raw Die rohe Zeichenfolge. Der Befehl cmd wurde aus der Readme-Datei von youtube-dl erstellt. youtube-dl % (Titel) s.% (Ext) s ist der Dateiname. Es ist eine Geschichte auf youtube-dl, also solltest du sie selbst lesen, um Details zu erfahren. Ich habe es durch Versuch und Irrtum bekommen.
Rufen Sie es mit der Unterprozessaufruffunktion auf. Geben Sie auch das Verzeichnis mit cwd an.
cmd = r'youtube-dl {} -x --audio-format mp3 -o "C:\Users\INPUTUSERNAME\Music\youtube-dl\%(title)s.%(ext)s"'.format(
url)
subprocess.call(
cmd, cwd=r"C:\Program Files\ffmpeg-20200831-4a11a6f-win64-static\bin")
Geben Sie den Dateinamen in res ein. Dies ist auch das Ergebnis von Versuch und Irrtum. Schauen Sie also bitte vorbei und verstehen Sie. Schließlich können Sie alle Pfade im Dateinamen wie folgt speichern:
res = subprocess.check_output(f'youtube-dl -e {url}'.split())
res = res.decode('shift_jis').replace('\n', '')
res += '.mp3'
root = "C:\\Users\\INPUTUSERNAME\\Music\\youtube-dl\\"
filename = root + res
print(filename)
Stellen Sie die Erstellungszeit usw. in der datetime-Bibliothek ein. Genau genommen werden Datum und Uhrzeit der Aktualisierung beim Erstellen automatisch festgelegt, aber aus irgendeinem Grund wurden Datum und Uhrzeit der Aktualisierung nicht aktualisiert.
Daher konnte ich dies realisieren, indem ich die datetime auf meine eigene Weise einbettete und auf die folgende Site verwies.
Referenz-URL: https://srbrnote.work/archives/4054
Übrigens, wenn Sie Powershell verwenden,
Set-ItemProperty hogehoge.txt -name CreationTime -value $(Get-Date)
Set-ItemProperty hogehoge.txt -name LastWriteTime -value $(Get-Date)
Es ist einfach, aber ich habe gehört, dass Powershell nicht mit Python verwendet werden kann, deshalb habe ich mich für das OS-Modul entschieden.
date = datetime.now()
year, month, day, hour, minute, second = date.year, date.month, date.day, date.hour, date.minute, date.second
now = datetime(date.year, date.month, date.day,
date.hour, date.minute, date.second).timestamp()
os.chdir(root)
setctime(filename, now)
os.utime(filename, (now, now))
Schließen Sie das Fenster einfach einmal, und wenn Sie es wie beim ersten Öffnen eingeben und ausführen, wird es abgespielt.
else:
window.close()
layout = [
[sg.Text("Please Input youtube URL!")],
[sg.Button('Quit', size=(34, 2))],
[sg.Button('To Mp3', size=(34, 2))],
[sg.InputText('', size=(39, 3))],
[sg.Button('DeleteURL', size=(16, 2)),
sg.Button('Paste', size=(16, 2))]
]
window = sg.Window('From youtube To mp3', layout)
Fügen Sie den kopierten Link ein. Ich habe es implementiert, weil es einfacher ist, die Tasten zu bedienen.
Da es nicht möglich ist, nur mit pyperclip in gui einzugeben, wurde dies gelöst, indem das Fenster geschlossen, der Inhalt von pyperclip einer Variablen zugewiesen und ein Fenster mit dieser Variablen als Anfangswert geöffnet wurde.
elif event == 'Paste':
window.close()
paste_url = pyperclip.paste()
layout = [
[sg.Text("Please Input youtube URL!")],
[sg.Button('Quit', size=(34, 2))],
[sg.Button('To Mp3', size=(34, 2))],
[sg.InputText(paste_url, size=(39, 3))],
[sg.Button('DeleteURL', size=(16, 2)),
sg.Button("Paste", size=(16, 2))]
]
window = sg.Window('From youtube To mp3 ', layout)
Dies ist die gleiche Idee wie zuvor. Anstatt es löschen zu lassen, schloss ich das Fenster und rief ein Fenster auf, das keine Eingabe hatte.
elif event == 'DeleteURL':
window.close()
layout = [
[sg.Text("Please Input youtube URL!")],
[sg.Button('Quit', size=(34, 2))],
[sg.Button('To Mp3', size=(34, 2))],
[sg.InputText('', size=(39, 3))],
[sg.Button('DeleteURL', size=(16, 2)),
sg.Button('Paste', size=(16, 2))]
]
window = sg.Window('From youtube To mp3', layout)
Es tut mir leid, dass der Code schmutzig ist, aber ich hoffe, es hilft.
Ich konnte keine Website finden, die diese Reihe von Schritten vorstellt und erklärt, und habe sie daher auf Qiita hochgeladen.
Vielen Dank.
Recommended Posts