Unter der Annahme, dass es als Material für das Video "Ich habe versucht, mit XX zu singen" verwendet wird, habe ich den Python-Code geschrieben, der die Originaltexte, die Parodietexte und das Bild generiert, wobei das entsprechende Bild an einer festen Stelle als PowerPoint-Folie platziert wird.
Die Parodie-Songs, die gesungen werden, um die Originaltexte nur mit der Nomenklatur eines bestimmten Genres zu reproduzieren, werden als "Ich habe versucht, mit XX zu singen" -Serien bezeichnet. In dem Video "Ich habe versucht, mit XX zu singen" werden die Originaltexte, Parodietexte und die folgenden Bilder mit den entsprechenden Bildern an einem festen Ort häufig in einem Papierformat abgespielt. Wenn in den Parodietexten viele Nomenklaturen vorkommen, ist es schwierig, das entsprechende Videomaterial manuell zu erstellen, daher wollte ich es programmgesteuert automatisieren. Ich dachte auch, es wäre noch bequemer, wenn die Leute die vom Programm generierten Inhalte optimieren könnten, und entschied mich daher, sie als PowerPoint-Folie zu erstellen. Dafür habe ich eine Bibliothek namens python-pptx verwendet, die pptx-Dateien aus Python generieren kann.
macOS Catalina Version 10.15.3 python3.8.0 oder python3.7.0
Bereiten Sie ein Bild zum Einfügen in die Steckdose vor. Dieses Mal werde ich das Flag-Bild verwenden, das von [dieser Methode] erhalten wurde (https://qiita.com/shimajiroxyz/items/bebcdb06b47c6b399063).
Bereiten Sie eine CSV-Datei vor, in der die Nomenklatur-ID und der entsprechende Bilddateiname wie unten gezeigt durch Kommas getrennt eingegeben werden. Die Nomenklatur-ID wird in der später beschriebenen Textdefinitionsdatei verwendet.
img_file_names.csv
Island,Flag_of_Iceland.png
Irland,Flag_of_Ireland.png
Aserbaidschan,Flag_of_Azerbaijan.png
Afghanistan,Flag_of_Afghanistan.png
Abuhajia,Flag_of_the_Republic_of_Abkhazia.png
vereinigte Staaten von Amerika,Flag_of_the_United_States.png
Vereinigte Arabische Emirate,Flag_of_the_United_Arab_Emirates.png
Algerien,Flag_of_Algeria.png
...
Bereiten Sie die folgende CSV vor, in der die Originaltexte, die Parodietexte und die Nomenklatur-ID des anzuzeigenden Bildes einzeln in jeder durch Kommas getrennten Zeile eingegeben werden. Ich hatte das Gefühl, dass es schwierig ist, den Dateinamen für den Nasen-ID-Teil zu schreiben, und habe daher eine separate Tabelle erstellt, um die Nasen-ID durch den Dateinamen zu ersetzen. Wenn es Ihnen nichts ausmacht, den Namen der Bilddatei direkt zu schreiben, müssen Sie die Korrespondenztabelle nicht schreiben.
lyric.csv
Subaru im Wind,Kasachstan Tubal,Kasachstan
Subaru im Wind,Kasachstan Tubal,Tubal
Galaxie im Sand,Swasiland Guinea,Swasiland
Galaxie im Sand,Swasiland Guinea,Guinea
Wo sind alle hin,Indonesien Indien,Indonesien
Wo sind alle hin,Indonesien Indien,Indien
Ohne überwacht zu werden,Mari Monaco Resoto Monaco,Republik Mali
Ohne überwacht zu werden,Mari Monaco Resoto Monaco,Monaco
Ohne überwacht zu werden,Mari Monaco Resoto Monaco,Resoto
Ohne überwacht zu werden,Mari Monaco Resoto Monaco,Monaco
...
Der Ordnername zum Speichern von Bilddateien lautet images, die Entsprechungstabelle zwischen Nomenklatur und Bilddateinamen lautet img_file_names.csv und die Textdefinitionsdatei lautet lyric.csv. Lassen Sie außerdem generate_pptx.py das Python-Skript sein, das powerpo generiert. Platzieren Sie diese Dateien wie unten gezeigt.
.
├── generate_pptx.py
├── pitcures
│ ├── Flag_of_Afghanistan.png
│ ├── Flag_of_Albania.png
│ └── ...
├── img_file_names.csv
├── lyric.csv
In der obigen Dateistruktur werde ich das Python-Skript erläutern, das die PowerPoint-Datei ausgibt, die das Material des Videos "Ich habe versucht, mit XX zu singen" ist. Ich werde den ganzen Code am Ende setzen. Indem Sie diesen Code als Grundlage bearbeiten, können Sie Zeichen und Bilder hinzufügen, das Layout ändern usw. Siehe bei Bedarf auch die offizielle Python-Pptx-Dokumentation (https://python-pptx.readthedocs.io/en/latest/index.html).
Da python-pptx und Pillow verwendet werden, installieren Sie diese gegebenenfalls mit dem folgenden Befehl usw.
pip install python-pptx
pip install Pillow
Importieren Sie die Bibliothek und legen Sie verschiedene Konstanten fest. Beachten Sie, dass die Foliengröße in englischer metrischer Einheit (WWU; 1 cm = 360.000 emu) angegeben ist. (Referenz: [Ich möchte die Foliengröße mit python-pptx ändern](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
#Foliengröße
#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"
#Die Höhe der oberen linken Koordinate des Textfelds für Parodietexte(Nicht erforderlich, da die linke und rechte Richtung zentriert sind)
IMG_FILE_PATH = "img_file_names.csv"#Eine CSV-Datei mit einer ID und einem Bildpfad pro Zeile
IMG_DIR = "./picture/"
LYRIC_FILE_PATH = "lyric.csv"#CSV-Datei mit Originaltexten, Parodietexten und Bilddatei-ID, die einzeln pro Zeile geschrieben werden
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) #Die Höhe des Bildes bei Anzeige auf einer Folie. Stellen Sie es vorerst auf 3 Zoll ein.
IMG_CENTER_X, IMG_CENTER_Y = SLIDE_WIDTH / 2, SLIDE_HEIGHT / 2 # Mittelkoordinaten des Bildes `` `
##Informationen zur Konfigurationsdatei abrufen Weisen Sie die Informationen in der Korrespondenztabelle einer Variablen namens name2path (Diktattyp) und die Informationen in der Lyrics-Definitionsdatei einer Variablen namens Lyrics (Listentyp) zu.
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]
##Präsentationsobjekte generieren und skalieren Die Foliengröße ist Präsentation.slide_width、Presentation.slide_Sie kann geändert werden, indem der Höhe ein Wert zugewiesen wird.
# Objektdefinition schieben
prs = Presentation()
# Geben Sie die Foliengröße an
prs.slide_width = SLIDE_WIDTH
prs.slide_height = SLIDE_HEIGHT
##Fügen Sie Folien hinzu, die jedem Element des Textes für die Anweisung entsprechen Von hier aus erkläre ich den Vorgang des Hinzufügens von Folien, die jedem Element des Textes entsprechen, mit einer for-Anweisung. Erstens sind das 0., 1. und 2. Element der Lyrik die Originaltexte (Original)._Text), Parodietexte_Text), Bild-ID (Abb_Da es id) entspricht, holen Sie es sich. Wenn die Bild-ID nicht in der Korrespondenztabelle vorhanden ist, fahren Sie fort. Dateipfad (img), falls vorhanden_Datei) erfasst wird.
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]
##Fügen Sie eine leere Folie hinzu Fügen Sie dem Präsentationsobjekt eine leere Folie hinzu_rutschen
# Fügen Sie eine leere Folie hinzu
blank_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(blank_slide_layout)
##Machen Sie den Hintergrund der Folie schwarz
#Schwarzer Hintergrund
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
Fügen Sie eine Textbox hinzu, die dieselbe Größe wie die Folie hat, und füllen Sie sie schwarz aus. ##Bild einfügen Bild IMG_CENTER_X, IMG_CENTER_Fügen Sie es in einer auf Y zentrierten Position ein. Ursprünglich Python-durch pptx hinzufügen_Im Bild kann nur die obere linke Koordinatenposition angegeben werden. Im Video "Ich habe versucht, mit XX zu singen" ist es jedoch besser, die Bildmitte vor und nach dem Umschalten des Bildes auszurichten. Fügen Sie sie daher nach dem separaten Erfassen der Bildgröße durch Zentrieren ein Machen. Die detaillierte Methode istpython-Bild mit pptx zentrierenBitte beziehen Sie sich darauf, wie es in zusammengefasst ist.
# Bildgröße abrufen und Seitenverhältnis abrufen
im = Image.open(img_file)
im_width, im_height = im.size
aspect_ratio = im_width/im_height
#Berechnen Sie die Größe des angezeigten Bildes
img_display_height = IMG_DISPLAY_HEIGHT
img_display_width = aspect_ratio*img_display_height
#Berechnen Sie beim Zentrieren die obere linke Koordinate des Bildes
left = IMG_CENTER_X - img_display_width / 2
top = IMG_CENTER_Y - img_display_height / 2
# Bild zum Schieben hinzufügen
slide.shapes.add_picture(img_file, left, top, height = IMG_DISPLAY_HEIGHT)
##Einfügen von Parodietexten Fügen Sie Parodietexte hinzu. Geben Sie an, dass die Breite des Textfelds der Folienbreite entspricht, und geben Sie dann PP an_ALIGN.Wenn Sie mit CENTER in Links-Rechts-Richtung zentrieren, werden die Texte in der Mitte angezeigt. Schriftfarbe und Schriftgröße sind Schriftarten.size、font.color.Geben Sie dies an, indem Sie rgb einen Wert zuweisen.
# Textfeld hinzufügen
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
agraph.alignment = PP_ALIGN.CENTER # Zentrierung in Links-Rechts-Richtung
##Fügen Sie den Originaltext ein Fügen Sie den Originaltext ein. Die Methode entspricht dem Einfügen der Parodietexte.
# Textfeld hinzufügen
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
##Ausgabe Nach Abschluss der for-Anweisung Präsentation.Geben Sie die pptx-Datei mit save aus.
prs.save(OUTPUT_FILE_PATH)
#Ganzer Code Der gesamte Code ist unten.
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
# Foliengröße
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"
# Die Höhe der oberen linken Koordinate des Textfelds für Parodietexte (nicht erforderlich, da die linke und rechte Richtung zentriert sind).
IMG_FILE_PATH = "img_file_names.csv" # CSV-Datei mit einer ID und einem Bildpfad pro Zeile
IMG_DIR = "./picture/"
LYRIC_FILE_PATH = "lyric.csv" # Eine CSV-Datei, in der die Originaltexte, Parodietexte und die ID der Bilddatei einzeln pro Zeile geschrieben werden.
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 = Zoll (3) # Höhe des Bildes bei Anzeige auf der Folie. Stellen Sie es vorerst auf 3 Zoll ein.
IMG_CENTER_X, IMG_CENTER_Y = SLIDE_WIDTH / 2, SLIDE_HEIGHT / 2 #Center-Koordinaten des Bildes
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]
# Objektdefinition schieben
prs = Presentation()
# Geben Sie die Foliengröße an
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]
# Fügen Sie eine leere Folie hinzu
blank_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(blank_slide_layout)
#Schwarzer Hintergrund
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
# Bildgröße abrufen und Seitenverhältnis abrufen
im = Image.open(img_file)
im_width, im_height = im.size
aspect_ratio = im_width/im_height
#Berechnen Sie die Größe des angezeigten Bildes
img_display_height = IMG_DISPLAY_HEIGHT
img_display_width = aspect_ratio*img_display_height
#Berechnen Sie beim Zentrieren die obere linke Koordinate des Bildes
left = IMG_CENTER_X - img_display_width / 2
top = IMG_CENTER_Y - img_display_height / 2
# Bild zum Schieben hinzufügen
slide.shapes.add_picture(img_file, left, top, height = IMG_DISPLAY_HEIGHT)
# Textfeld hinzufügen
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
# Textfeld hinzufügen
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)
#abschließend Wenn die pptx-Datei ausgegeben wird, können Sie sie als Material für die Videobearbeitungssoftware verwenden, indem Sie Feineinstellungen vornehmen und sie mit der Exportfunktion nach PNG usw. exportieren. Mit dem obigen Code wird eine einfache Folie erstellt. Versuchen Sie jedoch, den Text, die Position zum Einfügen von Bildern, die Textfarbe und die Hintergrundfarbe nach Ihren Wünschen zu ändern.
Recommended Posts