████████╗██╗███╗ ██╗██╗ ██╗ ███████╗ ██████╗██████╗ ██╗██████╗ ████████╗███████╗
╚══██╔══╝██║████╗ ██║╚██╗ ██╔╝ ██╔════╝██╔════╝██╔══██╗██║██╔══██╗╚══██╔══╝██╔════╝
██║ ██║██╔██╗ ██║ ╚████╔╝ ███████╗██║ ██████╔╝██║██████╔╝ ██║ ███████╗
██║ ██║██║╚██╗██║ ╚██╔╝ ╚════██║██║ ██╔══██╗██║██╔═══╝ ██║ ╚════██║
██║ ██║██║ ╚████║ ██║ ███████║╚██████╗██║ ██║██║██║ ██║ ███████║
╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ╚══════╝
Here are multiple random useful scripts for able to be integrated in other script or be used as it is. In the different folder I will insert some informations relative to the use of these scripts.
If you don't find a script you've downloaded here in the past, there is great chances that it has is own repository in my main page.
This repository is released under the MIT License. Please see the LICENSE
file for more information.
If you have any questions or need support, please feel free to open an issue or join my twitter.
Discover more mini scripts for 3D artists user-friendly:
(French) Tutorials and scripts to configure servers / install OS from 0, I recommends noobs to start from Ubuntu tutorial , or learn bash script first for other branches.
The following note is in french it's a part of a bigger memory helper for ffmpeg, all and nothing ,...
I'm dropping this here to save it / if someones needs 👇 👇 👇
_____ _____ _____ _____
/\ \ /\ \ /\ \ /\ \
/::\____\ /::\ \ /::\ \ /::\____\
/:::/ / /::::\ \ /::::\ \ /:::/ /
/:::/ _/___ /::::::\ \ /::::::\ \ /:::/ /
/:::/ /\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/ /
/:::/ /::\____\ /:::/__\:::\ \ /:::/__\:::\ \ /:::/____/
/:::/ /:::/ / /::::\ \:::\ \ \:::\ \:::\ \ /::::\ \
/:::/ /:::/ _/___ /::::::\ \:::\ \ ___\:::\ \:::\ \ /::::::\ \ _____
/:::/___/:::/ /\ \ /:::/\:::\ \:::\ \ /\ \:::\ \:::\ \ /:::/\:::\ \ /\ \
|:::| /:::/ /::\____\/:::/__\:::\ \:::\____\/::\ \:::\ \:::\____\/:::/ \:::\ /::\____\
|:::|__/:::/ /:::/ /\:::\ \:::\ \::/ /\:::\ \:::\ \::/ /\::/ \:::\ /:::/ /
\:::\/:::/ /:::/ / \:::\ \:::\ \/____/ \:::\ \:::\ \/____/ \/____/ \:::\/:::/ /
\::::::/ /:::/ / \:::\ \:::\ \ \:::\ \:::\ \ \::::::/ /
\::::/___/:::/ / \:::\ \:::\____\ \:::\ \:::\____\ \::::/ /
\:::\__/:::/ / \:::\ \::/ / \:::\ /:::/ / /:::/ /
\::::::::/ / \:::\ \/____/ \:::\/:::/ / /:::/ /
\::::::/ / \:::\ \ \::::::/ / /:::/ /
\::::/ / \:::\____\ \::::/ / /:::/ /
\::/ / \::/ / \::/ / \::/ /
\/____/ \/____/ \/____/ \/____/
└--> CREATIONS : https://www.youtube.com/channel/UCffuj1MEaD6Ga5beTRa525A
└--> STREAMING : https://www.twitch.tv/9secret9guest9
└--> PROGRAMMES : https://sourceforge.net/u/secret-guest/profile
Un logiciel regroupant ces commandes au travers d'une interface visuelle devrait voir le jour sous peu, quand j'aurai le temps de taffer dessus.
██████╗██████╗ ███████╗ █████╗ ████████╗██╗ ██████╗ ███╗ ██╗
██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██║██╔═══██╗████╗ ██║
██║ ██████╔╝█████╗ ███████║ ██║ ██║██║ ██║██╔██╗ ██║
██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██║██║ ██║██║╚██╗██║
╚██████╗██║ ██║███████╗██║ ██║ ██║ ██║╚██████╔╝██║ ╚████║
╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝
-------------------------------------------
| |
| CETTE NOTE COMPORTENT PLUSIEURS LIGNES |
| |
| DE COMMANDES UTILES ET PRATIQUES A |
| |
|L'UTILISATION DE FRAMEWORK TELS QU'FFMPEG|
| |
| ( https://ffmpeg.org/download.html ) |
| |
| IL FAUT SAVOIR QU'FFMPEG EST |
| |
|REGULIEREMENT MIS A JOUR, DONC CERTAINES |
| |
| COMMANDES PEUVENT NE PLUS FONCTIONNER |
| |
| |
-------------------------------------------
Pourquoi utiliser FFMPEG ?
└--> Rendu ultra rapides, 0 perte de qualité.
██ ██ ██████ █████ ██
██ ██ ██ ██ ██ ██
██ ██ █████ ███████ ██
██ ██ ██ ██ ██ ██
██ ██ ██████ ██ ██ ██
Des exemples de prompt pour des models de stable diffusion : https://publicprompts.art/
---------------------- PROMPT EXAMPLE ----------------------
((best quality)), ((masterpiece)), ((realistic)), (detailed), ((masterpiece)), absurdres, HDR, 4k, 8k
Negative prompt: (deformed iris, deformed pupils, bad eyes, semi-realistic:1.4) (bad-image-v2-39000, bad_prompt_version2, bad-hands-5, EasyNegative, NG_DeepNegative_V1_4T, bad-artist-anime:0.7),
(worst quality, low quality:1.3), (depth of field, blurry:1.2), (greyscale, monochrome:1.1), nose, cropped, lowres, text, jpeg artifacts, signature, watermark, username, blurry, artist name, trademark,
watermark, title, multiple view, Reference sheet, long neck
() = 10% d'importance
(()) = 20% d'importance
...
1:4 = importance de 40% du mot
---------------------- Control net settings img2img ----------------------
1. resize & fill
2. dpm karas 2s
3. denoising max
4. enable
5. inpaint
6. preprocessor : inpaint_only+lama
7. Controlnet is more important
---------------------- MicroWorlds (DreamBooth model) ----------------------
baalbek temple of jupiter, in microworld render style
Trigger phrase: “microworld render style“
---------------------- App Icons Generator V1 (DreamBooth Model) ----------------------
flat couch vector, minimalist, in style of SKSKS app icon
Trigger phrase: “SKSKS app icon“
Ou avec n'importe quel model :
Tiny cute isometric LE TEXTE, soft smooth lighting, with soft colors, 100mm lens, 3d blender render, trending on polycount, modular constructivism, blue background, physically based rendering, centered
---------------------- All in one Pixel Art (DreamBooth Model) ----------------------
Godzilla, full body game asset, in pixelsprite style
Trigger phrases: “pixelsprite” & “16bitscene“
██ ███████ ███████ ██████ ██████ ███ ██ ██ ██ ███████ ██████ ███████ ██ ██████ ███ ██ ███████
██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██
██ █████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██████ ███████ ██ ██ ██ ██ ██ ██ ███████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
███████ ███████ ███████ ██████ ██████ ██ ████ ████ ███████ ██ ██ ███████ ██ ██████ ██ ████ ███████
----------------------PYTHON TO EXE----------------------
Avant toute chose, voici comment convertir un fichier python en executable avec pyinstaller :
Deja on installe pyinstaller avec :
pip install pyinstaller
Puis on lance cette commande dans le CMD :
pyinstaller --icon="" --add-data "G:\M" --noconsole Trie.py
par exemple :pyinstaller --onefile --icon=".../tireur.ico" --add-data ".../Beta 5/ico;ico" --noconsole test.py
Explications :
--onefile : crée un exécutable unique qui inclut toutes les dépendances.
--icon=icone.ico : spécifie l'icône à utiliser pour l'exécutable (remplacez icone.ico par le chemin de votre fichier d'icône).
--add-data "chemin/vers/fichier;nom_du_dossier" : ajoute des fichiers externes nécessaires au programme. Le chemin vers le fichier et le nom du dossier dans lequel le fichier sera extrait doivent être séparés par un point-virgule (;). Vous pouvez ajouter plusieurs fichiers en les séparant par des points-virgules.
script.py : spécifie le nom de votre script Python.
--noconsole : masque la console lors de l'exécution de l'exécutable.
Assurez-vous de remplacer les parties en italique par les noms de vos fichiers et dossiers. Notez également que le chemin doit être spécifié en fonction du système d'exploitation sur lequel vous travaillez.
Après avoir exécuté cette commande, vous devriez avoir un exécutable unique qui inclut toutes les dépendances, des fichiers externes et une icône personnalisée, et qui ne montre pas la console lors de l'exécution.
----------------------CONVERTIR PNG EN SVG AVEC POTRACE----------------------
Cette méthode est a approfondir et ne fonctionne pas avec toute les images :
https://www.youtube.com/watch?v=-Fs2t6P5AjY
C'est simple les png sont au format bitmap (raster graphics) et ne sont pas interchangeable avec le format vectorielle.
La seule méthode qui fonctionne a peu pret est d'utiliser potrace mais ca peut créer un glitch qui ne rendra pas comme vous voulez
par conséquent le mieux est de vectoriser sous illustrator et de supprimer le fond blanc puisque pour une image vectorielle un fond transparent
est un fond qui n'a pas de couleur, mais voici quand meme la méthode :
└--> Télécharger potrace (ici par exemple : http://potrace.sourceforge.net/ )
Une fois recus extraire simplement le fichier la ou windows lis les programmes, sur le bureau par exemple.
Ensuite il faut ouvrir le cmd et indiquer le chemin du programme, par exemple pour le bureau de l'utilisateur jean-anarchie :
PATH=%PATH%;Z:\Users\jean-anarchie\Desktop\potrace-1.16.win64
└--> Ensuite convertissez d'abord en pnm votre png car potrace ne reconnait pas les png ;
convert discord.png discord.pnm
Vous pouuvez utiliser convertio aussi :
https://convertio.co/
└--> Puis pnm en svg
potrace discord.pnm -s -o discord.svg
└--> Explications :
potrace -s => Output file est SVG
potrace -o file.svg => Ecrivez l' output en file.svg
----------------------CREER UN GIF A PARTIR D'UNE SEQUENCE D'IMAGES ----------------------
ffmpeg -i pic%04d.png -vf "fps=15,scale=800:-1:flags=lanczos" -c:v gif 0.gif
Description ;
-i 3D_wire_%05d.png: Utilise les fichiers image avec le format de nom "3D_wire_00000.png" comme entrée.
- %05d signifie un nombre à 5 chiffres, rempli de zéros si nécessaire.
-vf "fps=10,scale=320:-1:flags=lanczos": Applique un filtre vidéo pour définir le nombre d'images par seconde (FPS) à 10, redimensionne l'image avec une largeur de 320 pixels en conservant le rapport d'aspect, et utilise l'algorithme de mise à l'échelle Lanczos pour une meilleure qualité.
-c:v gif: Utilise le codec vidéo GIF pour la sortie.
0.gif: Nom du fichier GIF de sortie.
----------------------CONVERTIR UNE VIDEO AVI EN MP4----------------------
ffmpeg -i 1.avi -qscale 0 1.mp4
└--> qscale 0 = conserver la qualité
└--> Marche pour tout format de video (normalement) juste remplacer avi par mkv ou j'sais pas quoi
----------------------CONVERTIR UN RAW EN JPG----------------------
ffmpeg -y -video_size 1920x1080 -pix_fmt rgb24 -i my_image.raw -pix_fmt yuvj444p my_image.jpeg
----------------------CONVERTIR PLEINS DE FICHIER AVEC BAT----------------------
for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done
----------------------CONVERTIR UN TEXTE EN GIF----------------------
ffmpeg -i 0.txt 1.gif
----------------------CONVERTIR UNE VIDEO MP4 EN GIF----------------------
ffmpeg -i TEST.mp4 TEST.gif
└--> Et inversement (gif en mp4) :
ffmpeg -i 1.mp4 1.wav
----------------------CONVERTIR DES SONS----------------------
└--> WAV EN MP3
ffmpeg -i 2.wav -acodec libmp3lame 2.mp3
└--> OGG EN MP3
ffmpeg -i audio.ogg -acodec libmp3lame audio.mp3
└--> AC3 EN MP3
ffmpeg -i audio.ac3 -acodec libmp3lame audio.mp3
└--> AAC EN MP3
ffmpeg -i audio.aac -acodec libmp3lame audio.mp3
. . .
└--> FFMPEG NE PEUT CONVERTIR EN UN AUTRE FORMAT QUE MP3 OU WAV (oubliez donc le format midi)
---------------------- VIDEO EN MP3 ----------------------
ffmpeg -i 1.mp4 -vn -ar 44100 -ac 2 -ab 320k -f wav 1.mp3
---------------------- EXTRAIRES LES IMAGES D'UNE VIDEO ----------------------
ffmpeg -i 1.mp4 pic%04d.png
(Le framework va exporter toute les frames composant la video dans le dossier la contenant)
Pour un GIF :
ffmpeg -i input.gif output%04d.png
---------------------- SEQUENCE D'IMAGE EN VIDEO ----------------------
ffmpeg -r 30 -f image2 -s 1920x1080 -i pic%04d.png -vcodec libx264 -crf 0 -qscale 0 -pix_fmt yuv420p SBUSCRIBE.mp4
└--> Prend la liste d'images presente dans le dossier au nom de pic... (pic0001.png, pic0002.png…. etc)
└--> -r pour modifier le nombre d'images par seconde
└--> -crf pour modifier la qualité (15 - 25 = bon )
└--> -s pour la résolution
└--> -pix_fmt yuv420p le format des pixels
└--> On peut également ajouter -stream_loop 3600 au début de la commande
pour créer une boucle 3600x (mais c'est plus 20x rapide de le faire en 2x)
Pour + :
https://hamelot.io/visualization/using-ffmpeg-to-convert-a-set-of-images-into-a-video/
---------------------- IMAGE EN VIDEO ----------------------
Pour une seule image :
ffmpeg -r 1/5 -i 1.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p 1.mp4
---------------------- INVERSER ----------------------
Pour inverser le sens d'une video :
ffmpeg -i 0.mp4 -vf "reverse" 01.mp4
Pour inverser la video + l'audio :
ffmpeg -i input.mp4 -vf "reverse" -af "areverse" output.mp4
██████ ███████ ██████ ██ ██ ██ ██████ ███████ ██ █████ ████████ █████ ██ ██ ██ ███████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██████ █████ ██ ██ ██ ██ ██ ██████ █████ ██ ███████ ██ ███████ ██ ██ ██ █████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ███████ ██████ ██████ ██ ██ ██ ███████ ███████ ██ ██ ██ ██ ██ ██ ███████ ███████ ███████
---------------------- VIDEO ----------------------
ffmpeg -i 0.gif -ss 00:00:04 -codec copy -q:v 0 -t 5 01.gif
---------------------- AUDIO ----------------------
ffmpeg -i 1.mp3 -ss 00:00:00 -to 00:00:03 -c copy -q:a 0 1.wav
(Pour les 2 commandes la premiere valeur temporelle équivaut à l'heure choisie du début de la video, la seconde à la fin voulu)
███████ ███ ██ ██ ███████ ██ ██ ███████ ██████ ███████ ██████ ███ ██ ██████ ██ ██ ███████ ██████ ████████
██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██
█████ ██ ██ ██ ██ █████ ██ ██ █████ ██████ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██████ ██
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
███████ ██ ████ ███████ ███████ ████ ███████ ██ ██ ██ ██████ ██ ████ ██████ ████ ███████ ██ ██ ██
---------------------- SUPPRIMER LE FOND VERT ----------------------
ffmpeg -i 1.mp4 -filter_complex "[0:v]chromakey=0x00D800:0.15:0.1[ckout];[ckout]despill=green[out]" -map "[out]" -c:v prores -pix_fmt yuva444p10le 1.mkv -y
└--> Remplacez ...akey=0x00D800 par la valeur hexadecimale du fond que vous voulez retirer
https://www.w3schools.com/colors/colors_converter.asp
https://coolconversion.com/math/binary-octal-hexa-decimal/Convert_decimal_number_216_in_hexadecimal_
---------------------- REMPLACER LE FOND DE LA VIDEO PAR UNE IMAGE ----------------------
ffmpeg -i 1.mkv -loop 1 -i 1.jpg -t 24 -filter_complex "[1:v][0:v]overlay[out]" -map "[out]" final.mp4 -y
██████ █████ ████████ █████ ███ ███ ██████ ███████ ██ ██ ██ ███ ██ ██████
██ ██ ██ ██ ██ ██ ██ ████ ████ ██ ██ ██ ██ ██ ██ ████ ██ ██
██ ██ ███████ ██ ███████ ██ ████ ██ ██ ██ ███████ ███████ ██ ██ ██ ██ ██ ███
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██████ ██ ██ ██ ██ ██ ██ ██ ██████ ███████ ██ ██ ██ ██ ████ ██████
Le tuto fonctionne pour windows avec les commandes mkdir (creation de dossier) ou cd ( aller au dossier ), il faudra donc les remplacer pour mac.
____ ____ ____ ____ _ _ ___ _ ____ ____ ____ ___ ____ ____ _ _ _ ___ ____ ____ ____
|__| [__ [__ |___ |\/| |__] | |__| | __ |___ | \ |___ [__ | | | | \ |___ | | [__
| | ___] ___] |___ | | |__] |___ | | |__] |___ |__/ |___ ___] \/ | |__/ |___ |__| ___]
Il vaut mieux apres cela séparer l'audio de la video et le conserver a part pour le remettre à la fin.
____ ____ _ _ _ _ ____ ____ ___ _ ____ ____ _ _ _ _ ___ _ _ _ _ _ ___
| | | |\ | | | |___ |__/ | | |__/ |___ |\ | | | |__] \/ | | | | \
|___ |__| | \| \/ |___ | \ | | | \ |___ | \| |___ | |__] _/\_ \/ | |__/
└--> Il faudra convertir en libxvid pour générer les i-frames :
ffmpeg -i original_video.mp4 -vcodec libxvid -q:v 1 -g 1000 -qmin 1 -qmax 1 -flags qpel+mv4 -an -y xvid_video.avi
└--> ou si vous voulez l'interpoler et le mettre à l'échelle :
ffmpeg -i original_video.mp4 -vf minterpolate=fps=60:mi_mode=mci,scale=3*iw:3*ih -vcodec libxvid -q:v 1 -g 1000 -qmin 1 -qmax 1 -flags qpel+mv4 -an -y xvid_video.avi
L'audio est supprimé, et les I-frames seront générée entre chaques scenes comme pour la méthode avidemux 2.5.6
____ ____ ____ ____ ___ _ ____ _ _ ___ ____ ____ ___ ____ ____ ____ _ ____ ____ ____
| |__/ |___ |__| | | | | |\ | | \ |___ [__ | \ | | [__ [__ | |___ |__/ [__
|___ | \ |___ | | | | |__| | \| |__/ |___ ___] |__/ |__| ___] ___] | |___ | \ ___]
Il vaudrait mieux créer des dossiers frames et sous dossier sauvegardes (save) pour la suite :
mkdir frames
mkdir frames\save
____ _ _ ___ ____ ____ _ ____ ____ _ _ _ ____ ____ ____ ____ ___ ____ _ _ ___ ____ ____
|___ \/ | |__/ |__| | |__/ |___ | |\/| |__| | __ |___ [__ |__] |__/ | | | |___ [__
|___ _/\_ | | \ | | | | \ |___ | | | | | |__] |___ ___] |__] | \ |__| | |___ ___]
Meme methode que pour FFGLITCH, il vous faudra extraire les images raw (brutes)
ffmpeg -i xvid_video.avi -vcodec copy -start_number 0 frames\f_%04d.raw
Il y a maintenant 2 manieres de trouver les I-frames :
____ _ _ ___ ____ ____ _ ____ ____ _ ____ ____ _ _ _ ____ ____ ____ ____
|___ \/ | |__/ |__| | |__/ |___ | |___ [__ | |\/| |__| | __ |___ [__
|___ _/\_ | | \ | | | | \ |___ |___ |___ ___] | | | | | |__] |___ ___]
└--> Premiere methode : manuellement.
Extraire vers un autre dossier "images"
mkdir images
ffmpeg -i xvid_video.avi -start_number 0 images\i_%04d.jpg
Vous pouvez repérer les i-frames qui devraient être la première image de chaque nouvelles scènes.
└--> Deuxieme methode : basée sur la réponse du superutilisateur / automatiquement.
ffmpeg -i xvid_video.avi -vf select='eq(pict_type,PICT_TYPE_I)' -vsync 2 -f image2 -start_number 0 i_%04d.jpg -loglevel debug -hide_banner 2>&1|for /f "tokens=5 delims=:. " %d in ('findstr "pict_type:I"') do @echo %d
Cela créera uniquement les images des i-frames qui devraient être la première image de chaque nouvelles scènes,
puis répertorier leur numéros d'images.
-----------------------------------------------------------------
└--> Vous pouvez retourner maintenant au dossier frames:
cd frames
└--> ou pour revenir dans dossier precedent ;
cd ..
si vous etiez dans un sous dossier du dossier frame
____ _ _ ___ ___ ____ _ _ _ ____ ____ _ ____ ____ _ ____ ____ ____ _ _ ____ ____
[__ | | |__] |__] |__/ | |\/| |___ |__/ | |___ [__ | __ |___ |__/ |__| |\/| |___ [__
___] |__| | | | \ | | | |___ | \ |___ |___ ___] | | | \ | | | | |___ ___]
└--> Ne pas supprimer la premiere i-frames.
Pour chaque suppression, preferez plutot leur déplacement dans le dossier sauvegarde au cas ou vous voudriez les recup.
└--> Exemple pour la frame 0153 :
move f_0153.raw save
Si vous souhaitez conserver le nombre d'images afin qu'il se synchronise avec l'audio plus tard ;
vous devez dupliquer les frames depuis la frame suivante celles que vous supprimez :
copy f_1054.raw f_0153.raw
└--> Continuez la meme manip pour chaque fois que vous voulez faire votre datamoshing
____ ____ ____ ____ ____ _ _ _ ___ ____ ____ ____ ___ ____ ____ ___ _ ____ ___ . _ _ _ ____ ____ ____ ____
| |__/ |___ |___ |__/ | | | | \ |___ | | |__| |__] |__| |__/ | | |__/ | \ ' | |\/| |__| | __ |___ [__
|___ | \ |___ |___ | \ \/ | |__/ |___ |__| | | | | | | \ | | | \ |__/ | | | | | |__] |___ ___]
Combinez les images brutes dans un fichier vidéo (copie binaire),
en commençant par un fichier de zéro octet (NUL) (utilisez dir dans l'ordre trié, plutôt que *.raw) :
copy NUL /b final.avi
for /f %i in ('dir /on/b *.raw') do copy /b final.avi+%i final.avi
____ _ _ _ _ ___ _ ____ _ _ ____
|___ | |\ | | | | | | |\ | [__
| | | \| | | | |__| | \| ___]
Jouer la video pour voir si c'est bon, cependant, il est préférable de la convertir dans un format plus lisible,
de la redimensionner si vous l'avez agrandie et de rajouter tout audio avec lequel vous avez commencé.
ffmpeg -i final.avi -i ..\original_video.mp4 -vf scale=1280:-2 -map 0:v:0 -map 1:a:0 -vcodec h264 final.mp4
└--> Sources :
https://www.reddit.com/r/datamoshing/comments/t46x3i/datamoshing_with_ffmpeg_howto_in_comments/hywkk1q/?utm_source=reddit&utm_medium=web2x&context=3
█████ ███████ ███████ ███████ ███ ███ ██████ ██ █████ ██████ ███████ ██████ ███████ ███████ ███ ███ ███████ ██████ ██ █████ ███████
██ ██ ██ ██ ██ ████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ████ ██ ██ ██ ██ ██ ██ ██
███████ ███████ ███████ █████ ██ ████ ██ ██████ ██ ███████ ██ ███ █████ ██ ██ █████ ███████ ██ ████ ██ █████ ██ ██ ██ ███████ ███████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ███████ ███████ ███████ ██ ██ ██████ ███████ ██ ██ ██████ ███████ ██████ ███████ ███████ ██ ██ ███████ ██████ ██ ██ ██ ███████
____ ____ ____ ____ _ _ ___ _ ____ ____ ____ ____ _ _ ___ _ ____
|__| [__ [__ |___ |\/| |__] | |__| | __ |___ |__| | | | \ | | |
| | ___] ___] |___ | | |__] |___ | | |__] |___ | | |__| |__/ | |__|
--------------------- FUSIONNER DES SONS ENSEMBLES ---------------------
└--> Pour fusionner tout en gardant le son le plus long :
ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex amix=inputs=2:duration=longest output.mp3
└--> Pour fusionner completement les sons mais garder la durée la plus courte :
ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex "amerge=inputs=2,pan=stereo|c0<c0+c1|c1<c2+c3" output.mp3
└--> Pour je sais plus flemme de test :
ffmpeg -i input0.mp3 -i input1.mp3 -filter_complex amerge=inputs=2 -ac 2 output.mp3
https://askcodez.com/comment-superposition-downmix-deux-fichiers-audio-a-laide-de-ffmpeg.html
--------------------- ASSEMBLAGE AUDIO SANS CROSSFADERS----------------------
└--> Pour 40 :
ffmpeg -i "concat:1.mp3|2.mp3|3.mp3|4.mp3|5.mp3|6.mp3|7.mp3|8.mp3|9.mp3|10.mp3|11.mp3|12.mp3|13.mp3|14.mp3|15.mp3|16.mp3|17.mp3|18.mp3|19.mp3|20.mp3|21.mp3|22.mp3|23.mp3|24.mp3|25.mp3|26.mp3|27.mp3|28.mp3|29.mp3|30.mp3|31.mp3|32.mp3|33.mp3|34.mp3|35.mp3|36.mp3|37.mp3|38.mp3|39.mp3|40.mp3" -acodec copy test.wav
└--> pour 26 :
ffmpeg -i "concat:1.mp3|2.mp3|3.mp3|4.mp3|5.mp3|6.mp3|7.mp3|8.mp3|9.mp3|10.mp3|11.mp3|12.mp3|13.mp3|14.mp3|15.mp3|16.mp3|17.mp3|18.mp3|19.mp3|20.mp3|21.mp3|22.mp3|23.mp3|24.mp3|25.mp3|26.mp3" -acodec copy test.wav
└--> Pour 2 :
ffmpeg -i "concat:1.mp3|2.mp3" -acodec copy 1.wav
----------------------ASSEMBLAGE AUDIO (40) AVEC CROSSFADER (10s) :----------------------
ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -i 4.mp3 -i 5.mp3 -i 6.mp3 -i 7.mp3 -i 8.mp3 -i 9.mp3 -i 10.mp3 -i 11.mp3 -i 12.mp3 -i 13.mp3 -i 14.mp3 -i 15.mp3 -i 16.mp3 -i 17.mp3 -i 18.mp3 -i 19.mp3 -i 20.mp3 -i 21.mp3 -i 22.mp3 -i 23.mp3 -i 24.mp3 -i 25.mp3 -i 26.mp3 -i 27.mp3 -i 28.mp3 -i 29.mp3 -i 30.mp3 -i 31.mp3 -i 32.mp3 -i 33.mp3 -i 34.mp3 -i 35.mp3 -i 36.mp3 -i 37.mp3 -i 38.mp3 -i 39.mp3 -i 40.mp3 -vn -filter_complex "[00][1]acrossfade=d=10:c1=tri:c2=tri[a01];[a01][2]acrossfade=d=10:c1=tri:c2=tri[a02];[a02][3]acrossfade=d=10:c1=tri:c2=tri[a03];[a03][4]acrossfade=d=10:c1=tri:c2=tri[a04];[a04][5]acrossfade=d=10:c1=tri:c2=tri[a05];[a05][6]acrossfade=d=10:c1=tri:c2=tri[a06];[a06][7]acrossfade=d=10:c1=tri:c2=tri[a07];[a07][8]acrossfade=d=10:c1=tri:c2=tri[a08];[a08][9]acrossfade=d=10:c1=tri:c2=tri[a09];[a09][10]acrossfade=d=10:c1=tri:c2=tri[a10];[a10][11]acrossfade=d=10:c1=tri:c2=tri[a11];[a11][12]acrossfade=d=10:c1=tri:c2=tri[a12];[a12][13]acrossfade=d=10:c1=tri:c2=tri[a13];[a13][14]acrossfade=d=10:c1=tri:c2=tri[a14];[a14][15]acrossfade=d=10:c1=tri:c2=tri[a15];[a15][16]acrossfade=d=10:c1=tri:c2=tri[a16];[a16][17]acrossfade=d=10:c1=tri:c2=tri[a17];[a17][18]acrossfade=d=10:c1=tri:c2=tri[a18];[a18][19]acrossfade=d=10:c1=tri:c2=tri[a19];[a19][20]acrossfade=d=10:c1=tri:c2=tri[a20];[a20][21]acrossfade=d=10:c1=tri:c2=tri[a21];[a21][22]acrossfade=d=10:c1=tri:c2=tri[a22];[a22][23]acrossfade=d=10:c1=tri:c2=tri[a23];[a23][24]acrossfade=d=10:c1=tri:c2=tri[a24];[a24][25]acrossfade=d=10:c1=tri:c2=tri[a25];[a25][26]acrossfade=d=10:c1=tri:c2=tri[a26];[a26][27]acrossfade=d=10:c1=tri:c2=tri[a27];[a27][28]acrossfade=d=10:c1=tri:c2=tri[a28];[a28][29]acrossfade=d=10:c1=tri:c2=tri[a29];[a29][30]acrossfade=d=10:c1=tri:c2=tri[a30];[a30][31]acrossfade=d=10:c1=tri:c2=tri[a31];[a31][32]acrossfade=d=10:c1=tri:c2=tri[a32];[a32][33]acrossfade=d=10:c1=tri:c2=tri[a33];[a33][34]acrossfade=d=10:c1=tri:c2=tri[a34];[a34][35]acrossfade=d=10:c1=tri:c2=tri[a35];[a35][36]acrossfade=d=10:c1=tri:c2=tri[a36];[a36][37]acrossfade=d=10:c1=tri:c2=tri[a37];[a37][38]acrossfade=d=10:c1=tri:c2=tri[a38];[a38][39]acrossfade=d=10:c1=tri:c2=tri" mixtape.wav
└--> Pour rajouter des tracks de 1 a 10 :
ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -i 4.mp3 -i 5.mp3 -i 6.mp3 -i 7.mp3 -i 8.mp3 -i 9.mp3 -i 10.mp3
└--> Pour rajouter des tracks de 1 a 40 :
ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -i 4.mp3 -i 5.mp3 -i 6.mp3 -i 7.mp3 -i 8.mp3 -i 9.mp3 -i 10.mp3 -i 11.mp3 -i 12.mp3 -i 13.mp3 -i 14.mp3 -i 15.mp3 -i 16.mp3 -i 17.mp3 -i 18.mp3 -i 19.mp3 -i 20.mp3 -i 21.mp3 -i 22.mp3 -i 23.mp3 -i 24.mp3 -i 25.mp3 -i 26.mp3 -i 27.mp3 -i 28.mp3 -i 29.mp3 -i 30.mp3 -i 31.mp3 -i 32.mp3 -i 33.mp3 -i 34.mp3 -i 35.mp3 -i 36.mp3 -i 37.mp3 -i 38.mp3 -i 39.mp3 -i 40.mp3
└--> Pour rajouter les crossfade de 1 a 40 :
-vn -filter_complex "[00][1]acrossfade=d=10:c1=tri:c2=tri[a01];[a01][2]acrossfade=d=10:c1=tri:c2=tri[a02];[a02][3]acrossfade=d=10:c1=tri:c2=tri[a03];[a03][4]acrossfade=d=10:c1=tri:c2=tri[a04];[a04][5]acrossfade=d=10:c1=tri:c2=tri[a05];[a05][6]acrossfade=d=10:c1=tri:c2=tri[a06];[a06][7]acrossfade=d=10:c1=tri:c2=tri[a07];[a07][8]acrossfade=d=10:c1=tri:c2=tri[a08];[a08][9]acrossfade=d=10:c1=tri:c2=tri[a09];[a09][10]acrossfade=d=10:c1=tri:c2=tri
[a10];[a10][11]acrossfade=d=10:c1=tri:c2=tri[a11];[a11][12]acrossfade=d=10:c1=tri:c2=tri[a12];[a12][13]acrossfade=d=10:c1=tri:c2=tri[a13];[a13][14]acrossfade=d=10:c1=tri:c2=tri[a14];[a14][15]acrossfade=d=10:c1=tri:c2=tri[a15];[a15][16]acrossfade=d=10:c1=tri:c2=tri[a16];[a16][17]acrossfade=d=10:c1=tri:c2=tri[a17];[a17][18]acrossfade=d=10:c1=tri:c2=tri[a18];[a18][19]acrossfade=d=10:c1=tri:c2=tri[a19];[a19][20]acrossfade=d=10:c1=tri:c2=tri
[a20];[a20][21]acrossfade=d=10:c1=tri:c2=tri[a21];[a21][22]acrossfade=d=10:c1=tri:c2=tri[a22];[a22][23]acrossfade=d=10:c1=tri:c2=tri[a23];[a23][24]acrossfade=d=10:c1=tri:c2=tri[a24];[a24][25]acrossfade=d=10:c1=tri:c2=tri[a25];[a25][26]acrossfade=d=10:c1=tri:c2=tri[a26];[a26][27]acrossfade=d=10:c1=tri:c2=tri[a27];[a27][28]acrossfade=d=10:c1=tri:c2=tri[a28];[a28][29]acrossfade=d=10:c1=tri:c2=tri[a29];[a29][30]acrossfade=d=10:c1=tri:c2=tri
[a30];[a30][31]acrossfade=d=10:c1=tri:c2=tri[a31];[a31][32]acrossfade=d=10:c1=tri:c2=tri[a32];[a32][33]acrossfade=d=10:c1=tri:c2=tri[a33];[a33][34]acrossfade=d=10:c1=tri:c2=tri[a34];[a34][35]acrossfade=d=10:c1=tri:c2=tri[a35];[a35][36]acrossfade=d=10:c1=tri:c2=tri[a36];[a36][37]acrossfade=d=10:c1=tri:c2=tri[a37];[a37][38]acrossfade=d=10:c1=tri:c2=tri[a38];[a38][39]acrossfade=d=10:c1=tri:c2=tri
( Notez que l'on peut modifier la valeur du crossfader, les transitions sont basées sur 10 secondes, il suffit de modifier la valeur de 10)
└--> Pour finir :
" mixtape.wav
____ ____ ____ ____ _ _ ___ _ ____ ____ ____ _ _ _ ___ ____ ____
|__| [__ [__ |___ |\/| |__] | |__| | __ |___ | | | | \ |___ | |
| | ___] ___] |___ | | |__] |___ | | |__] |___ \/ | |__/ |___ |__|
--------------------- ASSEMBLER LES VIDEOS EN UNE SEULE ---------------------
└--> Créer un fichier texte (1.txt pour etre plus rapide)
└--> Inserez dans le fichier texte :
file 1.mp4
file 2.mp4
file 3.mp4
...
└--> puis :
ffmpeg -f concat -i 1.txt -vcodec copy -acodec copy -q:v 0 final.mp4
Si probleme de " ... This may result in incorrect timestamps in the output file." go avec ca :
le probleme vient d'un conflit d'horodatage, il faut filtrer pour que ca fonctionne mais bon ...
N'ayant pas trouvé de solutions automatiques concrete réalisez ces étapes, au moins on est sur que ca fonctionnera :
1. séparez l'audio des videos
2. assemblez les audios ensemble
3. extrayez les images de la premiere video
4. assemblez les images
5. faites ca pour toute les videos concernées
6. assemblez audios + video
----------------------SUPPRIMER L'AUDIO DU MP4 :----------------------
ffmpeg -i 1.mp4 -an -vcodec copy -q:v 0 2.mp4
____ ____ ____ ____ ___ _ ____ _ _ ___ ____ ___ ____ _ _ ____ _ ____
| |__/ |___ |__| | | | | |\ | | \ |___ |__] | | | | | | |___
|___ | \ |___ | | | | |__| | \| |__/ |___ |__] |__| |__| |___ |___ |___
ffmpeg -stream_loop 7803 -i 2.mp4 -c copy 3.mp4
( il y a 3600s dans 1h )
____ ____ ____ ____ _ _ ___ _ ____ ____ ____ ____ _ _ ___ _ ____ _ _ _ ____ _ _ ____ _
|__| [__ [__ |___ |\/| |__] | |__| | __ |___ |__| | | | \ | | | | | | [__ | | |___ |
| | ___] ___] |___ | | |__] |___ | | |__] |___ | | |__| |__/ | |__| \/ | ___] |__| |___ |___
ffmpeg -i 2.mp4 -i 1.wav -c:v copy -c:a aac -strict experimental -q:v 0 -q:a 0 FUCK.mp4
ou
ffmpeg -i 2.mp4 -i 1.wav -vcodec copy -acodec copy -q:v 0 final.mp4
ou
ffmpeg -i 1.mp4 -i 1.wav -qscale 0 finish.mp4
███████ ██████ ██████ ███ ███ █████ ████████ ██████ ███████ ███████ ██████ ██████ ████████ ██ ███████
██ ██ ██ ██ ██ ████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
█████ ██ ██ ██████ ██ ████ ██ ███████ ██ ██ ██ █████ ███████ ██ ██ ██████ ██ ██ █████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██████ ██ ██ ██ ██ ██ ██ ██ ██████ ███████ ███████ ██████ ██ ██ ██ ██ ███████
---------------------- MODIFIER LA RESOLUTION ----------------------
ffmpeg -i 1.mp4 -s 1920x1920 -c:a copy output.mp4
---------------------- COMPRESSER LE FORMAT ----------------------
ffmpeg -i 2.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 meeting2.mp4
(perdre en qualité pour le rendre plus léger)
---------------------- REDUIRE LA QUALITE D'UN GIF ----------------------
ffmpeg -y -i 1.mp4 -r 9 -s 720x440 file.gif
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠠⣀⣠⣤⣤⣤⣤⣤⣄⡠⠤⠄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠄⠒⠒⠒⠂⠂⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠈⠳⠤⢀⡀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣠⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠈⠳⡄⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡠⠒⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠘⣄⠀⠀⠀
⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀
⠀⠀⠀⢀⢖⣿⡷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀
⠀⠀⠀⢸⡾⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢇⠀
⠀⠀⠀⣴⣛⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢺⣿⣿⣿⣿⣿⣿⣿⢥⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡸⠀
⠀⠀⣾⣾⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⠽⠿⠿⠿⠿⠿⣧⣄⡈⠛⠛⠛⣛⣛⣳⣶⣶⣦⣄⡀⠀⠀⠀⠀⡎⠀⠀
⠀⠘⡿⣿⣿⣿⣿⣿⣦⣄⠀⠀⣀⣠⠤⠤⣤⣖⡺⢟⣩⠥⢒⡊⠭⠭⠝⢑⣒⠲⠤⢭⢖⣪⠭⠜⠓⢒⣒⠒⠒⢒⣛⢷⣄⠀⢀⡇⠀⠀
⠀⢀⣽⣿⣿⣿⣿⣿⣿⣿⣠⠞⠉⢀⣤⣿⡭⠷⡺⠚⠉⢩⣾⣩⡿⠻⣦⡀⠀⠀⠀⠁⠲⡠⠒⠁⠀⣴⣈⡿⠷⣦⠀⠈⠈⠙⠻⣄⠀⠀
⠀⢸⣿⣿⣿⣿⣿⡭⠟⠉⠁⠀⠀⠘⠓⠒⠲⡉⠀⠀⠀⢸⣿⣬⣷⣶⣿⡇⠀⠀⠀⠀⠈⠀⠀⠀⢸⣿⣧⣿⣶⣿⠇⠀⠀⠀⠀⣸⠀⠀
⠀⠀⠈⠓⣿⠶⠟⠁⠀⠀⠀⠀⠀⠘⠛⠂⠀⠈⠑⠠⢀⠈⢛⣿⣿⠛⠋⣀⡀⣀⠠⠐⠂⠀⢀⣀⠀⠙⠻⠿⢿⣍⡀⠤⠤⠒⢊⡍⠀⠀
⠀⠀⠀⡴⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⢠⣄⣤⣾⣿⣷⣤⠀⠀⠀⠀⠀⠀⣀⡤⡎⠀⠀⠀
⠀⠀⡸⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡤⠤⠶⠦⢤⣤⣀⠀⠀⢠⣿⣿⣿⣤⣿⣿⣿⣿⣇⣀⣀⣤⢶⠛⠁⢀⡏⠀⠀⠀
⠀⢰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣅⡀⠐⠦⣤⣤⣀⣈⠉⠙⠻⣿⣿⣿⣿⣿⣿⣿⡿⠉⠀⢀⣀⣠⣤⠴⢻⠀⠀⠀⠀
⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠳⠶⢤⣄⣉⠉⠛⠛⠛⠻⠻⣿⣿⣿⠿⠿⠿⠛⠛⠋⠉⠁⣀⣴⠏⠀⠀⠀⠀
⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⢦⣀⠀⠀⠀⠀⠀⠀⠈⠉⠓⠒⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠶⠒⠋⠉⡘⠀⠀⠀⠀⠀
⢀⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡇⠀⠀⠀⠀⠀
⢸⠀⠙⠦⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡔⠑⠒⠦⢤⣄⠀⠀⠀⠀⠀⠀⠀⣀⠤⠤⠤⢤⣀⣀⣀⠴⠚⠉⠀⢸⠀⠀⠀⠀⠀
⢸⠀⠀⠀⠈⠉⠛⠒⠦⠤⢤⣀⣀⣀⣀⣀⣀⣀⣰⠁⠀⠀⠀⠀⠈⠑⡤⠒⠒⢢⠖⣉⠀⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠀
⠸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠩⠇⠀⠀⠀⠧⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⢦⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⡀⠜⠒⠤⠀⠐⠒⠤⡀⠀⠀⠀⡰⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡄