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.
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
Informationen zur Befehlszeile finden Sie in der Ergänzung.
** Schritt 2 ** Speichern Sie die Datei im MP4-Format
** 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.
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.
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.
Um den Bewohner zu beenden, drücken Sie Strg + C auf der Konsole.
Sie können es mit Brew installieren.
brew install ffmpeg
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
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
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