Question
Extraction de métadonées de fichiers vidéos
- cedric
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 1 mois 1 semaine #34580
par cedric
Extraction de métadonées de fichiers vidéos a été créé par cedric
Salut à tous, je suis tout aussi débutant sur le forum qu'en scripts, merci de m'accueillir .
Je jette une bouteille à la mer
Voilà mon projet, j'ai un NAS avec des vidéos, je souhaite créer un script qui récupère le nom et la durée de chaque fichier mp4, j'ai fait un script qui fonctionne qu'a moitié, je liste les noms mais pas la durée.
Là c'est la version avec FFMPEG qui m'a gentiment conseillé un Chatbot mais toujours pas d'information de temps.
Si quelqu'un à une piste, je suis preneur.
Mon script:
# Changer de répertoire vers le dossier réseau contenant les fichiers vidéo
Set-Location "\\MMServer\videos"
# Chemin vers ffmpeg
$ffmpegPath = "C:\ffmpeg\bin\ffmpeg.exe"
# Créer un fichier de sortie
$outputFile = "duree_videos_completes.txt"
# Supprimer le fichier de sortie s'il existe déjà
if (Test-Path $outputFile) {
Remove-Item $outputFile
}
# Obtenir les durées de chaque fichier .mp4
Get-ChildItem -Filter *.mp4 | ForEach-Object {
$file = $_
# Utiliser ffmpeg pour obtenir les informations de durée
$ffmpegOutput = & $ffmpegPath -i $file.FullName -hide_banner 2>&1 | Out-String
# Initialiser les valeurs
$duration = "Inconnue"
$playTime = "Inconnu"
$trackTime = "Inconnu"
# Rechercher les différentes durées
if ($ffmpegOutput -match "Duration:\s+(\d+:\d+:\d+\.\d+)") {
$duration = $matches[1]
}
if ($ffmpegOutput -match "Play time:\s+(\d+:\d+:\d+\.\d+)") {
$playTime = $matches[1]
}
if ($ffmpegOutput -match "Track time:\s+(\d+:\d+:\d+\.\d+)") {
$trackTime = $matches[1]
}
# Créer un objet avec le nom et les durées
$props = [ordered]@{
'Nom' = $file.Name
'Duration' = $duration
'Play Time' = $playTime
'Track Time' = $trackTime
}
New-Object PSObject -Property $props
} | Format-Table | Out-File $outputFile
Write-Host "Nom, Duration, Play Time et Track Time extraits dans $outputFile"
__________________________________________________________________________________________________________________________
Résultat: "duree_videos_completes.txt"
Nom Durée
---
Boneyard.2024.mp4 Inconnue
Cabrini.2024.mp4 Inconnue
Captives.2024.mp4 Inconnue
Et.Plus.Si.Affinites.2024.mp4 Inconnue
Je jette une bouteille à la mer
Voilà mon projet, j'ai un NAS avec des vidéos, je souhaite créer un script qui récupère le nom et la durée de chaque fichier mp4, j'ai fait un script qui fonctionne qu'a moitié, je liste les noms mais pas la durée.
Là c'est la version avec FFMPEG qui m'a gentiment conseillé un Chatbot mais toujours pas d'information de temps.
Si quelqu'un à une piste, je suis preneur.
Mon script:
# Changer de répertoire vers le dossier réseau contenant les fichiers vidéo
Set-Location "\\MMServer\videos"
# Chemin vers ffmpeg
$ffmpegPath = "C:\ffmpeg\bin\ffmpeg.exe"
# Créer un fichier de sortie
$outputFile = "duree_videos_completes.txt"
# Supprimer le fichier de sortie s'il existe déjà
if (Test-Path $outputFile) {
Remove-Item $outputFile
}
# Obtenir les durées de chaque fichier .mp4
Get-ChildItem -Filter *.mp4 | ForEach-Object {
$file = $_
# Utiliser ffmpeg pour obtenir les informations de durée
$ffmpegOutput = & $ffmpegPath -i $file.FullName -hide_banner 2>&1 | Out-String
# Initialiser les valeurs
$duration = "Inconnue"
$playTime = "Inconnu"
$trackTime = "Inconnu"
# Rechercher les différentes durées
if ($ffmpegOutput -match "Duration:\s+(\d+:\d+:\d+\.\d+)") {
$duration = $matches[1]
}
if ($ffmpegOutput -match "Play time:\s+(\d+:\d+:\d+\.\d+)") {
$playTime = $matches[1]
}
if ($ffmpegOutput -match "Track time:\s+(\d+:\d+:\d+\.\d+)") {
$trackTime = $matches[1]
}
# Créer un objet avec le nom et les durées
$props = [ordered]@{
'Nom' = $file.Name
'Duration' = $duration
'Play Time' = $playTime
'Track Time' = $trackTime
}
New-Object PSObject -Property $props
} | Format-Table | Out-File $outputFile
Write-Host "Nom, Duration, Play Time et Track Time extraits dans $outputFile"
__________________________________________________________________________________________________________________________
Résultat: "duree_videos_completes.txt"
Nom Durée
---
Boneyard.2024.mp4 Inconnue
Cabrini.2024.mp4 Inconnue
Captives.2024.mp4 Inconnue
Et.Plus.Si.Affinites.2024.mp4 Inconnue
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Francois Dunoyer
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 11
- Remerciements reçus 1
il y a 1 mois 1 semaine #34581
par Francois Dunoyer
Réponse de Francois Dunoyer sur le sujet Extraction de métadonées de fichiers vidéos
J'ai testé et pour moi ça marche.
bon j'ai fait qq petits modifs car je ne voulais pas de fichier mais c'est totalement la meme Idee
<#
.SYNOPSIS
Recherche info sur les fichiers Video
.DESCRIPTION
Voilà mon projet, j'ai un NAS avec des vidéos, je souhaite créer un script qui récupère le nom et la durée de chaque fichier mp4, j'ai fait un script qui fonctionne qu'a moitié, je liste les noms mais pas la durée.
Là c'est la version avec FFMPEG qui m'a gentiment conseillé un Chatbot mais toujours pas d'information de temps.
.NOTES
www.powershell-scripting.com/index.php/f...rs-vid%C3%A9os#34580
Pour trouver ffmpeg -> ffmpeg.org/
A installer aussi via winget : winget install ffmpeg
.PARAMETER Dossier
Dossier à explorer style "\\MMServeur\Films"
.PARAMETER ffmpegPath
Chemin vers ffmpeg style "C:\ffmpeg\bin\ffmpeg.exe"
#>
[CmdletBinding()]
param (
[Parameter()][String]$Dossier="y:\Video\Films\",
[Parameter()][String]$ffmpegPath = "c:\Tools\ffmpeg\bin\ffmpeg.exe"
)
# Changer de répertoire vers le dossier réseau contenant les fichiers vidéo
Set-Location $Dossier
# Créer un fichier de sortie
$outputFile = "duree_videos_completes.txt"
# Supprimer le fichier de sortie s'il existe déjà
if (Test-Path -path $outputFile) { Remove-Item $outputFile }
# Obtenir les durées de chaque fichier .mp4
$Res=@()
$Liste=Get-ChildItem -Filter *.mp4
ForEach ($File in $Liste) {
# Utiliser ffmpeg pour obtenir les informations de durée
$ffmpegOutput = & $ffmpegPath -i $file.FullName -hide_banner 2>&1| Out-String
# Initialiser les valeurs
$duration = "Inconnue"
$playTime = "Inconnu"
$trackTime = "Inconnu"
# Rechercher les différentes durées
if ($ffmpegOutput -match "Duration:\s+(\d+:\d+:\d+\.\d+)") {
$duration = $matches[1]
$Message='La durée du film est de {0}' -f $Duration
}
if ($ffmpegOutput -match "Play time:\s+(\d+:\d+:\d+\.\d+)") {
$playTime = $matches[1]
}
if ($ffmpegOutput -match "Track time:\s+(\d+:\d+:\d+\.\d+)") {
$trackTime = $matches[1]
}
# Créer un objet avec le nom et les durées
$props = [ordered]@{
'Nom' = $file.Name
'Duree' = $duration
'Play Time' = $playTime
'Track Time' = $trackTime
}
$res+=New-Object PSObject -Property $props
}
$res | Format-Table Nom,Duree
bon j'ai fait qq petits modifs car je ne voulais pas de fichier mais c'est totalement la meme Idee
<#
.SYNOPSIS
Recherche info sur les fichiers Video
.DESCRIPTION
Voilà mon projet, j'ai un NAS avec des vidéos, je souhaite créer un script qui récupère le nom et la durée de chaque fichier mp4, j'ai fait un script qui fonctionne qu'a moitié, je liste les noms mais pas la durée.
Là c'est la version avec FFMPEG qui m'a gentiment conseillé un Chatbot mais toujours pas d'information de temps.
.NOTES
www.powershell-scripting.com/index.php/f...rs-vid%C3%A9os#34580
Pour trouver ffmpeg -> ffmpeg.org/
A installer aussi via winget : winget install ffmpeg
.PARAMETER Dossier
Dossier à explorer style "\\MMServeur\Films"
.PARAMETER ffmpegPath
Chemin vers ffmpeg style "C:\ffmpeg\bin\ffmpeg.exe"
#>
[CmdletBinding()]
param (
[Parameter()][String]$Dossier="y:\Video\Films\",
[Parameter()][String]$ffmpegPath = "c:\Tools\ffmpeg\bin\ffmpeg.exe"
)
# Changer de répertoire vers le dossier réseau contenant les fichiers vidéo
Set-Location $Dossier
# Créer un fichier de sortie
$outputFile = "duree_videos_completes.txt"
# Supprimer le fichier de sortie s'il existe déjà
if (Test-Path -path $outputFile) { Remove-Item $outputFile }
# Obtenir les durées de chaque fichier .mp4
$Res=@()
$Liste=Get-ChildItem -Filter *.mp4
ForEach ($File in $Liste) {
# Utiliser ffmpeg pour obtenir les informations de durée
$ffmpegOutput = & $ffmpegPath -i $file.FullName -hide_banner 2>&1| Out-String
# Initialiser les valeurs
$duration = "Inconnue"
$playTime = "Inconnu"
$trackTime = "Inconnu"
# Rechercher les différentes durées
if ($ffmpegOutput -match "Duration:\s+(\d+:\d+:\d+\.\d+)") {
$duration = $matches[1]
$Message='La durée du film est de {0}' -f $Duration
}
if ($ffmpegOutput -match "Play time:\s+(\d+:\d+:\d+\.\d+)") {
$playTime = $matches[1]
}
if ($ffmpegOutput -match "Track time:\s+(\d+:\d+:\d+\.\d+)") {
$trackTime = $matches[1]
}
# Créer un objet avec le nom et les durées
$props = [ordered]@{
'Nom' = $file.Name
'Duree' = $duration
'Play Time' = $playTime
'Track Time' = $trackTime
}
$res+=New-Object PSObject -Property $props
}
$res | Format-Table Nom,Duree
Connexion ou Créer un compte pour participer à la conversation.
- cedric
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 1 mois 4 jours #34593
par cedric
Réponse de cedric sur le sujet Extraction de métadonées de fichiers vidéos
Merci pour ton aide, c'était des problèmes de droit d'accès à mon NAS.
Après j'ai eu d'autre galères, ça ma soulé, j'ai fini par tout faire en VBA sous excel.
Bon week-end
Après j'ai eu d'autre galères, ça ma soulé, j'ai fini par tout faire en VBA sous excel.
Bon week-end
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.121 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Extraction de métadonées de fichiers vidéos