Table des matières
GreenScreenVideotoAlphaPNGs : Un pipeline d’images transparentes
GreenScreenVideotoAlphaPNGs sépare acquisition vidéo, extraction des images et suppression du fond de l’encodage final. Les PNG RGBA servent de sortie intermédiaire vers un GIF ou une vidéo avec canal alpha.
- Langages
- 5Répartition du code
- Composants documentés
- 2Explorer les modules
- Documents source
- 1Lire les instructions
Langages du dépôtC++ 57.96%5
Parts calculées à partir des octets GitHub Linguist.
| Langage | % | Octets |
|---|---|---|
| C++ | 41 566 | |
| Python | 23 177 | |
| JavaScript | 5 687 | |
| PowerShell | 673 | |
| Shell | 610 |
1. Aperçu
1.1. Pourquoi il existe
Pipeline de traitement OpenCV convertissant des vidéos fond vert en séquences PNG avec canal alpha.
1.2. Cas d’usage
Préparation d'assets d'animation 2D pour la réalité augmentée.
2. Cas d’utilisation
Un outil Python qui transforme une vidéo sur fond vert en PNG transparents, GIF ou .mov alpha pour Lens Studio.
- Télécharger une vidéo par URL
- Créateur de filtres ARYouTube (yt-dlp)
greenscreen convert accepte une URL YouTube ; convert.py appelle download_video() et download_audio() de download.py, qui s’appuient sur yt-dlp.
- Découper la vidéo en images
- Créateur de filtres ARffmpeg
frames.py écrit des PNG numérotés (0.png, 1.png…) avec ffmpeg, ou avec OpenCV si l’option --no-ffmpeg est donnée.
- Retirer le fond vert
- Créateur de filtres AR
chroma.py calcule une distance YCbCr à la couleur clé (pixel 1,1 par défaut, tolérance 50–130) et écrit des PNG RVBA dans un dossier voisin *_alpha.
- Créer un GIF transparent
- Créateur de filtres ARffmpeg
greenscreen gif <dossier> utilise par défaut numpngw et l’extension facultative APNGLib, ou une palette ffmpeg avec --fast-ffmpeg ; le GIF est écrit à côté du dossier.
- Encoder un .mov avec alpha
- Créateur de filtres ARffmpeg
greenscreen video <dossier> --fps 30 encode la séquence en Videogen-<horodatage>.mov avec le codec qtrle ou prores_4444.
2.1. Scénario : D’un clip sur fond vert à une animation Lens Studio
- Lancer bash install.sh (ou .\install.ps1 sous Windows), puis uv run greenscreen --help.
- Lancer uv run greenscreen convert clip.mp4 pour extraire les images dans clip/ et les images détourées dans clip_alpha/.
- Les fichiers qui commencent par le nom du clip sont déplacés dans project_clip/, sauf avec --no-project-dir.
- Lancer uv run greenscreen gif project_clip/clip_alpha --fast-ffmpeg pour obtenir un GIF transparent sans APNGLib.
- Dans Lens Studio, passer par Resources → Add New → 2D animation from files et choisir les PNG *_alpha.
Fichiers consultésREADME.mdpyproject.tomlsrc/greenscreen/cli.pysrc/greenscreen/convert.pysrc/greenscreen/chroma.pysrc/greenscreen/frames.pysrc/greenscreen/gif_pipeline.pysrc/greenscreen/video_pipeline.py
3. Démarrage
Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.
.\install.ps1
uv run greenscreen --helpbash install.sh
uv run greenscreen --help$env:SKIP_APNGLIB='1'; uv sync --extra dev$env:SKIP_APNGLIB='0'; uv sync --extra dev4. Références du dépôt
Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.
Prérequis et premier essai
4.1. Quick start (uv)
README.md
4.2. Prerequisites
README.md
- Python 3.12+ (repo pins .python-version to 3.12 for uv).
- ffmpeg on PATH for fast frame extract and for gif –fast-ffmpeg / video. A fallback binary can come from imageio-ffmpeg if PATH has no ffmpeg.
Configuration et utilisation
4.3. CLI
README.md
Legacy entry points still work and forward to the same CLI:
- python GreenVideotoAlphaPNGs.py → greenscreen convert
- python GIFGenerator.py → greenscreen gif
- python VideoGenerator.py → greenscreen video
5. Fonctions et composants 2
- Étape de conversion
- La commande Typer convert délègue à run_convert. Elle accepte une vidéo locale ou un lien et peut privilégier FFmpeg ou imposer OpenCV. Le module chroma traite la transparence séparément de l’acquisition.
- Choix d’encodage
- gif et video prennent un dossier de PNG. Le GIF propose une palette FFmpeg; video accepte qtrle ou prores_4444. Cette étape permet de changer cadence et format sans recommencer l’acquisition.
6. Architecture
Ouvrez un composant pour suivre ses connexions, ou explorez le diagramme complet.
Vidéo ou lien
Extraction des images
- Depuis Vidéo ou lien
- Vers Suppression du fond
Suppression du fond
- Depuis Extraction des images
- Vers Séquence PNG RGBA
Séquence PNG RGBA
- Depuis Suppression du fond
- Vers Encodeur GIF
- Vers Encodeur vidéo alpha
Encodeur GIF
- Depuis Séquence PNG RGBA
Encodeur vidéo alpha
- Depuis Séquence PNG RGBA
Mermaid Diagramme interactif
Vue générale des composants et des échanges vérifiés dans le dépôt.

flowchart LR
n0["Vidéo ou lien"]
n1["Extraction des images"]
n2["Suppression du fond"]
n3["Séquence PNG RGBA"]
n4["Encodeur GIF"]
n5["Encodeur vidéo alpha"]
n0 --> n1
n1 --> n2
n2 --> n3
n3 --> n4
n3 --> n5
Version texte du diagramme
- Vidéo ou lien → Extraction des images
- Extraction des images → Suppression du fond
- Suppression du fond → Séquence PNG RGBA
- Séquence PNG RGBA → Encodeur GIF
- Séquence PNG RGBA → Encodeur vidéo alpha
Suivre un parcours dans le code
Suivez cmd_convert vers run_convert, puis utilisez ses PNG dans cmd_video. Conserver ces images permet d’inspecter les contours de transparence avant que la compression les masque.
7. Dossier technique
Établi à partir du code au commit b487e51 (22 fichiers). Chaque élément vient d’une correspondance de motif dans le code: ouvrez le fichier lié avant de vous y fier.
7.1. Couches et modules
Les dossiers sont classés par couche selon leur nom, de l’interface utilisateur jusqu’à l’accès aux données. Comme le classement repose sur les noms seulement, le diagramme ne dit rien des appels entre couches.
Mermaid Vue en couches
flowchart TB
subgraph L_interface["Points d’entrée et API"]
direction TB
interface_0["greenscreen<br/>1 fichier"]
end
subgraph L_application["Services applicatifs"]
direction TB
application_0["TemplatesCutout/Public<br/>4 fichiers"]
application_1["greenscreen<br/>2 fichiers"]
end
subgraph L_infrastructure["Données et infrastructure"]
direction TB
infrastructure_0["APNGLib_fix<br/>1 fichier"]
infrastructure_1["APNGLib_fix/APNGLib<br/>1 fichier"]
end
subgraph L_core["Source principale"]
direction TB
core_0["(root)<br/>6 fichiers"]
core_1["greenscreen<br/>6 fichiers"]
end
subgraph L_tests["Tests"]
direction TB
tests_0["tests<br/>2 fichiers"]
end
L_interface ~~~ L_application
L_application ~~~ L_infrastructure
L_infrastructure ~~~ L_core
L_core ~~~ L_tests
| Module | Couche | Fichiers | Types | Extensions |
|---|---|---|---|---|
greenscreen | Source principale | 9 | 0 | .py |
(root) | Source principale | 6 | 0 | .py .ps1 .sh |
TemplatesCutout/Public | Services applicatifs | 4 | 0 | .js |
APNGLib_fix | Données et infrastructure | 1 | 0 | .py |
APNGLib_fix/APNGLib | Données et infrastructure | 1 | 2 | .cpp |
7.2. Modèle C4
Du contexte du système aux déclarations du code. Chaque niveau conserve les limites des sources disponibles.
UML 1 · Contexte du système
La vue C4 la plus large : qui utilise le projet et sur quels systèmes et stockages externes il s’appuie. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
Person(P_cli, "Utilisateur CLI")
System(SYS, "GreenScreenVideotoAlphaPNGs", "GreenScreenVideotoAlphaPNGs sépare acquisition vidéo, extraction des …")
Rel(P_cli, SYS, "Utilise")
@enduml
UML 2 · Conteneurs
Un niveau plus près : les parties qui s’exécutent séparément dans le projet, leur langage principal et le chemin des appels entre elles. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Container>
LAYOUT_LEFT_RIGHT()
Person(P_cli, "Utilisateur CLI")
System_Boundary(SYS, "GreenScreenVideotoAlphaPNGs") {
Container(APP, "GreenScreenVideotoAlphaPNGs", "Python")
}
Rel(P_cli, APP, "Utilise")
@enduml
UML 3 · Composants et couches
Modules regroupés par couche du code. Les limites indiquent l’organisation, sans affirmer une isolation à l’exécution ni des appels. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "GreenScreenVideotoAlphaPNGs") {
Boundary(L0, "Points d’entrée et API", "layer") {
Component(M0_0, "greenscreen", "Python", "1 fichiers")
}
Boundary(L1, "Services applicatifs", "layer") {
Component(M1_0, "TemplatesCutout/Public", "JavaScript", "4 fichiers")
Component(M1_1, "greenscreen", "Python", "2 fichiers")
}
Boundary(L2, "Données et infrastructure", "layer") {
Component(M2_0, "APNGLib_fix", "Python", "1 fichiers")
Component(M2_1, "APNGLib_fix/APNGLib", "C++", "1 fichiers")
}
Boundary(L3, "Source principale", "layer") {
Component(M3_0, "(root)", "Python, .ps1, .sh", "6 fichiers")
Component(M3_1, "greenscreen", "Python", "6 fichiers")
}
Boundary(L4, "Tests", "layer") {
Component(M4_0, "tests", "Python", "2 fichiers")
}
}
@enduml
UML 4 · Code
Déclarations, champs et méthodes sélectionnés, regroupés par fichier source. Aucun héritage ni appel n’est déduit. Rendu avec uml-mcp.
Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
top to bottom direction
hide empty members
package "GreenScreenVideotoAlphaPNGs" {
package "lib/APNGLib_fix/APNGLib/APNGLib.cpp" as F0 {
class "APNGFrame" as T0_0 {
}
class "CHUNK" as T0_1 {
}
}
object "src/greenscreen/gif_pipeline.py" as FN0 {
_list_pngs()
create_gif_apnglib()
create_gif_ffmpeg()
create_gif()
}
object "src/greenscreen/cli.py" as FN1 {
cmd_convert()
cmd_gif()
cmd_video()
}
object "src/greenscreen/chroma.py" as FN2 {
_alpha_from_cb_cr()
green_screen_rgba()
remove_green_dir()
}
object "src/greenscreen/convert.py" as FN3 {
_is_probably_url()
run_convert()
}
object "src/greenscreen/download.py" as FN4 {
video_title()
download_video()
_hook()
download_audio()
_hook()
}
}
@enduml
7.3. Interface publique
Du code extérieur peut utiliser tout ce qui est listé ici. Le projet déclare aussi 2 types publics.
UML Cas d’utilisation
Chaque acteur est un type d’appelant, relié à ce qu’il peut demander au projet. Rendu avec uml-mcp.
Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
left to right direction
actor "Utilisateur CLI" as A_cli
rectangle "GreenScreenVideotoAlphaPNGs" {
usecase "Commande convert" as U0
usecase "Commande gif" as U1
usecase "Commande video" as U2
}
A_cli --> U0
A_cli --> U1
A_cli --> U2
@enduml
Ligne de commande 3
Points d’entrée
greenscreenscript consolegreenscreen.cli:apppyproject.toml
7.4. Interface privée
Ces noms sont internes selon les conventions du langage: tiret bas initial, private, static ou pub(crate).
- Assistant préfixé _
- 8
- Fonction static (locale au fichier)
- 2
APNGLib_Decompilelib/APNGLib_fix/APNGLib/APNGLib.cpp:1320APNGLib_MakeGIFlib/APNGLib_fix/APNGLib/APNGLib.cpp:1357_librarieslib/APNGLib_fix/setup.py:21_extension_librariessetup.py:13_ext_modulessetup.py:20
7.5. Entités et modèle de données 2
Mermaid Diagramme de classes des entités
classDiagram
direction LR
class E0["APNGFrame"] {
}
class E1["CHUNK"] {
}
Une flèche relie un champ à l’entité que son type nomme.
7.6. Logique métier
Aucune classe n’a été extraite. Voici les plus gros fichiers source et leurs fonctions.
lib/APNGLib_fix/APNGLib/APNGLib.cpp- Aucune fonction nommée.
src/greenscreen/gif_pipeline.py_list_pngs, create_gif_apnglib, create_gif_ffmpeg, create_gifsrc/greenscreen/cli.pycmd_convert, cmd_gif, cmd_videosrc/greenscreen/chroma.py_alpha_from_cb_cr, green_screen_rgba, remove_green_dirsrc/greenscreen/convert.py_is_probably_url, run_convertsrc/greenscreen/download.pyvideo_title, download_video, _hook, download_audio, _hook
7.7. Stack et dépendances
Dépendances externes
14 paquets déclarés (11 à l’exécution, 3 pour le développement) dans pyproject.toml.
Tableau des paquets 14
| Paquet | Version | Usage | Rôle | Registre |
|---|---|---|---|---|
typer | >=0.12 | exécution | Ligne de commande | pypi.org |
rich | >=13.7 | exécution | Ligne de commande | pypi.org |
tqdm | >=4.66 | exécution | Ligne de commande | pypi.org |
pillow | >=10.0 | exécution | Graphisme, image et 3D | pypi.org |
numpy | >=1.26 | exécution | Analyse de données | pypi.org |
opencv-python | >=4.9 | exécution | Graphisme, image et 3D | pypi.org |
natsort | >=8.4 | exécution | Simple yet flexible natural sorting in Python. | pypi.org |
imageio | >=2.33 | exécution | Graphisme, image et 3D | pypi.org |
imageio-ffmpeg | >=0.4.9 | exécution | Graphisme, image et 3D | pypi.org |
numpngw | >=0.1.2 | exécution | Write numpy array(s) to a PNG or animated PNG file. | pypi.org |
yt-dlp | >=2024.1 | exécution | A feature-rich command-line audio/video downloader | pypi.org |
pytest | >=8.0 | développement | Tests | pypi.org |
pytest-cov | >=4.1 | développement | Tests | pypi.org |
ruff | >=0.8 | développement | Analyse et formatage | pypi.org |
7.8. Pipeline CI/CD
Aucun pipeline CI/CD dans le dépôt. Le code se construit et se lance à la main, comme décrit plus haut.
7.9. Déploiement
Mermaid Schéma de déploiement
flowchart LR
repo[("Dépôt GitHub")]
local["Poste local<br/>Python"]
repo -->|"cloner et lancer"| local
Le dépôt ne contient ni Dockerfile, ni fichier Compose, ni configuration d’hébergement : le code s’exécute sur le poste qui le clone.
7.10. Sécurité
Chaîne d’approvisionnement
Variables d’environnement 1
La page reprend les noms sans leurs valeurs et souligne ceux qui ressemblent à des secrets.
7.11. Tests automatisés
- Fichiers de test
- 2
- Fichiers source
- 21
- Cas de test, environ
- 3
- Tests unitaires
- 2
Couverture de code
Aucun rapport chiffré de couverture dans les sources analysées.
Où sont les tests
tests 2
Rien trouvé pour: Services, Base de données, Intégrations externes, Supervision.
8. Types et structure des fichiers
2 types déclarés, dont 2 dans l’aperçu des relations de base.
Diagramme des types
classDiagram
direction TB
class t6f7d26235a07["CHUNK"] {
<<struct>>
}
class t05c53bd05b93["APNGFrame"] {
<<struct>>
}
Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.
9. Référence
21 / 21 fichiers admissibles lus (45 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.
Ce que couvre l’analyse
Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.
Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.
11. Fichiers à lire 3
12. Glossaire
Dépôt
Les fichiers source, la configuration et l’historique versionné d’un projet.
README
Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.
Dépendance
Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.
Interface en ligne de commande
Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.
Compilation
Les étapes qui transforment les sources et dépendances en programme exécutable ou en livrable distribuable.
Décodeur vidéo
Un composant qui reconstruit des images à partir d’un flux vidéo compressé. Le décodage et l’affichage sont des étapes distinctes.
13. Références
- antoinebou12. (2026, 5 novembre). GreenScreenVideotoAlphaPNGs. [Software repository] github.com.
- antoinebou12. (2026, 5 novembre). GreenScreenVideotoAlphaPNGs: README. [Repository documentation] github.com.
- antoinebou12. (2026, 5 novembre). src/greenscreen/cli.py. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). src/greenscreen/chroma.py. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). src/greenscreen/video_pipeline.py. [Source file] github.com.
- Boucher, A. (2026, 23 octobre). GreenScreenVideotoAlphaPNGs : Un pipeline d’images transparentes. [Project article] antoineboucher.info.
Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.