82 lines
3.0 KiB
PowerShell
82 lines
3.0 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Lance gpx_video.py sur toutes les traces GPX du répertoire courant.
|
|
|
|
.DESCRIPTION
|
|
Utilise le venv .venv situé à côté de ce script (il est créé et les
|
|
dépendances de requirements.txt installées s'il n'existe pas encore).
|
|
Chaque fichier *.gpx du répertoire courant produit une ou plusieurs vidéos
|
|
MP4 du même nom : noms des villes zoomés (--zoom-villes) et découpage en
|
|
morceaux d'au plus 20 villes (--villes-par-morceau 20).
|
|
Les arguments supplémentaires sont transmis tels quels à gpx_video.py ; une
|
|
autre option de découpage (--morceaux, --duree-morceau, --villes-par-morceau)
|
|
ou --sans-villes remplace le découpage par défaut.
|
|
|
|
.EXAMPLE
|
|
.\gpx_video.ps1
|
|
.\gpx_video.ps1 --duree 90
|
|
.\gpx_video.ps1 --villes-par-morceau 10
|
|
#>
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$code = 0
|
|
|
|
try {
|
|
$racine = $PSScriptRoot
|
|
$venv = Join-Path $racine '.venv'
|
|
$python = Join-Path $venv 'Scripts\python.exe'
|
|
$script = Join-Path $racine 'gpx_video.py'
|
|
|
|
if (-not (Test-Path $python)) {
|
|
Write-Host "Création du venv dans $venv ..."
|
|
& python -m venv $venv
|
|
if ($LASTEXITCODE -ne 0) { throw "Échec de la création du venv." }
|
|
& $python -m pip install --upgrade pip
|
|
& $python -m pip install -r (Join-Path $racine 'requirements.txt')
|
|
if ($LASTEXITCODE -ne 0) { throw "Échec de l'installation des dépendances." }
|
|
}
|
|
|
|
if (-not (Get-Command ffmpeg -ErrorAction SilentlyContinue)) {
|
|
throw "ffmpeg introuvable dans le PATH."
|
|
}
|
|
|
|
$traces = @(Get-ChildItem -Path (Get-Location) -Filter '*.gpx' -File | Sort-Object Name)
|
|
if ($traces.Count -eq 0) {
|
|
throw "Aucun fichier .gpx dans $(Get-Location)."
|
|
}
|
|
|
|
# Options par défaut, placées avant celles de l'utilisateur. Le découpage
|
|
# par villes est omis si l'utilisateur en choisit un autre (options
|
|
# exclusives) ou désactive les villes.
|
|
$defaut = @('--zoom-villes')
|
|
$autreDecoupage = @($args | Where-Object {
|
|
$_ -match '^--(morceaux|duree-morceau|villes-par-morceau|sans-villes)(=|$)' })
|
|
if ($autreDecoupage.Count -eq 0) { $defaut += @('--villes-par-morceau', '20') }
|
|
|
|
$echecs = @()
|
|
$i = 0
|
|
foreach ($trace in $traces) {
|
|
$i++
|
|
Write-Host "[$i/$($traces.Count)] $($trace.Name)" -ForegroundColor Cyan
|
|
& $python $script $trace.FullName @defaut @args
|
|
if ($LASTEXITCODE -ne 0) { $echecs += $trace.Name }
|
|
}
|
|
|
|
if ($echecs.Count -gt 0) {
|
|
throw "Échec pour : $($echecs -join ', ')"
|
|
}
|
|
Write-Host "Terminé : $($traces.Count) trace(s) traitée(s)." -ForegroundColor Green
|
|
}
|
|
catch {
|
|
Write-Host "ERREUR : $($_.Exception.Message)" -ForegroundColor Red
|
|
$code = 1
|
|
}
|
|
|
|
# Laisse la fenêtre ouverte en cas d'échec (lancement par double-clic ou
|
|
# « Exécuter avec PowerShell »), sauf en mode non interactif.
|
|
if ($code -ne 0 -and [Environment]::UserInteractive -and
|
|
-not ([Environment]::GetCommandLineArgs() -match '^-NonI')) {
|
|
Read-Host "Appuyez sur Entrée pour fermer" | Out-Null
|
|
}
|
|
exit $code
|