Comment convertir Youtube en mp3 et le télécharger en toute sécurité [Python]

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.

point important

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!

Produit fini

Ce n'est qu'un exemple. Supposons que vous souhaitiez convertir https://www.youtube.com/watch?v=E8bUKuF9v10 en mp3.

Où il a ouvert

2020-09-10_22h16_22.png

2020-09-10_22h16_57.png

Génération de fichiers

2020-09-10_22h17_19.png

2020-09-10_22h18_17.png

Toutes les dates peuvent être alignées.

En d'autres termes, ils sont classés dans l'ordre de téléchargement. 2020-09-10_22h18_36.png

À 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.

environnement

annuaire

...\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

Le fond que j'ai fait et la structure que je voulais faire

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.

code

github:

https://github.com/cota-eng/youtube-dl-in-windows

Commentaire de code

Je vais l'expliquer séparément.

Importation de bibliothèque de modules

import subprocess
import PySimpleGUI as sg
import sys
import re
import os
import pyperclip
from win32_setctime import setctime
from datetime import datetime

Premier dans la fonction

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.

Convertir en mp3

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.

len> 32 est vrai

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))

Lorsque len <= 32

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)

coller l'événement

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)

supprimer l'événement

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)

c'est tout

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

Comment convertir Youtube en mp3 et le télécharger en toute sécurité [Python]
[Python] Comment FFT des données mp3
Vue d'ensemble de l'environnement virtuel Python et comment le créer
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Convertissez le résultat de python optparse en dict et utilisez-le
Comment empaqueter et distribuer des scripts Python
Comment installer et utiliser pandas_datareader [Python]
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Comment convertir Python en fichier exe
python: Comment utiliser les locals () et globals ()
[Python] Comment calculer MAE et RMSE
Comment utiliser le zip Python et énumérer
Téléchargez facilement des mp3 / mp4 avec python et youtube-dl!
Comment télécharger des vidéos YouTube à l'aide de pytube3
Comment utiliser is et == en Python
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
Rechercher et télécharger automatiquement des vidéos YouTube avec Python
Comment générer une séquence en Python et C ++
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
[Python] Comment utiliser la fonction de hachage et taple.
Comment installer le détecteur Cascade et comment l'utiliser
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Python datetime Comment calculer des dates et convertir des chaînes strftime, strptime [Definitive Edition]
[Python] Comment nommer les données de table et les sortir avec csv (méthode to_csv)
Comment installer Python
Comment installer python
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
Comment convertir / restaurer une chaîne avec [] en python
[Python] Convertit les nombres décimaux en nombres binaires, octaux et hexadécimaux
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
Comment convertir le type Python # pour les super débutants de Python: str
[Python] Convertit un conteneur à usage général et une classe entre eux
Téléchargez facilement et partiellement mp4 avec python et youtube-dl!
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Comment mesurer le temps de lecture d'un fichier mp3 avec python
Comment convertir des nombres à virgule flottante en nombres binaires en Python
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
[Python] Comment trier un dict dans une liste et une instance dans une liste
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
[Python] Comment fractionner et modulariser des fichiers (simple, exemple)
[Python] Comment créer une matrice de corrélation et une carte thermique
Comment utiliser Decorator dans Django et comment le créer
python, php, ruby Comment convertir un décimal en n
Python # Comment vérifier le type et le type pour les super débutants
Essayez de le faire avec GUI, PyQt en Python
[2020.8 dernière] Comment installer Python
[python] Convertir la date en chaîne
Comment installer Python [Windows]
Convertir numpy int64 en python int
python3: Comment utiliser la bouteille (2)
[Python] Convertir la liste en Pandas [Pandas]
Comment convertir un tableau en dictionnaire avec Python [Application]
Comment échanger des éléments dans un tableau en Python et comment inverser un tableau.
[Python] Comment utiliser la liste 1
Comment mettre à jour Tkinter de Python vers la version 8.6
Comment se connecter à diverses bases de données à partir de Python (PEP 249) et SQL Alchemy
[Pepper] Comment l'utiliser?
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Comment utiliser Python Argparse