En supposant qu'il sera utilisé comme matériau pour la vidéo "J'ai essayé de chanter avec XX", j'ai écrit le code python qui génère les paroles originales, les paroles parodiques et l'image avec l'image correspondante placée à un endroit fixe sous forme de diapositive PowerPoint.
Les chansons parodiques qui sont chantées pour reproduire les paroles originales avec seulement la nomenclature d'un genre spécifique sont appelées la série "J'ai essayé de chanter avec XX". Dans la vidéo «J'ai essayé de chanter avec XX», les paroles originales, les paroles parodiques et les images suivantes avec les images correspondantes placées à un endroit fixe sont souvent affichées dans un format de lecture papier. Quand il y a beaucoup de nomenclatures apparaissant dans les paroles de la parodie, il est difficile de créer manuellement le matériel vidéo correspondant, donc j'ai voulu l'automatiser par programmation. J'ai également pensé que ce serait encore plus pratique si les gens pouvaient affiner ce qui était généré par le programme, alors j'ai décidé de le faire sous forme de diapositive PowerPoint. Pour cela, j'ai utilisé une bibliothèque appelée python-pptx qui peut générer des fichiers pptx à partir de python.
macOS Catalina version 10.15.3 python3.8.0 ou python3.7.0
Préparez une image à insérer dans le Power Point. Cette fois, j'utiliserai l'image du drapeau obtenue à partir de cette méthode.
Préparez un fichier csv dans lequel l'ID de nomenclature et le nom de fichier image correspondant sont entrés séparés par des virgules comme indiqué ci-dessous. L'ID de nomenclature est utilisé dans le fichier de définition des paroles décrit plus loin.
img_file_names.csv
Islande,Flag_of_Iceland.png
Irlande,Flag_of_Ireland.png
Azerbaïdjan,Flag_of_Azerbaijan.png
Afghanistan,Flag_of_Afghanistan.png
Abuhajia,Flag_of_the_Republic_of_Abkhazia.png
les États-Unis d'Amérique,Flag_of_the_United_States.png
Emirats Arabes Unis,Flag_of_the_United_Arab_Emirates.png
Algérie,Flag_of_Algeria.png
...
Préparez le csv suivant dans lequel les paroles originales, les paroles parodiques et l'ID de nomenclature de l'image à afficher sont saisis un par un sur chaque ligne, séparés par des virgules. J'ai senti qu'il était difficile d'écrire le nom de fichier pour la partie ID du nez, j'ai donc créé un tableau séparé pour remplacer l'ID du nez par le nom du fichier. Si cela ne vous dérange pas d'écrire directement le nom du fichier image, vous n'avez pas besoin d'écrire la table de correspondance.
lyric.csv
Subaru dans le vent,Kazakhstan Tubal,Kazakhstan
Subaru dans le vent,Kazakhstan Tubal,Tubal
Galaxie dans le sable,Swaziland Guinée,Swaziland
Galaxie dans le sable,Swaziland Guinée,Guinée
Où est-ce que tout le monde est parti,Indonésie Inde,Indonésie
Où est-ce que tout le monde est parti,Indonésie Inde,Inde
Sans être surveillé,Mari Monaco Resoto Monaco,République du Mali
Sans être surveillé,Mari Monaco Resoto Monaco,Monaco
Sans être surveillé,Mari Monaco Resoto Monaco,Resoto
Sans être surveillé,Mari Monaco Resoto Monaco,Monaco
...
Le nom du dossier pour stocker les fichiers image est pictures, la table de correspondance entre la nomenclature et les noms de fichier image est img_file_names.csv, et le fichier de définition des paroles est lyric.csv. Aussi, laissez generate_pptx.py être le script python qui génère powerpo. Placez ces fichiers comme indiqué ci-dessous.
.
├── generate_pptx.py
├── pitcures
│ ├── Flag_of_Afghanistan.png
│ ├── Flag_of_Albania.png
│ └── ...
├── img_file_names.csv
├── lyric.csv
Dans la structure de fichier ci-dessus, je vais expliquer le script python qui génère le fichier power point qui est le matériau de la vidéo "J'ai essayé de chanter avec XX". Je vais mettre tout le code à la fin. En éditant ce code comme base, vous pouvez ajouter des caractères et des images, modifier la mise en page, etc. Consultez également la documentation officielle python-pptx (https://python-pptx.readthedocs.io/en/latest/index.html) si nécessaire.
Puisque python-pptx et Pillow sont utilisés, veuillez installer avec la commande suivante, etc. si nécessaire.
pip install python-pptx
pip install Pillow
Importez la bibliothèque et définissez diverses constantes. Notez que la taille de la diapositive est en unité métrique anglaise (EMU; 1 cm = 360 000 emu). (Référence: [Je souhaite modifier la taille de la diapositive avec python-pptx](https://ja.stackoverflow.com/questions/37638/python-pptx%E3%81%A7%E3%82%B9%E3%83%] A9% E3% 82% A4% E3% 83% 89% E3% 81% AE% E3% 82% B5% E3% 82% A4% E3% 82% BA% E3% 82% 92% E5% A4% 89% E3% 81% 88% E3% 81% 9F% E3% 81% 84))
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from PIL import Image
from pptx.dml.color import RGBColor
#Taille de la diapositive
#4:3 (default) 9144000x6858000
#16:9 12193200x6858000
SLIDE_WIDTH = 12193200
SLIDE_HEIGHT = 6858000
BACKGROUD_RGB = RGBColor(0,0,0)
FONT_RGB = RGBColor(255,255,255)
OUTPUT_FILE_PATH = "test.pptx"
#La hauteur de la coordonnée supérieure gauche de la zone de texte des paroles de la parodie(Non requis car les directions gauche et droite sont centrées)
IMG_FILE_PATH = "img_file_names.csv"#Un fichier csv avec un identifiant et un chemin d'image par ligne
IMG_DIR = "./picture/"
LYRIC_FILE_PATH = "lyric.csv"#Fichier CSV avec paroles originales, paroles de parodie et ID de fichier image écrits un par un par ligne
PARODY_LYRIC_HEIGHT = Inches(5.5)
PARODY_LYRIC_FONTSIZE = Pt(36)
ORIGINAL_LYRIC_HEIGHT = Inches(6.5)
ORIGINAL_LYRIC_FONTSIZE = Pt(28)
IMG_DISPLAY_HEIGHT = Inches(3) #La hauteur de l'image lorsqu'elle est affichée sur une diapositive. Pour le moment, réglez-le sur 3 pouces.
IMG_CENTER_X, IMG_CENTER_Y = SLIDE_WIDTH / 2, SLIDE_HEIGHT / 2 # Coordonnées du centre de l'image `` `
##Obtenir des informations sur le fichier de configuration Affectez les informations de la table de correspondance à une variable appelée name2path (type dict) et les informations du fichier de définition des paroles à une variable appelée lyrics (type liste).
name2path = {}
with open(IMG_FILE_PATH,"r") as f:
text = [v.split(',') for v in f.read().split("\n")]
for v in text:
if len(v) == 2:
name2path[v[0]]=IMG_DIR+v[1]
lyrics=[]
with open(LYRIC_FILE_PATH,"r") as f:
lyrics = [v.split(',') for v in f.read().split("\n") if len(v.split(','))==3]
##Générer et dimensionner des objets de présentation La taille de la diapositive est la présentation.slide_width、Presentation.slide_Il peut être modifié en attribuant une valeur à la hauteur.
# Définition d'objet de diapositive
prs = Presentation()
# Spécifiez la taille de la diapositive
prs.slide_width = SLIDE_WIDTH
prs.slide_height = SLIDE_HEIGHT
##Ajouter des diapositives correspondant à chaque élément des paroles dans une déclaration De là, je vais expliquer le processus d'ajout de diapositives correspondant à chaque élément des paroles avec une déclaration for. Premièrement, les 0e, 1er et 2e éléments des paroles sont les paroles originales (originales)._texte), paroles de parodie_text), identifiant de l'image (img_Puisqu'il correspond à id), récupérez-le. Si l'ID d'image n'existe pas dans la table de correspondance, continuez. Chemin du fichier (img) s'il existe_fichier) est acquis.
for index,lyric in enumerate(lyrics):
original_text = lyric[0]
parody_text = lyric[1]
img_id = lyric[2]
if img_id not in name2path:
print("img_id",img_id,"does not exist")
print("line",index,":",lyric,"is ignored")
continue
img_file = name2path[img_id]
##Ajouter une diapositive vierge Ajouter une diapositive vierge à l'objet Présentation_faire glisser
#Ajouter une diapositive vierge
blank_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(blank_slide_layout)
##Rendre l'arrière-plan de la diapositive noir
#Fond noir
shapes = slide.shapes
left, top, width, height = 0, 0, SLIDE_WIDTH, SLIDE_HEIGHT
shape = shapes.add_textbox(left,top,width,height)
fill = shape.fill
fill.solid()
fill.fore_color.rgb = BACKGROUD_RGB
Ajoutez une zone de texte de la même taille que la diapositive et remplissez-la en noir. ##Insérer une image Image IMG_CENTER_X, IMG_CENTER_Insérez-le dans une position centrée sur Y. À l'origine, python-ajouter par pptx_Sur l'image, seule la position des coordonnées en haut à gauche peut être spécifiée, mais dans la vidéo "J'ai essayé de chanter avec XX", il est préférable que le centre de l'image soit aligné avant et après le changement de l'image, donc après avoir acquis la taille de l'image séparément, insérez-la en centrant Faire. La méthode détaillée estpython-Centrer l'image avec pptxVeuillez vous y référer tel qu'il est résumé dans.
# Obtenir la taille de l'image et obtenir le rapport hauteur / largeur
im = Image.open(img_file)
im_width, im_height = im.size
aspect_ratio = im_width/im_height
#Calculer la taille de l'image affichée
img_display_height = IMG_DISPLAY_HEIGHT
img_display_width = aspect_ratio*img_display_height
#Calculer les coordonnées en haut à gauche de l'image lors du centrage
left = IMG_CENTER_X - img_display_width / 2
top = IMG_CENTER_Y - img_display_height / 2
#Ajouter une image à la diapositive
slide.shapes.add_picture(img_file, left, top, height = IMG_DISPLAY_HEIGHT)
##Insertion de paroles parodiques Ajoutez des paroles de parodie. Spécifiez la largeur de la zone de texte pour qu'elle soit identique à la largeur de la diapositive, puis PP_ALIGN.En centrant dans la direction gauche-droite avec CENTRE, les paroles seront affichées au centre. La couleur et la taille de la police sont des polices.size、font.color.Spécifiez en attribuant une valeur à rgb.
#Ajouter une zone de texte
left, top, width, height = 0, PARODY_LYRIC_HEIGHT, SLIDE_WIDTH, Inches(1)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
tf.text = parody_text
paragraph = tf.paragraphs[0]
font = paragraph.font
font.size = PARODY_LYRIC_FONTSIZE
font.color.rgb = FONT_RGB
paragraphe.alignment = PP_ALIGN.CENTER # Centrage dans le sens gauche-droite
##Insertion des paroles originales Insérez les paroles originales. La méthode est la même que pour l'insertion des paroles parodiques.
#Ajouter une zone de texte
left, top, width, height = 0, ORIGINAL_LYRIC_HEIGHT, SLIDE_WIDTH, Inches(1)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
tf.text = original_text
paragraph = tf.paragraphs[0]
font = paragraph.font
font.size = ORIGINAL_LYRIC_FONTSIZE
font.color.rgb = FONT_RGB
paragraph.alignment = PP_ALIGN.CENTER
##production Après avoir terminé la déclaration for, Présentation.Sortez le fichier pptx avec save.
prs.save(OUTPUT_FILE_PATH)
#Code entier Le code complet est ci-dessous.
generate_pptx.py
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from PIL import Image
from pptx.dml.color import RGBColor
# Taille de la diapositive
4:3 (default) 9144000x6858000
16:9 12193200x6858000
SLIDE_WIDTH = 12193200
SLIDE_HEIGHT = 6858000
BACKGROUD_RGB = RGBColor(0,0,0)
FONT_RGB = RGBColor(255,255,255)
OUTPUT_FILE_PATH = "test.pptx"
# La hauteur de la coordonnée supérieure gauche de la zone de texte des paroles de la parodie (pas nécessaire car les directions gauche et droite sont centrées)
IMG_FILE_PATH = "img_file_names.csv" # fichier csv avec un identifiant et un chemin d'image par ligne
IMG_DIR = "./picture/"
LYRIC_FILE_PATH = "lyric.csv" # Un fichier csv dans lequel les paroles originales, les paroles de la parodie et l'ID du fichier image sont écrits un par un par ligne.
PARODY_LYRIC_HEIGHT = Inches(5.5)
PARODY_LYRIC_FONTSIZE = Pt(36)
ORIGINAL_LYRIC_HEIGHT = Inches(6.5)
ORIGINAL_LYRIC_FONTSIZE = Pt(28)
IMG_DISPLAY_HEIGHT = Inches (3) # Hauteur de l'image lorsqu'elle est affichée sur la diapositive. Pour le moment, réglez-le sur 3 pouces.
IMG_CENTER_X, IMG_CENTER_Y = SLIDE_WIDTH / 2, SLIDE_HEIGHT / 2 # Coordonnées du centre de l'image
name2path = {}
with open(IMG_FILE_PATH,"r") as f:
text = [v.split(',') for v in f.read().split("\n")]
for v in text:
if len(v) == 2:
name2path[v[0]]=IMG_DIR+v[1]
lyrics=[]
with open(LYRIC_FILE_PATH,"r") as f:
lyrics = [v.split(',') for v in f.read().split("\n") if len(v.split(','))==3]
# Définition d'objet de diapositive
prs = Presentation()
# Spécifiez la taille de la diapositive
prs.slide_width = SLIDE_WIDTH
prs.slide_height = SLIDE_HEIGHT
for index,lyric in enumerate(lyrics):
original_text = lyric[0]
parody_text = lyric[1]
img_id = lyric[2]
if img_id not in name2path:
print("img_id",img_id,"does not exist")
print("line",index,":",lyric,"is ignored")
continue
img_file = name2path[img_id]
#Ajouter une diapositive vierge
blank_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(blank_slide_layout)
#Fond noir
shapes = slide.shapes
left, top, width, height = 0, 0, SLIDE_WIDTH, SLIDE_HEIGHT
shape = shapes.add_textbox(left,top,width,height)
fill = shape.fill
fill.solid()
fill.fore_color.rgb = BACKGROUD_RGB
# Obtenir la taille de l'image et obtenir le rapport hauteur / largeur
im = Image.open(img_file)
im_width, im_height = im.size
aspect_ratio = im_width/im_height
#Calculer la taille de l'image affichée
img_display_height = IMG_DISPLAY_HEIGHT
img_display_width = aspect_ratio*img_display_height
#Calculer les coordonnées en haut à gauche de l'image lors du centrage
left = IMG_CENTER_X - img_display_width / 2
top = IMG_CENTER_Y - img_display_height / 2
#Ajouter une image à la diapositive
slide.shapes.add_picture(img_file, left, top, height = IMG_DISPLAY_HEIGHT)
#Ajouter une zone de texte
left, top, width, height = 0, PARODY_LYRIC_HEIGHT, SLIDE_WIDTH, Inches(1)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
tf.text = parody_text
paragraph = tf.paragraphs[0]
font = paragraph.font
font.size = PARODY_LYRIC_FONTSIZE
font.color.rgb = FONT_RGB
paragraph.alignment = PP_ALIGN.CENTER
#Ajouter une zone de texte
left, top, width, height = 0, ORIGINAL_LYRIC_HEIGHT, SLIDE_WIDTH, Inches(1)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
tf.text = original_text
paragraph = tf.paragraphs[0]
font = paragraph.font
font.size = ORIGINAL_LYRIC_FONTSIZE
font.color.rgb = FONT_RGB
paragraph.alignment = PP_ALIGN.CENTER
prs.save(OUTPUT_FILE_PATH)
#en conclusion Lorsque le fichier pptx est sorti, vous pouvez l'utiliser comme matériau pour un logiciel de montage vidéo en effectuant des ajustements précis et en l'exportant au format png, etc. avec la fonction d'exportation. Le code ci-dessus créera une simple diapositive, mais essayez de changer les paroles, la position d'insertion de l'image, la couleur du texte et la couleur d'arrière-plan à votre guise.
Recommended Posts