Cette fois, je vais résumer comment télécharger la vidéo publiée sur YouTube en mp3.
Des sites de référence et github sont également publiés.
Si vous avez des erreurs ou des questions, veuillez commenter.
Je télécharge principalement des vidéos que j'ai personnellement téléchargées sur YouTube et les convertis en mp3.
Par conséquent, nous ne sommes pas responsables des problèmes causés par l'utilisation de la source sonore obtenue à partir de la vidéo publiée par quelqu'un d'autre que vous.
Beaucoup de gens disent que l'utilisation privée est acceptable, mais veuillez le faire à votre discrétion. S'il vous plaît voir ci-dessous avec cette intention!
Ce n'est qu'un exemple. Supposons que vous souhaitiez convertir https://www.youtube.com/watch?v=E8bUKuF9v10 en mp3.
En d'autres termes, ils sont classés dans l'ordre de téléchargement.
À propos, si vous appuyez sur Quitter à la première étape, la fenêtre se fermera, et même si vous entrez To Mp3, DeleteURL, Paste lorsque rien n'est entré, l'opération ne se produira pas.
...\ffmpeg~static\bin
Il y a un fichier principal de ffmpeg dedans, alors passez-y le chemin. Mettez également le fichier exe yououtue-dl dans le bac. De cette façon, vous pouvez lancer l'exe n'importe où dans l'invite de commande.
-bin
- ffmpeg.exe
- ffplay.exe
- ffprobe.exe
- youtube-dl.exe
Il existe d'innombrables téléchargeurs de vidéos YouTube sur le net, mais je ne voulais pas récupérer les données d'un site inconnu.
Par conséquent, j'ai décidé de le compléter sur mon propre PC.
Au début, je ne savais rien des logiciels dédiés, mais en cherchant sur Google, j'en ai trouvé un bon et j'ai senti que cela pouvait être réalisé.
La fonction à implémenter était très simple, j'ai donc rendu possible son utilisation avec l'interface graphique.
De plus, s'il s'agit d'un fichier Python, il peut être immédiatement converti en exe, afin qu'il puisse être distribué à des amis.
Tkinter était célèbre en tant qu'interface graphique, mais quand je l'ai essayé, je me sentais nauséeux, alors j'ai utilisé pysimplegui.
Grâce à cela, je pense que l'interface graphique a été achevée en peu de temps.
github:
https://github.com/cota-eng/youtube-dl-in-windows
Je vais l'expliquer séparément.
import subprocess
import PySimpleGUI as sg
import sys
import re
import os
import pyperclip
from win32_setctime import setctime
from datetime import datetime
Tous sont des programmes py simplegui. C'est un flux pour décider du thème de disposition des couleurs, créer une mise en page et ouvrir une fenêtre.
La signification de chaque bouton et champ de texte est la même que celle des mots anglais.
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" Cela signifie simplement que lorsque ce bouton est enfoncé, il quitte la boucle while.
if event == 'Quit':
break
Au lieu d'avoir une pause au bas de la boucle while, utilisez if, elif, etc. pour interrompre à la scène appropriée.
event == "" signifie l'événement qui se produit lorsque le bouton est cliqué. Vous pouvez spécifier le programme de manière unique en faisant correspondre le nom du bouton. Évitons facilement les bogues avec la longueur de l'entrée url lors de cet événement. Parmi les liens youtube, la longueur requise est d'environ 40, donc j'ai défini en toute sécurité 32 comme norme.
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))
Je vais l'expliquer séparément.
En utilisant r "chaîne de caractères", tous les symboles déroutants peuvent être traités comme des caractères. raw La chaîne brute. La commande cmd a été créée à partir du fichier readme de youtube-dl. youtube-dl % (titre) s.% (Ext) s est le nom du fichier. C'est une histoire sur youtube-dl, vous devriez donc la lire vous-même pour plus de détails. Je l'ai obtenu par essais et erreurs.
Appelez-le avec la fonction d'appel de sous-processus. Spécifiez également le répertoire avec cwd.
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")
Mettez le nom du fichier dans res. Ceci est également le résultat d'essais et d'erreurs, veuillez donc jeter un coup d'œil et comprendre. Après tout, vous pouvez stocker tous les chemins dans le nom de fichier en procédant comme suit:
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)
Définissez l'heure de création, etc. à partir de la bibliothèque datetime. À proprement parler, la date et l'heure de mise à jour sont définies automatiquement lors de sa création, mais pour une raison quelconque, la date et l'heure de mise à jour n'ont pas été mises à jour.
J'ai donc pu le réaliser en incorporant le datetime à ma manière, en me référant au site suivant.
URL de référence: https://srbrnote.work/archives/4054
Au fait, si vous utilisez PowerShell,
Set-ItemProperty hogehoge.txt -name CreationTime -value $(Get-Date)
Set-ItemProperty hogehoge.txt -name LastWriteTime -value $(Get-Date)
C'est facile à faire, mais j'ai entendu dire que PowerShell ne peut pas être utilisé avec python, j'ai donc décidé d'utiliser le module os.
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))
Fermez simplement la fenêtre une fois, et lorsque vous tapez et exécutez la même chose que lorsque vous l'avez ouverte pour la première fois, elle sera lue.
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)
C'est vrai, coller colle le lien copié. Je l'ai implémenté car il est plus facile d'utiliser les boutons.
Comme il n'est pas possible d'entrer dans l'interface graphique uniquement avec pyperclip, le problème a été résolu en fermant la fenêtre, en affectant le contenu de pyperclip à une variable et en ouvrant une fenêtre avec cette variable comme valeur initiale.
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)
C'est la même idée qu'avant. Au lieu de le laisser être supprimé, j'ai fermé la fenêtre et appelé une fenêtre qui n'avait aucune entrée.
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)
Je suis désolé que le code soit sale, mais j'espère que cela aide.
Je n'ai pas trouvé de site qui présente et explique cette série d'étapes, alors je l'ai téléchargé sur Qiita.
Merci beaucoup.
Recommended Posts