Si vous développez une application pour smartphone ou un frontal, vous souhaiterez peut-être publier une vidéo sur les problèmes et les demandes d'extraction sur Github. Cependant, il ne prend pas en charge le téléchargement de fichiers vidéo tels que mp4. J'obtiens une erreur comme celle-ci lorsque j'essaye de télécharger un fichier mp4.
Cependant, il prend en charge le téléchargement de fichiers GIF et GIF a une fonction d'animation. Il y a un compromis en matière de qualité d'image, comme jusqu'à 256 couleurs, mais vous pouvez l'utiliser pour publier des vidéos.
Je développe généralement des applications Android, mais je me sentais inefficace dans le processus actuel de création d'animation GIF. (Le processus est basé sur Mac)
** Processus 1 ** Enregistrez l'écran de l'appareil Android
Pour la section de ligne de commande, voir le supplément.
** Étape 2 ** Enregistrez le fichier au format mp4
** Étape 3 ** Encodez au format d'animation GIF.
Convertissez le fichier mp4 en fichier gif avec la commande ffmepg. Étant donné que Github a une limite de 10 Mo pour les images téléchargées, la largeur est de 320 pixels et 10 ips pour réduire la capacité.
ffmpeg -i input.mp4 -vf scale=320:-1 -r 10 output.gif
** Étape 4 ** Importez sur Github
Vous pouvez télécharger une animation GIF en la faisant glisser et en la déposant dans le champ de saisie des commentaires de Github.
Si vous surveillez le dossier, vous pouvez rationaliser votre travail en encodant automatiquement le processus - format d'animation GIF avec le fichier enregistré comme déclencheur.
J'ai créé un programme Python comme celui-ci.
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()
Ce programme utilise une bibliothèque appelée Watchdog, donc installez-le avec la commande pip.
pip install watchdog
Ce programme surveille également ~ / movie et enregistre l'animation gif encodée au même endroit, mais si vous préférez un dossier différent, réécrivez cette partie comme vous le souhaitez.
path = "%s/movie" % os.environ['HOME']
Créez un dossier de surveillance.
mkdir ~/movie
Exécutez le programme Python. Ce sera un programme pour les résidents.
python watchdog.py
Cela surveillera le dossier. Si le fichier vidéo est enregistré dans le dossier de surveillance, un fichier d'animation gif avec le même nom sera automatiquement généré.
Pour mettre fin au résident, appuyez sur Ctrl + C sur la console.
Vous pouvez l'installer à l'aide de brew.
brew install ffmpeg
adb shell
adb /mnt/sdcard
#Commencer l'enregistrement
screenrecord output.mp4
# Ctrl +Terminer l'enregistrement avec C
exit
adb pull /mnt/sdcard/output.mp4
La conversion Docker est également possible. Cependant, dans certains cas, cela ne fonctionne pas correctement. L'enregistrement directement depuis Android Studio dans le répertoire de surveillance est bien, mais le déplacement d'un autre dossier ne fonctionnait pas correctement.
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
Construisez et exécutez.
docker-compose build
docker-compose up
class MovieFileSystemEventHandler(FileSystemEventHandler):
def on_any_event(self, event):
# type(event)Confirmer
Lorsque j'ai déplacé un fichier d'un autre dossier vers un dossier surveillé, j'ai obtenu un FileModifiedEvent au lieu d'un FileCreatedEvent. Je voulais également convertir la vidéo en animation GIF avec FileModifiedEvent, mais lors de la copie à partir d'un autre dossier, FileModifiedEvent se produit après FileCreatedEvent, et j'ai pensé qu'il serait difficile de créer un déclencheur approprié.
Recommended Posts