[PYTHON] Erstellen Sie eine GIF-Animation mit Ordnerüberwachung

Warum GIF-Animation?

Wenn Sie eine Smartphone-App oder ein Front-End entwickeln, möchten Sie möglicherweise ein Video zu Problemen und Pull-Anforderungen auf Github veröffentlichen. Das Hochladen von Videodateien wie mp4 wird jedoch nicht unterstützt. Ich erhalte eine solche Fehlermeldung, wenn ich versuche, eine mp4-Datei hochzuladen.

Das Hochladen von GIF-Dateien wird jedoch unterstützt, und GIF verfügt über eine Animationsfunktion. Es gibt einen Kompromiss bei der Bildqualität, z. B. bis zu 256 Farben, aber Sie können ihn zum Posten von Videos verwenden.

Warum Ordnerüberwachung?

Normalerweise entwickle ich Android-Apps, aber ich fühlte mich beim aktuellen Prozess der Erstellung von GIF-Animationen ineffizient. (Der Prozess basiert auf Mac)

** Prozess 1 ** Zeichnen Sie den Bildschirm des Android-Geräts auf

  1. Klicken Sie in Android Studio unter Logcat auf die Registerkarte
  2. Überprüfen Sie, ob der Logcat des aufzuzeichnenden Terminals angezeigt wird.
  3. Klicken Sie unten links in Logcat auf die Schaltfläche "Bildschirmaufzeichnung"
  4. Klicken Sie auf die Schaltfläche "Aufnahme starten"

image.png

Informationen zur Befehlszeile finden Sie in der Ergänzung.

** Schritt 2 ** Speichern Sie die Datei im MP4-Format

  1. Wählen Sie einen Speicherordner
  2. Stellen Sie den Dateinamen nach Bedarf ein
  3. Klicken Sie auf die Schaltfläche "Speichern"

** Schritt 3 ** In das GIF-Animationsformat codieren.

Konvertieren Sie die mp4-Datei mit dem Befehl ffmepg in eine GIF-Datei. Da Github ein Limit von 10 MB für hochgeladene Bilder hat, beträgt die Breite 320px und 10fps, um die Kapazität zu verringern.

ffmpeg -i input.mp4 -vf scale=320:-1 -r 10 output.gif

** Schritt 4 ** Hochladen auf Github

Sie können GIF-Animationen hochladen, indem Sie sie in das Kommentareingabefeld von Github ziehen und dort ablegen.

github.gif

Effizienz

Wenn Sie den Ordner überwachen, kann der Vorgang --- Das Speichern von Dateien als Auslöser für die automatische Codierung in das GIF-Animationsformat verwendet werden, wodurch Ihre Arbeit effizienter wird.

Ordner überwachen

Ich habe ein Python-Programm wie dieses erstellt.

watch.py


import os
import time
from watchdog.events import FileSystemEventHandler
from watchdog.events import FileCreatedEvent
from watchdog.observers import Observer
from pathlib import PurePath
import subprocess
import signal


class MovieFileSystemEventHandler(FileSystemEventHandler):

    def on_any_event(self, event):
        if(type(event) == FileCreatedEvent):
            src_path = event.src_path
            pp = PurePath(src_path)
            if pp.suffix != '.gif':
                output_path = "%s/%s.gif" % (os.path.dirname(src_path), pp.stem)
                subprocess.run(['ffmpeg', '-i', event.src_path, '-vf',
                                'scale=320:-1', '-r', '10', output_path])


exit_flag = False


def handle_exit(sig, frame):
    global exit_flag
    exit_flag = True


signal.signal(signal.SIGINT, handle_exit)
signal.signal(signal.SIGTERM, handle_exit)


path = "%s/movie" % os.environ['HOME']
event_handler = MovieFileSystemEventHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
while exit_flag == False:
    time.sleep(1)

observer.stop()
observer.join()

Dieses Programm verwendet eine Bibliothek namens Watchdog. Installieren Sie sie daher mit dem Befehl pip.

pip install watchdog

Dieses Programm überwacht auch ~ / movie und speichert die codierte GIF-Animation am selben Ort. Wenn Sie jedoch einen anderen Ordner bevorzugen, schreiben Sie diesen Teil nach Ihren Wünschen neu.

path = "%s/movie" % os.environ['HOME']

Erstellen Sie einen Überwachungsordner.

mkdir ~/movie

Führen Sie das Python-Programm aus. Es wird ein Resident-Programm sein.

python watchdog.py

Dadurch wird der Ordner überwacht. Wenn die Videodatei im Überwachungsordner gespeichert wird, wird automatisch eine gleichnamige GIF-Animationsdatei generiert.

watch.gif

Um den Bewohner zu beenden, drücken Sie Strg + C auf der Konsole.

Ergänzung

Installieren Sie ffmpeg

Sie können es mit Brew installieren.

brew install ffmpeg

Nehmen Sie den Android-Bildschirm über die Befehlszeile auf

adb shell
adb /mnt/sdcard
#Starte die Aufnahme
screenrecord output.mp4
# Ctrl +Beenden Sie die Aufnahme mit C.
exit
adb pull /mnt/sdcard/output.mp4

Vorsichtsmaßnahmen bei der Konvertierung in Docker

Eine Docker-Konvertierung ist ebenfalls möglich. Es gibt jedoch Fälle, in denen es nicht richtig funktioniert. Das direkte Speichern von Android Studio in das Überwachungsverzeichnis ist in Ordnung, aber das Verschieben aus einem anderen Ordner hat nicht ordnungsgemäß funktioniert.

FROM python:3.7-alpine
WORKDIR /root/
RUN apk add --update --no-cache ffmpeg
RUN pip install watchdog
COPY watch.py .
CMD python watch.py

docker-compose.yml


version: '3'
services:
    main:
        build: .
        volumes:
            - ~/movie:/root/movie

Bauen und ausführen.

docker-compose build
docker-compose up

Details zu Fällen, die nicht richtig funktionieren

class MovieFileSystemEventHandler(FileSystemEventHandler):

    def on_any_event(self, event):
        # type(event)Bestätigen

Wenn ich eine Datei aus einem anderen Ordner in einen überwachten Ordner verschoben habe, habe ich ein FileModifiedEvent anstelle eines FileCreatedEvent erhalten. Ich wollte das Video auch mit FileModifiedEvent in eine GIF-Animation konvertieren, aber beim Kopieren aus einem anderen Ordner tritt FileModifiedEvent nach FileCreatedEvent auf, und ich dachte, es wäre schwierig, einen geeigneten Trigger zu erstellen.

Recommended Posts

Erstellen Sie eine GIF-Animation mit Ordnerüberwachung
Erstellen Sie mit matplotlib eine GIF-Animation aus einer Seriennummerndatei
Stellen Sie ein Überwachungsgerät mit einem Infrarotsensor her
[Python] Ordnerüberwachung mit Watchdog
Machen Sie eine Lotterie mit Python
Machen Sie ein Feuer mit kdeplot
Lassen Sie uns eine GUI mit Python erstellen.
[IOS] Zerlegen Sie die GIF-Animation mit Pythonista3.
Erstellen Sie ein Empfehlungssystem mit Python
Machen Sie einen Filter mit einer Django-Vorlage
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Erstellen Sie mit PySide einen Modelliterator
Machen Sie eine schöne Grafik mit Plotly
Einfache Animation mit matplotlib (mp4, gif)
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Erstellen Sie einen Videoplayer mit PySimpleGUI + OpenCV
Erstellen Sie mit Python eine GIF-Animation für ASCII-Grafiken
Machen Sie einen seltenen Gacha-Simulator mit Flask
Erstellen Sie eine Notebook-Pipeline mit Kedro + Papermill
Machen Sie mit matplotlib eine teilweise gezoomte Figur
Erstellen Sie einen Kaskadenklassifizierer mit Google Colaboratory
Lassen Sie uns mit PLY 1 eine einfache Sprache erstellen
Machen Sie eine Logikschaltung mit Perceptron (Multilayer Perceptron)
Machen Sie Ja Nein Popup mit Kivy
Machen Sie einen Waschtrocknungs-Timer mit Raspberry Pi
Erstellen Sie ein Webframework mit Python! (1)
Machen wir mit Pylearn 2 eine dreiäugige KI
Erstellen Sie eine Desktop-App mit Python mit Electron
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Ein Memorandum, um WebDAV nur mit Nginx zu erstellen
Machen Sie Twitter Trend Bot mit Heroku + Python
Erstellen Sie mit Flask einen einfachen Punktbildgenerator
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
Ich möchte ein Spiel mit Python machen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Animation mit matplotlib
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Animation mit matplotlib
Mit Monitoring gewinnen
Machen Sie Urlaubsdaten mit Pandas zu einem Datenrahmen
Erstellen Sie mit Amazon Lex einen LINE WORKS-Bot
(Memorandum) Erstellen Sie mit matplodlib ein 3D-Streudiagramm
Kombinieren Sie sich wiederholende Zeichenfolgen mit regulären Python-Ausdrücken zu einer.
Machen Sie mit LINE + Flask einen morphologischen Analyse-Bot
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
[Übung] Erstellen Sie eine Watson-App mit Python! # 2 [Übersetzungsfunktion]
[Übung] Erstellen Sie eine Watson-App mit Python! # 1 [Sprachdiskriminierung]
Erstellen Sie einen einfachen Slackbot mit einer interaktiven Schaltfläche in Python
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Wie man ein Schießspiel mit toio macht (Teil 1)
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Machen Sie mit Python einen Haltepunkt auf der c-Ebene
Erstellen Sie mit OpenCV eine Funktion zum Beschreiben japanischer Schriftarten
Lassen Sie uns das Abhängigkeitsmanagement mit pip etwas einfacher machen
Erstellen Sie mit Python Pandas Py Installer ein CSV-Formatierungswerkzeug