« FFmpeg » : différence entre les versions

Aller à la navigation Aller à la recherche
(19 versions intermédiaires par le même utilisateur non affichées)
Ligne 11 : Ligne 11 :


== Documentation ==
== Documentation ==
Corbpie creatie
* site principal : https://corbpie.com/
La catégorie FFmpeg :
* https://write.corbpie.com/tag/ffmpeg
Une source d'information pour FFmpeg :
Une source d'information pour FFmpeg :
* https://wiki.libox.fr/applications/ffmpeg/start
* https://wiki.libox.fr/applications/ffmpeg/start
* http://www.noah.org/wiki/Main_Page
* http://www.noah.org/wiki/Main_Page
* https://www.noah.org/wiki/ffmpeg
* https://www.noah.org/wiki/ffmpeg
CodePen.io
* https://codepen.io


== FFmpeg ==
== FFmpeg ==
Ligne 28 : Ligne 37 :
** https://github.com/BtbN/FFmpeg-Builds/releases (valide au 06/03/2021)
** https://github.com/BtbN/FFmpeg-Builds/releases (valide au 06/03/2021)
** https://ffmpeg.zeranoe.com/builds/
** https://ffmpeg.zeranoe.com/builds/
** https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2022-10-31-12-44/ffmpeg-n4.4.3-win64-gpl-4.4.zip version 4.4, contient les programmes complet incluant les dll (au 01/11/2022)


Les différentes version (à mars 2021) :
Les différentes version (à mars 2021) :
Ligne 34 : Ligne 44 :
* ffmpeg-N-101538-g63344337f9-win64-gpl-shared.zip
* ffmpeg-N-101538-g63344337f9-win64-gpl-shared.zip
** nécessite les dll ; cela veut dire que les exécutables ne sont pas indépendant.
** nécessite les dll ; cela veut dire que les exécutables ne sont pas indépendant.


* liens internes :
* liens internes :
Ligne 43 : Ligne 50 :
** FFmpeg 4.1, ''al-Khwarizmi'' : http://www.phpage.fr/download/ffmpeg-4.1-win64-static.zip
** FFmpeg 4.1, ''al-Khwarizmi'' : http://www.phpage.fr/download/ffmpeg-4.1-win64-static.zip
*** <code>ffmpeg.exe</code>, version 4.1, 64 bit, seul : http://www.phpage.fr/download/ffmpeg.exe-4.1-win64.zip
*** <code>ffmpeg.exe</code>, version 4.1, 64 bit, seul : http://www.phpage.fr/download/ffmpeg.exe-4.1-win64.zip
=== FFmpeg et commentaire ===
https://write.corbpie.com/
* https://write.corbpie.com/adding-metadata-to-a-video-or-audio-file-with-ffmpeg/
Exemple :
* <source inline>ffmpeg -i "Nom de la vidéo.mkv" -metadata title="Nom du film" -metadata comment="q23, 1920" -metadata year=2001 -c copy output2.mkv</source> : ajout d'informations


=== FFmpeg et capture d'écran ===
=== FFmpeg et capture d'écran ===
Ligne 57 : Ligne 71 :
Pour copier tous les flux, avec le deuxième flux (index numéro 1) encodé sous ''libx264'' et le flux audio numéro 138 (index numéro 137) encodé sous ''libvorbis'' :
Pour copier tous les flux, avec le deuxième flux (index numéro 1) encodé sous ''libx264'' et le flux audio numéro 138 (index numéro 137) encodé sous ''libvorbis'' :
* <source inline>ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT</source>
* <source inline>ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT</source>
=== Traitement en série ===
Traitement en série de tous les fichiers dont l'extension est <code>.mp4</code>, forçage en 25 images par secondes, forçage en 1280 x 720 pixels.
<source>
rem traitement de vidéo en série
rem transformation en taille et en fréquence d'image
for %%i in (*.mp4) do (
ffmpeg -i "%%i" -r 25 -vf scale=1280:720 "%%i"-1280-25.mp4)
pause
</source>


=== FFmpeg et image ===
=== FFmpeg et image ===
Ligne 65 : Ligne 89 :


Pour convertir du format JPEG au format PNG.
Pour convertir du format JPEG au format PNG.
* <code>ffmpeg -i img.jpeg img.png</code>
* <source inline>ffmpeg -i img.jpeg img.png</source>


Modifie la taille d'une image :
Modifie la taille d'une image :
* <code>ffmpeg -i Einstein_500_459.jpg -vf scale="'if(gt(a,320/240),320,-1)':'if(gt(a,320/240),-1,240)'" Einstein_320x240_fit.png</code>
* <source inline>ffmpeg -i Einstein_500_459.jpg -vf scale="'if(gt(a,320/240),320,-1)':'if(gt(a,320/240),-1,240)'" Einstein_320x240_fit.png</source>


Pour convertir une vidéo en une série d'images :
Pour convertir une vidéo en une série d'images :
* <code>ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png</code>
* <source inline>ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png</source>
 
=== Référence ===
Bannerbear : https://www.bannerbear.com/
* extraire des images d'une vidéo :
** https://www.bannerbear.com/blog/how-to-extract-images-from-a-video-using-ffmpeg/
* recadrer une vidéo :
** https://www.bannerbear.com/blog/how-to-crop-resize-a-video-using-ffmpeg/


=== FFmpeg et audio ===
=== FFmpeg et audio ===
Analyser un document multimédia (audio ou vidéo) :
Analyser un document multimédia (audio ou vidéo) :
* <code>ffmpeg -i input.wav -filter:a volumedetect -f null /dev/null</code>
* <source inline>ffmpeg -i input.wav -filter:a volumedetect -f null /dev/null</source>
* <code>ffmpeg -i video.mp4 -filter:a volumedetect -f null /dev/null</code>
* <source inline>ffmpeg -i video.mp4 -filter:a volumedetect -f null /dev/null</source>


Une fois le résultat donné, récupérer la valeur maximum du volume (''max_volume'') et appliquer la valeur avec son opposé pour la modification ; par exemple, si la valeur maximum est -17, appliquer une modification de +17. Si la valeur maximum est 5, appliquer une modification de -5.
Une fois le résultat donné, récupérer la valeur maximum du volume (''max_volume'') et appliquer la valeur avec son opposé pour la modification ; par exemple, si la valeur maximum est -17, appliquer une modification de +17. Si la valeur maximum est 5, appliquer une modification de -5.


Exemple pour modifier le volume sonore, sans réencoder la vidéo :
Exemple pour modifier le volume sonore, sans réencoder la vidéo :
* <code>ffmpeg -i video.mp4 -vcodec copy -af "volume=10dB" video-augmentee.mp4</code>
* <source inline>ffmpeg -i video.mp4 -vcodec copy -af "volume=10dB" video-augmentee.mp4</source>
* <code>ffmpeg -i video.mp4 -vcodec copy -af "volume=-5dB" video-diminuee.mp4</code>
* <source inline>ffmpeg -i video.mp4 -vcodec copy -af "volume=-5dB" video-diminuee.mp4</source>


Un décalage de l'audio de 0,7 seconde par rapport à la vidéo est présent ; pour corriger cela :
Un décalage de l'audio de 0,7 seconde par rapport à la vidéo est présent ; pour corriger cela :
* <code>ffmpeg.exe -i source-original.mp4 -itsoffset 0.7 -i source-original.mp4 -map 0:v -map 1:a -c copy destination.mp4</code>
* <source inline>ffmpeg.exe -i source-original.mp4 -itsoffset 0.7 -i source-original.mp4 -map 0:v -map 1:a -c copy destination.mp4</source>


==== Extraire audio ====
==== Extraire audio ====
* <code>ffmpeg -i input.mp4 -vn -ac 2 -ar 44100 -ab 128k -f mp3 output.mp3</code>
* <source inline>ffmpeg -i input.mp4 -vn -ac 2 -ar 44100 -ab 128k -f mp3 output.mp3</source>


==== Ajouter audio ====
==== Ajouter audio ====
* <code>ffmpeg -i input.mp4 -i input.mp3 -c copy -map 0:0 -map 1:0 output.mp4</code>
* <source inline>ffmpeg -i input.mp4 -i input.mp3 -c copy -map 0:0 -map 1:0 output.mp4</source>


==== Pour faire des tests ====
==== Pour faire des tests ====
La commande ci dessous permet de faire un essai d'encodage :
La commande ci dessous permet de faire un essai d'encodage :
* <code>ffmpeg -ss 80 -t 60 -i videoInput.mpg -s 240x180 -b 380k -ab 64k videoOutput.flv</code>
* <source inline>ffmpeg -ss 80 -t 60 -i videoInput.mpg -s 240x180 -b 380k -ab 64k videoOutput.flv</source>
Cette commande convertit la portion commençant à t0 = 80 secondes (option -ss) et s'étendant sur une durée de 60 secondes (option -t) du fichier d'entrée "videoInput.mpg" codé en MPEG. Le fichier produit sera encodé en Flash, la taille d'image sera de 240×180, le débit engendré par son affichage de 380 kbps et le débit audio de 64 kbps.
Cette commande convertit la portion commençant à t0 = 80 secondes (option -ss) et s'étendant sur une durée de 60 secondes (option -t) du fichier d'entrée "videoInput.mpg" codé en MPEG. Le fichier produit sera encodé en Flash, la taille d'image sera de 240×180, le débit engendré par son affichage de 380 kbps et le débit audio de 64 kbps.


Conversion par copie des flux vidéo et audio d'une portion commençant à 2 minutes et 58 secondes et d'une durée de 9 minutes et 34 secondes :
Conversion par copie des flux vidéo et audio d'une portion commençant à 2 minutes et 58 secondes et d'une durée de 9 minutes et 34 secondes :
* <code>ffmpeg -ss 00:02:58 -t 00:09:34 -i entree.webm -vcodec copy -acodec copy sortie.webm</code>
* <source inline>ffmpeg -ss 00:02:58 -t 00:09:34 -i entree.webm -vcodec copy -acodec copy sortie.webm</source>


Exemple pour sortir un fichier AVI en qualité moyenne, à partir d'un fichier OGG Theora :
Exemple pour sortir un fichier AVI en qualité moyenne, à partir d'un fichier OGG Theora :
* <code>ffmpeg -ss 4518 -t 1100 -b 768k -ab 128k -i videoInput.ogv -f avi videoOutput.avi</code>
* <source inline>ffmpeg -ss 4518 -t 1100 -b 768k -ab 128k -i videoInput.ogv -f avi videoOutput.avi</source>


Autres exemples :
Autres exemples :
<pre>
<source>
rem transformation 1920x1080, 60 ips en 1920x1080 : original 137 Mo, après traitement 29 Mo
rem transformation 1920x1080, 60 ips en 1920x1080 : original 137 Mo, après traitement 29 Mo
ffmpeg -i fichiersource.mp4 -vf scale=1920:1080 mieux1920-60.mp4
ffmpeg -i fichiersource.mp4 -vf scale=1920:1080 mieux1920-60.mp4
Ligne 117 : Ligne 148 :
rem transformation 1920x1080, 60 ips en 1024x576 : original 137 Mo, après traitement 8,4 Mo
rem transformation 1920x1080, 60 ips en 1024x576 : original 137 Mo, après traitement 8,4 Mo
ffmpeg -i fichiersource.mp4 -vf scale=1024:576 mieux-1024-60.mp4
ffmpeg -i fichiersource.mp4 -vf scale=1024:576 mieux-1024-60.mp4
</pre>
</source>


À noter : '''ne pas utiliser de valeur impaires''' pour les dimensions d'images.
À noter : '''ne pas utiliser de valeur impaires''' pour les dimensions d'images.
Ligne 128 : Ligne 159 :
À l'exécution, cette syntaxe lance une fenêtre de commande DOS le temps de l'exécution de la commande.
À l'exécution, cette syntaxe lance une fenêtre de commande DOS le temps de l'exécution de la commande.


<source>
{{script|powershell-script video conversion-020.ps1|PowerShell}}
cls
set-location C:\Support\ffmpeg
 
# Attention. Pour les noms de fichiers qui contiennent des espaces, le script de fonctionne pas.
# en solution rapide, prévoir de renommer le fichier avant traitement.
$listefichier = gci *.mp4
$compteur = 0
 
foreach ($fichier in $listefichier) {
  $tl=$listefichier.length
  $compteur = $compteur + 1
  $tailleliste = $listefichier.length
 
  # récupération des dates des fichiers
  $datecreation = $fichier.CreationTime
  $datemodif = $fichier.LastWriteTime
  $dateacces = $fichier.LastAccessTime
  $taille = $fichier.Length/1024
 
  # renommage des fichiers
  $fichierNom=$fichier.BaseName
  $fichierExt=$fichier.Extension
  $fichierAncien = $fichier.BaseName + "-vieux" + $fichier.Extension
  Rename-item -Path $fichier -NewName $fichierAncien
  $fichierNouveau = $fichier
 
  # arguments pour le traitement vidéo
  $arg="-i " + $fichierAncien + " -r 25 -b:v 2048k -b:a 96k -vf scale=1280:720 " + $fichierNouveau
  # $arg="-i " + $fichierAncien + " -r 25 -b:v 2048k -b:a 96k -vf scale=720:1280 " + $fichierNouveau
 
  # l'option -Wait permet d'attendre la fin d'un traitement avant de lancer le suivant
try {
    $debuttraitement = Get-Date # Début de traitement
    write-host $compteur "/" $tailleliste " : " $fichier.name $taille.tostring("#") " | En cours"
    start-process -Wait ffmpeg.exe -argumentlist $arg
    $fintraitement = Get-Date # Fin de traitement
    $duree = $fintraitement - $debuttraitement
    write-host "    Terminé. Durée de traitement :" $duree.TotalSeconds "s"
    Start-Sleep -s 3
 
    # modification des dates des nouveaux fichiers
    $(Get-Item $fichier).creationtime=$($datemodif)
    $(Get-Item $fichier).LastWriteTime=$($datemodif)
    $(Get-Item $fichier).lastaccesstime=$($datemodif)
    }
  catch {
    write-host write-host $compteur "/" $tailleliste " : " $fichier.name $taille.tostring("#") " | Erreur fichier " $fichierAncien
    }
}
</source>


==== Deuxième exemple ====
==== Deuxième exemple ====
Script qui permet de traiter une série de vidéo. Attention, créer les dossiers de travail avant de lancer le script.
Script qui permet de traiter une série de vidéo. Attention, créer les dossiers de travail avant de lancer le script.


<source>
{{script|powershell-script video conversion-010.ps1|PowerShell}}
$CheminSource = "D:\vid\aTraiter"
$CheminDestinationOriginal = "D:\vid\Original\"
$CheminDestinationTraite =  "D:\vid\Traite\"
$Suffixe="-1024"
 
$VideoListeATraiter = Get-ChildItem -Include @("*.mp4", "*.avi", "*.divx", "*.mov", "*.mpg", "*.wmv", "*.mkv") -Path $CheminSource -recurse;
 
Clear-Host
Write-Host
Write-Host "Liste des vidéos à traiter";
 
$Compteur=1;
foreach ($VideoATraiter in $VideoListeATraiter) {
    Write-Host $Compteur ".- " $VideoATraiter;
    $Compteur++
    }
Write-Host
        # Pause
    $null = Read-Host -Prompt 'Appuyer sur une touche pour continuer.';
 
Write-Host -ForegroundColor Green "Début du traitement"
 
$Compteur=1;
foreach ($VideoATraiter in $VideoListeATraiter) {
    $VideoTraite = $VideoATraiter.BaseName+$Suffixe+$VideoATraiter.Extension
    Write-Host $Compteur ".- " $VideoATraiter
   
        # Déclaration des arguments pour ffmpeg.exe
    $ArgumentListe = '-i "{0}" -vf scale=1024:0 "{1}"' -f $VideoATraiter, $VideoTraite;
   
        # Démarrage du traitement
    Start-Process -FilePath D:\vid\aTraiter\ffmpeg.exe -ArgumentList $ArgumentListe -Wait -NoNewWindow;
 
    Move-Item -Path $VideoATraiter -Destination $CheminDestinationOriginal
    Move-Item -Path $VideoTraite -Destination $CheminDestinationTraite
    Write-Host -ForegroundColor Cyan "  ==> traitement terminé"
    Write-Host
    $Compteur++
    }
Write-Host -ForegroundColor Green "Fin du traitement"
</source>


==== Troisième exemple ====
==== Troisième exemple ====
Ligne 238 : Ligne 178 :
</source>
</source>


Ressource :
==== Quatrième exemple ====
TechSnips by ATA Learning, How to join MP4 videos using ffmpeg and PowerShell
* concaténation de deux fichiers vidéos
<source>
# Chemin vers FFmpeg
$ffmpeg = ".\ffmpeg\bin\ffmpeg.exe'
 
# Chemin vers FFprobe
$ffprobe = ".\ffmpeg\bin\ffprobe.exe'
 
# Transcodage préalable vers MPEG-2 transport streams (TS), vidéo H.264 et audio AAC
& $ffmpeg -y -i $file1 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1.ts
& $ffmpeg -y -i $file2 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2.ts
 
# Concaténation des fichiers
& $ffmpeg -f mpegts -i "concat:temp1.ts|temps.ts" -c copy -bsf:a aac_adtstoasc output.mp4
</source>
 
==== Ressource ====
Developpez.com
* https://windows.developpez.com/cours/ligne-commande/?page=page_26
* https://windows.developpez.com/cours/ligne-commande/?page=page_26
Youtube, TechSnips by ATA Learning, How to join MP4 videos using ffmpeg and PowerShell
* https://www.youtube.com/watch?v=EjR2zK6mEIA


=== FFmpeg et ''delogo'' ===
=== FFmpeg et ''delogo'' ===
Ligne 404 : Ligne 366 :


== Voir aussi ==
== Voir aussi ==
* [[FFmpeg Batch AV Converter]] ;
* [[Kdenlive]] ;
* [[Kdenlive]] ;
* [[Vidéo]].
* [[Vidéo]].
[[Catégorie:Vidéo]]
[[Catégorie:FFmpeg]]


== Liens externes ==
== Liens externes ==
Ligne 413 : Ligne 379 :
* https://doc.ubuntu-fr.org/ffmpeg
* https://doc.ubuntu-fr.org/ffmpeg
* https://www.jcartier.net/FFMpeg-par-l-exemple.html
* https://www.jcartier.net/FFMpeg-par-l-exemple.html
{{Palette multimédia}}


[[Catégorie:Logiciel_multimédia]]
[[Catégorie:Logiciel_multimédia]]
[[Catégorie:PowerShell]]
[[Catégorie:PowerShell]]

Version du 27 mai 2023 à 19:48

FFmpeg est un ensemble d'outils informatiques pour traiter les documents vidéos et les documents audios.

C'est en ligne de commande que sont exécutées les actions.

Généralité

FFmpeg est proposée en deux versions :

  • la version static contient deux fichiers autonomes. Cette version est utile pour l'usage en ligne de commande ;
  • la version shared contient tous les fichiers séparés : exécutables et bibliothèques (dll). C'est la version qui permet à d'autres applications d'utiliser la bibliothèque.

Documentation

Corbpie creatie

La catégorie FFmpeg :

Une source d'information pour FFmpeg :

CodePen.io

FFmpeg

Site officiel :

Il existe plusieurs paquets :

  • shared pour partagé : les bibliothèques (dll) sont à part des exécutables ; en conséquence l'exécutable ffmpeg.exe a une taille de 0,290 Mo
  • static : ce paquet propose les programmes principaux incluant les bibliothèques (dll) ; en conséquence l'exécutable ffmpeg.exe a une taille de 60 Mo

Téléchargement de FFmpeg :

Les différentes version (à mars 2021) :

  • ffmpeg-N-101538-g63344337f9-win64-gpl.zip :
    • ffmpeg.exe, ffplay.exe, ffprobe.exe : sont indépendant (ne nécessitent pas de dll).
  • ffmpeg-N-101538-g63344337f9-win64-gpl-shared.zip
    • nécessite les dll ; cela veut dire que les exécutables ne sont pas indépendant.

FFmpeg et commentaire

https://write.corbpie.com/

Exemple :

  • ffmpeg -i "Nom de la vidéo.mkv" -metadata title="Nom du film" -metadata comment="q23, 1920" -metadata year=2001 -c copy output2.mkv : ajout d'informations

FFmpeg et capture d'écran

  • ffmpeg -f gdigrab -framerate 25 -i desktop bureau.mp4 : capture de tout le bureau ;
  • ffmpeg -f gdigrab -framerate 2 -i title=ffmpeg fenetre.mp4 : capture la fenêtre dont le nom est "ffmpeg", en l'occurence c'est une fenêtre de l'explorateur de fichier avec le dossier "ffmpeg" qui est ouverte ;

FFmpeg et vidéo

FFmpeg est une collection de logiciels libres destinés au traitement de flux audio ou vidéo (enregistrement, lecture ou conversion d'un format à un autre).

  • ffmpeg -i videoorigine.avi -vf scale=320:240 videodestination.avi
  • ffmpeg -i videoorigine.webm -s 720x540 videodestination.webm redimensionne la vidéo en 720 x 540 pixels ;
  • ffmpeg -i arte.mpg -q 0 -ss "00:03:50" -t "00:00:05" arte-03-50.mpg extrait cinq secondes de vidéo à partir de 3 min 50 s en qualité d'origine ;
  • ffmpeg -i videoorigine.mov -r 25 videodestination.mp4 convertit le format (de .mov à .mp4) et force la fréquence d'image à 25 images par secondes (de 30 ips à 25 ips).

Pour copier tous les flux, avec le deuxième flux (index numéro 1) encodé sous libx264 et le flux audio numéro 138 (index numéro 137) encodé sous libvorbis :

  • ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT

Traitement en série

Traitement en série de tous les fichiers dont l'extension est .mp4, forçage en 25 images par secondes, forçage en 1280 x 720 pixels.

rem traitement de vidéo en série
rem transformation en taille et en fréquence d'image
for %%i in (*.mp4) do (
	ffmpeg -i "%%i" -r 25 -vf scale=1280:720 "%%i"-1280-25.mp4)
pause

FFmpeg et image

Script de traitement d'image en PowerShell

Pour convertir du format JPEG au format PNG.

  • ffmpeg -i img.jpeg img.png

Modifie la taille d'une image :

  • ffmpeg -i Einstein_500_459.jpg -vf scale="'if(gt(a,320/240),320,-1)':'if(gt(a,320/240),-1,240)'" Einstein_320x240_fit.png

Pour convertir une vidéo en une série d'images :

  • ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png

Référence

Bannerbear : https://www.bannerbear.com/

FFmpeg et audio

Analyser un document multimédia (audio ou vidéo) :

  • ffmpeg -i input.wav -filter:a volumedetect -f null /dev/null
  • ffmpeg -i video.mp4 -filter:a volumedetect -f null /dev/null

Une fois le résultat donné, récupérer la valeur maximum du volume (max_volume) et appliquer la valeur avec son opposé pour la modification ; par exemple, si la valeur maximum est -17, appliquer une modification de +17. Si la valeur maximum est 5, appliquer une modification de -5.

Exemple pour modifier le volume sonore, sans réencoder la vidéo :

  • ffmpeg -i video.mp4 -vcodec copy -af "volume=10dB" video-augmentee.mp4
  • ffmpeg -i video.mp4 -vcodec copy -af "volume=-5dB" video-diminuee.mp4

Un décalage de l'audio de 0,7 seconde par rapport à la vidéo est présent ; pour corriger cela :

  • ffmpeg.exe -i source-original.mp4 -itsoffset 0.7 -i source-original.mp4 -map 0:v -map 1:a -c copy destination.mp4

Extraire audio

  • ffmpeg -i input.mp4 -vn -ac 2 -ar 44100 -ab 128k -f mp3 output.mp3

Ajouter audio

  • ffmpeg -i input.mp4 -i input.mp3 -c copy -map 0:0 -map 1:0 output.mp4

Pour faire des tests

La commande ci dessous permet de faire un essai d'encodage :

  • ffmpeg -ss 80 -t 60 -i videoInput.mpg -s 240x180 -b 380k -ab 64k videoOutput.flv

Cette commande convertit la portion commençant à t0 = 80 secondes (option -ss) et s'étendant sur une durée de 60 secondes (option -t) du fichier d'entrée "videoInput.mpg" codé en MPEG. Le fichier produit sera encodé en Flash, la taille d'image sera de 240×180, le débit engendré par son affichage de 380 kbps et le débit audio de 64 kbps.

Conversion par copie des flux vidéo et audio d'une portion commençant à 2 minutes et 58 secondes et d'une durée de 9 minutes et 34 secondes :

  • ffmpeg -ss 00:02:58 -t 00:09:34 -i entree.webm -vcodec copy -acodec copy sortie.webm

Exemple pour sortir un fichier AVI en qualité moyenne, à partir d'un fichier OGG Theora :

  • ffmpeg -ss 4518 -t 1100 -b 768k -ab 128k -i videoInput.ogv -f avi videoOutput.avi

Autres exemples :

rem transformation 1920x1080, 60 ips en 1920x1080 : original 137 Mo, après traitement 29 Mo
ffmpeg -i fichiersource.mp4 -vf scale=1920:1080 mieux1920-60.mp4

rem transformation 1920x1080, 60 ips, 28000 kb/s, audio 256 kb/s en 1920x1080, 25 ips, 2048 kb/s, audio 96 kb/s : original 137 Mo, après traitement 10,5 Mo
ffmpeg -i fichiersource.mp4 -r 25 -b:v 2048k -b:a 96k -vf scale=1920:1080 mieux-1920-25-v2048-a096.mp4

rem transformation 1920x1080, 60 ips en 1280x720 : original 137 Mo, après traitement 12,7 Mo
ffmpeg -i fichiersource.mp4 -vf scale=1280:720 mieux-1280-60.mp4

rem transformation 1920x1080, 60 ips en 1024x576 : original 137 Mo, après traitement 8,4 Mo
ffmpeg -i fichiersource.mp4 -vf scale=1024:576 mieux-1024-60.mp4

À noter : ne pas utiliser de valeur impaires pour les dimensions d'images.

ffmpeg et PowerShell

Premier exemple

Pour utiliser ffmpeg en ligne de commande avec PowerShell, il est impératif de séparer l'exécutable ffmpeg.exe et les arguments :

  • start-process ffmpeg.exe -argumentlist "-i 20191220_154316.mp4 -r 25 -b:v 2048k -b:a 96k -vf scale=1280:720 mieux-1280-25-v2048-a096.mp4"

À l'exécution, cette syntaxe lance une fenêtre de commande DOS le temps de l'exécution de la commande.

Contenu du fichier powershell-script video conversion-020.ps1 Accès au code
Clear-Host
Set-Location C:\Support\ffmpeg

# Attention. Pour les noms de fichiers qui contiennent des espaces, le script de fonctionne pas.
# en solution rapide, prévoir de renommer le fichier avant traitement.
$listeFichier = Get-ChildItem *.mp4
$compteur = 0

ForEach ($fichier in $listeFichier) {
  $tl          = $listeFichier.length
  $compteur    = $compteur + 1
  $tailleListe = $listeFichier.Length
  
  # récupération des dates des fichiers
  $dateCreation = $fichier.CreationTime
  $dateModif    = $fichier.LastWriteTime
  $dateAcces    = $fichier.LastAccessTime
  $taille       = $fichier.Length/1024

  # renommage des fichiers
  $fichierNom    = $fichier.BaseName
  $fichierExt    = $fichier.Extension
  $fichierAncien = $fichier.BaseName + "-vieux" + $fichier.Extension
  Rename-Item -Path $fichier -NewName $fichierAncien
  $fichierNouveau = $fichier

  # arguments pour le traitement vidéo
  $arg = "-i " + $fichierAncien + " -r 25 -b:v 2048k -b:a 96k -vf scale=1280:720 " + $fichierNouveau
  # $arg="-i " + $fichierAncien + " -r 25 -b:v 2048k -b:a 96k -vf scale=720:1280 " + $fichierNouveau

   # l'option -Wait permet d'attendre la fin d'un traitement avant de lancer le suivant
 Try {
    $debutTraitement = Get-Date # Début de traitement
    Write-Host $compteur "/" $tailleliste " : " $fichier.Name $taille.ToString("#") " | En cours"
    Start-Process -Wait ffmpeg.exe -ArgumentList $arg 
    $finTraitement = Get-Date # Fin de traitement
    $duree         = $fintraitement - $debuttraitement
    Write-Host "     Terminé. Durée de traitement :" $duree.TotalSeconds "s"
    Start-Sleep -s 3

    # modification des dates des nouveaux fichiers
    $(Get-Item $fichier).CreationTime   = $($datemodif)
    $(Get-Item $fichier).LastWriteTime  = $($datemodif)
    $(Get-Item $fichier).LastAccessTime = $($datemodif)
    }
 Catch {
    Write-Host $compteur "/" $tailleliste " : " $fichier.Name $taille.ToString("#") " | Erreur fichier " $fichierAncien
    }
 }

Deuxième exemple

Script qui permet de traiter une série de vidéo. Attention, créer les dossiers de travail avant de lancer le script.

Contenu du fichier powershell-script video conversion-010.ps1 Accès au code
$CheminSource = "C:\Video\AConvertir\"
$CheminDestinationOriginal = "C:\Video\AConvertir\original\"
$CheminDestinationTraite =   "C:\Video\AConvertir\conv\"
$Suffixe_q23="-q23"
$Suffixe_q23_1280="-q23-1280"

set-location $CheminSource

$CheminSource = $CheminSource+"\*"
$VideoListeATraiter = Get-Item -Include @("*.mp4", "*.avi", "*.divx", "*.mov", "*.mpg", "*.wmv", "*.mkv") -Path $CheminSource;

Clear-Host
Write-Host 
Write-Host "Liste des vidéos à traiter";

$Compteur=1;
foreach ($VideoATraiter in $VideoListeATraiter) {
    Write-Host $Compteur ".- " $VideoATraiter;
    $Compteur++
    }
Write-Host 
        # Pause
    $null = Read-Host -Prompt 'Appuyer sur une touche pour continuer.';

Write-Host -ForegroundColor Green "Début du traitement"

$Compteur=1;
foreach ($VideoATraiter in $VideoListeATraiter) {
    $VideoTraite_q23 = $VideoATraiter.BaseName+$Suffixe_q23+$VideoATraiter.Extension
    $VideoTraite_q23_1280 = $VideoATraiter.BaseName+$Suffixe_q23_1280+$VideoATraiter.Extension
    Write-Host $Compteur ".- " $VideoATraiter
    
        # Déclaration des arguments pour ffmpeg.exe
        # -c:v libx264 -preset slow -crf 22
    #$ArgumentListe = '-i "{0}" -vf scale=1024:0 "{1}"' -f $VideoATraiter, $VideoTraite;
    $ArgumentListe_q23 = '-i "{0}" -r 25 -preset medium -map 0:v -c:v libx264 -map 0:a -c:a copy "{1}"' -f $VideoATraiter, $VideoTraite_q23;
    $ArgumentListe_q23_1280 = '-i "{0}" -r 25 -preset medium -map 0:v -c:v libx264 -map 0:a -c:a copy -vf scale=1280:0 "{1}"' -f $VideoATraiter, $VideoTraite_q23_1280;
        # $ArgumentListe = '-i {0} -c:v libx264 -crf 23 -c:a copy {1}' -f $VideoATraiter, $VideoTraite;
    
    # Write-Host $ArgumentListe
    
        # Démarrage du traitement
    Start-Process -FilePath "C:\Video\AConvertir\ffmpeg.exe" -ArgumentList $ArgumentListe_q23 -Wait -NoNewWindow;
    Start-Process -FilePath "C:\Video\AConvertir\ffmpeg.exe" -ArgumentList $ArgumentListe_q23_1280 -Wait -NoNewWindow;

    Move-Item -Path $VideoATraiter -Destination $CheminDestinationOriginal
    Move-Item -Path $VideoTraite_q23 -Destination $CheminDestinationTraite
    Move-Item -Path $VideoTraite_q23_1280 -Destination $CheminDestinationTraite
    Write-Host -ForegroundColor Cyan "   ==> traitement terminé"
    Write-Host 
    $Compteur++
    }
Write-Host -ForegroundColor Green "Fin du traitement"

Troisième exemple

Il est nécessaire que le programme ffmpeg.exe soit présent dans le dossier où le script est exécuté.

Nom du fichier : script-video-1280-25.bat

rem traitement de vidéo en série
rem transformation en taille et en fréquence d'image
for /r %%i in (*.mp4) do (
	ffmpeg -i "%%i" -r 25 -vf scale=1280:720 "%%i"-1280-25.mp4)
pause

Quatrième exemple

TechSnips by ATA Learning, How to join MP4 videos using ffmpeg and PowerShell

  • concaténation de deux fichiers vidéos
# Chemin vers FFmpeg
$ffmpeg = ".\ffmpeg\bin\ffmpeg.exe'

# Chemin vers FFprobe
$ffprobe = ".\ffmpeg\bin\ffprobe.exe'

# Transcodage préalable vers MPEG-2 transport streams (TS), vidéo H.264 et audio AAC
& $ffmpeg -y -i $file1 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1.ts
& $ffmpeg -y -i $file2 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2.ts

# Concaténation des fichiers
& $ffmpeg -f mpegts -i "concat:temp1.ts|temps.ts" -c copy -bsf:a aac_adtstoasc output.mp4

Ressource

Developpez.com

Youtube, TechSnips by ATA Learning, How to join MP4 videos using ffmpeg and PowerShell

Il est possible de masquer un logo en floutant le logo. Une extrapolation de la vidéo est utilisée pour masquer le logo.

Pour effectuer le traitement depuis l'original vers une nouvelle vidéo :

  • ffmpeg -i input.mp4 -vf "delogo=x=100:y=100:w=150:h=20" output.mp4

Pour effectuer une prévisualisation de l'effet :

  • ffplay -f lavfi -i "movie=input.mp4,delogo=x=100:y=100:w=150:h=20:show=1"

FFmpeg et timecode

Il est possible d'insérer un time code sur la vidéo.

Pour effectuer le traitement depuis l'original vers une nouvelle vidéo :

  • pour une vidéo de dimension 1920 x 1080, à 25 images par seconde ;
  • à noter le nom de la police de caractère ;
  • l'emplacement du timecode : x = 900, y = 900 pour une position en bas et centré horizontalement ;
  • un arrière plan est optionnel :
    • boxcolor : couleur de fond 0xrrvvbbaa (0x indique une notation hexadécimale [de 00 à ff], rr, vv, bb pour les couleurs rouge, vert et bleu, aa pour le canal alpha qui gère la transparence), ici avec une transparence de 55 (sous forme hexadécimal de 00 à ff),
    • box : 0 pour inactivé ; 1 pour activé
    • boxborder : écart entre bord et texte, en pixel
  • timecode : ici indique un début de compteur à 0 (zéro)

Exemple 1 :

  • ffmpeg.exe -i input.mkv -vf drawtext="fontsize=40: fontfile=arial.ttf: x=900: y=850: timecode='00\:00\:00\:00': rate=25: fontcolor='white': boxcolor=0x00000055: box=1: boxborderw=4" output.mkv

Exemple 2, avec certaines valeurs proportionnelles à la taille de l'image :

  • ffmpeg.exe -i swj-1280.mp4 -vf drawtext="fontsize=h/30: fontfile=cour.ttf: x=(w-text_w)/2: y=(h-text_h*2): timecode='00\:00\:00\:00': rate=30: fontcolor='white': boxcolor=0x00000055: box=1: boxborderw=4" swj-1280-TCR.mp4

FFprobe

FFprobe permet de récupérer des informations de type métadonnées sur le fichier :

Liste des métadonnées :

  • ffprobe -i 1.mp4

Liste des métadonnées avec export vers un fichier XML :

  • ffprobe -show_format -show_streams -print_format xml -i 1.mp4

Repère

Taille d'écran, format 4/3 :

Taille Proportion Nom
400 x 300 1,333:1
480 x 360 1,333:1
640 x 480 1,333:1
768 x 576 1,333:1
800 x 600 1,333:1
1024 x 768 1,333:1

Taille des vidéos, format 16/9 :

Taille Proportion Nom
16 x 9 1,777:1 16/9e
160 x 90 1,777:1
240 x 135 1,777:1
320 x 180 1,777:1
480 x 270 1,777:1
640 x 360 1,777:1
720 x 406 1,777:1
800 x 450 1,777:1
1 024 x 576 1,777:1 SD (720 x 576)
1 280 x 720 1,777:1 720p, HD TV
1 920 x 1 080 1,777:1 1080p, Full HD
Taille Proportion Nom
2,35 x 1 2.35:1 CinemaScope ou Panavision
1 920 x 818 2.35:1 CinemaScope ou Panavision
720 x 302 2,379
1 024 x 430 2,379
1 280 x 538 2,379
1 024 x 426 2,4
1 280 x 534 2,4
1 920 x 800 2,4

Repère de paramétrage

Type Durée Dimension
en pixel
Poids Débit vidéo Débit audio Observation
Original 1 h 37 min 55 s 1 280 x 720 1 969 584 ko 2 616 kb/s 125 kb/s
Essai 1 1 h 37 min 55 s 1 024 x 576 1 538 461 ko 2 042 kb/s 96 kb/s dimension et débit audio forcés
Essai 2 1 h 37 min 55 s 1 024 x 576 804 928 ko 1 024 kb/s 96 kb/s dimension, débit vidéo et débit audio forcés
Essai 3 1 h 37 min 55 s 1 024 x 576 621 760 ko 768 kb/s 96 kb/s dimension, débit vidéo et débit audio forcés
Essai 4 1 h 37 min 55 s 720 x 406 344 605 ko 480 kb/s 128 kb/s dimension forcée

Source Wikipédia, définition d'écran : https://fr.wikipedia.org/wiki/D%C3%A9finition_d%27%C3%A9cran

Type Durée Nb images Codec
vidéo
Dimension
en pixel
Fréquence
d'image
Audio Poids Débit vidéo Débit audio Observation
Original 5 min 55 s 8875 i H264 1 920 x 1 080 25 ips MPEG AAC, stéréo, 48 kHz, 32 bit 397 416 ko 10 281 kb/s 160 kb/s
Essai 1 5 min 55 s 8875 i H264 1 920 x 1 080 25 ips MPEG AAC, stéréo 80 637 ko 2 048 kb/s 96 kb/s dimension, débit vidéo et débit audio forcés
Essai 2a 5 min 55 s 8875 i H264 1 280 x 720 25 ips MPEG AAC, stéréo 80 637 ko 2 048 kb/s 96 kb/s dimension, débit vidéo et débit audio forcés
Essai 2b 5 min 55 s 8875 i H264 1 280 x 720 25 ips MPEG AAC, stéréo 61 496 ko 1 536 kb/s 96 kb/s dimension, débit vidéo et débit audio forcés
Essai 2c 5 min 55 s 8875 i H264 1 280 x 720 25 ips MPEG AAC, stéréo 42 316 ko 1 024 kb/s 96 kb/s dimension, débit vidéo et débit audio forcés
Essai 3a 5 min 55 s 8875 i H264 1 024 x 576 25 ips MPEG AAC, stéréo 42 409 ko 1 024 kb/s 96 kb/s dimension, débit vidéo et débit audio forcés
Essai 3b 5 min 55 s 8875 i H264 1 024 x 576 25 ips MPEG AAC, stéréo 32 805 ko 768 kb/s 96 kb/s dimension, débit vidéo et débit audio forcés
Essai 4a 5 min 55 s 8875 i H264 720 x 406 25 ips MPEG AAC, stéréo 32 909 ko 768 kb/s 96 kb/s dimension, débit vidéo et débit audio forcés
Essai 4b 5 min 55 s 8875 i H264 720 x 406 25 ips MPEG AAC, stéréo 22 058 ko 480 kb/s 96 kb/s dimension, débit vidéo et débit audio forcés

Voir aussi

Liens externes



Multimédia Modifier
Logiciel relatif à la vidéo AegisubAvidemuxBlenderCaptvtyFFmpegKdenlive
MKVToolNixOBS StudioOliveVLC
Logiciel relatif à l'image GIMPHuginImageMagickInkscape
Matériel Enregistreur TVPlustek PhotoFilm 7400Terratec
Divers Chaine TV et langue audioVidéo