Ich habe versucht, eine GIF-Animation für LGTM mit einem Skript aus Videos und Fotos auszugeben, die auf Reisen aufgenommen wurden. Fotos mit Anti-Aliasing wunderschön reduzieren Dies ist eine Fortsetzung des Artikels. Das Verwackeln der Kamera ist stärker als erwartet, daher möchte ich als zukünftiges Ziel die Logik zum Verwackeln der Kamera hinzufügen. Sie sollten dazu in der Lage sein, indem Sie die Merkmalspunkte des Bild- und Mustervergleichs extrahieren ...
Es wurde bestätigt, dass es nur in der Python2.7-Umgebung von Mac funktioniert
#PIL-Installation
pip install PIL --allow-external PIL --allow-unverified PIL
#imagemagick installieren
brew install imagemagick
#Installationsbestätigung
convert --version
>>> Version: ImageMagick 6.9.2-5 Q16 x86_64 2015-11-01 http://www.imagemagick.org
>>> Copyright: Copyright (C) 1999-2015 ImageMagick Studio LLC
>>> License: http://www.imagemagick.org/script/license.php
>>> Features: Cipher DPC Modules
>>> Delegates (built-in): bzlib freetype jng jpeg ltdl lzma png tiff xml zlib
#Fmpeg installieren
brew install ffmpeg
lgtm.py
# -*- coding: utf-8 -*-
import commands
import Image
import re
#Bildhöhenpixel beim Verkleinern
PHOTO_HEIGHT = 300
#Ordner mit Bildern
BASE_DIR = "/Users/XXXX/Desktop/Photos"
#Name des Bildes für reguläre Ausdrücke
PHOTO_REGEX = r"P.*.[jpg|JPG]"
#Bildpräfix nach Größenänderung
PHOTO_RESIZE_PREFIX = "r_"
#LGTM-Bild
LGTM_PATH = "/tmp/lgtm.png "
#Koordinaten zum Zusammensetzen von LGTM-Bildern
LGTM_PASTE_X_Y = (120, 0)
def main():
#Holen Sie sich den vollständigen Bildpfad
_cmd = "cd {} && ls".format(BASE_DIR)
l = commands.getoutput(_cmd)
l = l.split("\n")
l = [_l for _l in l if re.match(PHOTO_REGEX, _l)]
#Generieren Sie einen Ordner für die Ausgabe
assert len(BASE_DIR) > 5, "BASE_DIR is too short"
commands.getoutput("rm -rf {}/output".format(BASE_DIR))
commands.getoutput("mkdir {}/output".format(BASE_DIR))
for _l in l:
before_path = '{}/{}'.format(BASE_DIR, _l)
filename = '{}{}'.format(PHOTO_RESIZE_PREFIX, _l)
after_path = '{}/output/{}'.format(BASE_DIR, filename)
resize(before_path, after_path, filename=_l) #Schrumpfen
def resize(before, after, height=PHOTO_HEIGHT, filename="", aa_enable=True, lgtm_enable=True):
"""
Bildgröße anpassen
:param str before:Pfad der Originalbilddatei
:param str after:Bilddateipfad nach Größenänderung
:param int height:Bildhöhe nach Größenänderung
:param bool aa_enable:Gibt an, ob Antialiasing aktiviert werden soll
:param bool lgtm_enable:Gibt an, ob das Zusammensetzen von lgtm-Bildern aktiviert werden soll
:return:
"""
#Bild schreibgeschützt öffnen
img = Image.open(before, 'r')
#Berechnen Sie die Bildpixel nach der Größenänderung
before_x, before_y = img.size[0], img.size[1]
x = int(round(float(height / float(before_y) * float(before_x))))
y = height
resize_img = img
if aa_enable:
#Mit Antialiasing schrumpfen
resize_img.thumbnail((x, y), Image.ANTIALIAS)
else:
#Schrumpfen ohne Antialiasing
resize_img = resize_img.resize((x, y))
#lgtm Bildkomposition
if lgtm_enable:
lgtm = Image.open(LGTM_PATH)
resize_img.paste(lgtm, LGTM_PASTE_X_Y, lgtm) #Ich synthetisiere, indem ich die Koordinaten anpasse
#Speichern Sie das Bild nach der Größenänderung
resize_img.save(after, 'jpeg', quality=100)
print "RESIZED!:{}[{}x{}] --> {}x{}".format(filename, before_x, before_y, x, y)
#Lauf
main()
#Generierung von GIF-Animationen
cmd = "convert -layers optimize -loop 0 -delay 60 {}/output/*.* {}/lgtm.gif".format(BASE_DIR, BASE_DIR)
output = commands.getoutput(cmd)
print output
Ausführungsergebnis
>>>python ./lgtm.py
RESIZED!:P1050400.JPG[4592x3448] --> 400x300
RESIZED!:P1050401.JPG[4592x3448] --> 400x300
RESIZED!:P1050402.JPG[4592x3448] --> 400x300
RESIZED!:P1050403.JPG[4592x3448] --> 400x300
RESIZED!:P1050404.JPG[4592x3448] --> 400x300
RESIZED!:P1050405.JPG[4592x3448] --> 400x300
RESIZED!:P1050406.JPG[4592x3448] --> 400x300
sample
$ ffmpeg -i [INPUT_FILE] -f image2 -vcodec png -r 4 "./%03d.png "
-Ich gebe Datei
-f Format
-vcodec codec
-r Anzahl der Bilder pro Sekunde
%03d 3-stellige Nummer
Die, die ich oft mit ffmpeg verwende
Recommended Posts