Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2700 connectés 

  FORUM HardWare.fr
  Video & Son
  Traitement Vidéo

  Couper X temps au début et fin de plusieurs vidéos en même temps

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Couper X temps au début et fin de plusieurs vidéos en même temps

n°2050102
burnout293
Posté le 26-08-2016 à 17:40:03  profilanswer
 

Bonjour,
 
Je cherche un moyen de supprimer facilement le générique de début et de fin de 120 épisodes d'une série. Autrement dit un logiciel découpage de vidéo en masse ^^
J'arrête pas de chercher mais je trouve aucun logiciel pour ça. Vous pourriez m'aider s'il vous plait ? :)

mood
Publicité
Posté le 26-08-2016 à 17:40:03  profilanswer
 

n°2050131
arnuche
Posté le 26-08-2016 à 21:01:24  profilanswer
 

Je pense qu'il doit y avoir moyen avec ffmpeg.
Il faut créer un fichier bat qui inclut une commande qui va exécuter une action sur tous les fichiers présents dans un dossier, voir ce tuto ;
http://forum.videohelp.com/threads [...] ith-ffmpeg
Il faudra bien sûr adapter le script en fonction de tes besoins et trouver le moyen de faire de la découpe sur des keyframes sans ré-encodage.
Et je pense que ffmpeg.exe peut être dans un autre dossier que les vidéos, du moment que son adresse est précisée dans la commande.
Par contre il pourrait y avoir un souci au cas où les épisodes n'ont pas tous la même durée, en tout cas si tu veux découper une partie à la fin puisque le générique de fin ne commencera pas toujours au même endroit.
 
Voici une commande qui marche chez moi pour enlever la 1ère minute et garder ce qui suit quelle que soit la durée ;

Code :
  1. C:\ffmpeg\ffmpeg.exe -i "P:\ma vidéo.mkv" -c copy -ss 00:01:00.000 "F:\test cut.mkv"


autre exemple pour garder 2 minutes à partir de la 1ère minute, on rajoute -t ;

Code :
  1. C:\ffmpeg\ffmpeg.exe -i "P:\ma vidéo.mkv" -c copy -ss 00:01:00.000 -t 00:02:00.000 "F:\test cut b.mkv"


Donc si tous tes épisodes font 52 minutes et que tu veux garder de 3' à 49' (il te restera donc 46'), tu fais ça (exemple pour une seule vidéo) ;

Code :
  1. C:\ffmpeg\ffmpeg.exe -i "P:\ma vidéo.mkv" -c copy -ss 00:03:00.000 -t 00:46:00.000 "F:\test cut c.mkv"


 
Mais ce n'est pas un batch, voici ce que ça devrait donner dans un batch (à mettre dans un fichier .bat) ;

Code :
  1. for %%a in ("*.mkv" ) do C:\ffmpeg\ffmpeg.exe -i "%%a" -c copy -ss 00:03:00.000 -t 00:46:00.000 "newfiles\%%~na.mkv"
  2. pause


Ça vient d'une autre commande trouvée dans le lien ci-dessus et je l'ai adapté mais je n'ai pas encore testé le batch.
Le bat c'est juste un fichier txt dont tu changes l'extension en bat. Tu le mets dans le répertoire des vidéos, tu double-cliques dessus et ça lancera le processus.
 
Pour installer ffmpeg, il faut rajouter un truc dans les variables d’environnement de Windows ;
http://www.eric-pidoux.com/tutoria [...] indows-mac


Message édité par arnuche le 26-08-2016 à 21:04:32
n°2050133
burnout293
Posté le 26-08-2016 à 21:05:20  profilanswer
 

Eh ba merci beaucoup, t'as bien compris ce que je cherchais a faire et tu m'as vraiment bien aidé =D En effet y a un générique à la fin et les épisodes n'ont pas tous la même durée, du coup je suis marron x) mais je vais continuer a chercher un truc pour ca.
J'essaierai ca plus tard, la pas le temps, mais merci Beaucoup Arnuche =D

n°2050136
arnuche
Posté le 26-08-2016 à 21:17:17  profilanswer
 

S'ils n'ont pas tous la même durée, tu ne pourras bien sûr pas trouver une seule commande valable pour toutes les vidéos, tu devras les faire une à une.
Ou alors tu acceptes de garder la fin et quand tu arrives au générique de fin tu passes à la vidéo suivante (si tu veux en lire plusieurs d'affilée).
C'est surtout enlever le début qui est utile, et on suppose que le générique de début a toujours la même durée.

n°2050137
burnout293
Posté le 26-08-2016 à 21:19:15  profilanswer
 

Oui en effet. Après l'idée c'était de mettre le générique au début, enfilé les 500 épisodes et mettre le générique de fin, le tout en un film. mais t'inquiète je ferait ca a la main du coup ;) Merci

n°2050156
arnuche
Posté le 26-08-2016 à 23:06:43  profilanswer
 

Tu peux toujours utiliser le script pour couper le début (sauf du 1er épisode), ce sera déjà ça.

n°2050218
arnuche
Posté le 27-08-2016 à 16:55:07  profilanswer
 

J'ai testé le batch ci-dessus, ça marche  :)  à condition qu'il y ait un dossier nommé newfiles dans le même dossier que les vidéos d'origine, mais il est préférable d'envoyer les nouvelles vidéos vers un autre disque dur pour gagner du temps (sinon le même DD lit et écrit en même temps). Dans ce cas on modifiera l'adresse pour le répertoire de sortie, donc on remplace
"newfiles\%%~na.mp4"
par
"F:\%%~na.mp4"
ou toute autre adresse bien sûr, du moment qu'elle commence par une lettre de partition, sinon il ouvre les fichiers mais ne parvient pas à les exporter.
Je recopie la bonne commande ici ;

Code :
  1. for %%a in ("*.mkv" ) do C:\ffmpeg\ffmpeg.exe -i "%%a" -c copy -ss 00:03:00.000 -t 00:46:00.000 "F:\%%~na.mkv"
  2. pause


 
On peut aussi rajouter du texte dans les noms de fichiers d'export pour les différencier des originaux en rajoutant quelque chose derrière %%~na, par exemple cut, ce qui donnera ;

Code :
  1. for %%a in ("*.mkv" ) do C:\ffmpeg\ffmpeg.exe -i "%%a" -c copy -ss 00:03:00.000 -t 00:46:00.000 "F:\%%~na cut.mkv"
  2. pause


Pour je ne sais quelle raison, le forum rajoute un espace dans ("*.mkv" ) entre le 2ème guillemet et la parenthèse alors que je n'en ai pas tapé. :??:  
 
2 autres choses possibles ;
-ne pas mettre la ligne pause qui ne sert qu'à laisser la console DOS ouverte à la fin des opérations
-exporter dans le dossier d'origine en mettant juste "%%~na.mkv" au lieu de "F:\%%~na.mkv", mais il faudra changer le nom (comme j'expliquais ci-dessus) ou l'extension sinon il demandera pour chaque fichier s'il doit écraser ou pas l'original, ce qui n'a bien sûr aucun sens pour un batch dont le but est de gagner du temps et pas de valider un réglage à chaque fichier.


Message édité par arnuche le 27-08-2016 à 17:04:36
n°2050236
burnout293
Posté le 27-08-2016 à 20:10:59  profilanswer
 

Je viens de penser, est-ce que c'est possible d'obtenir la durée de chaques épisodes ?

n°2050240
arnuche
Posté le 27-08-2016 à 20:45:20  profilanswer
 

Par batch tu veux dire ? Je ne sais pas, il y a MediaInfo qui est le plus simple pour analyser une vidéo.
Ça te servirait à quoi ?
Mais je viens de trouver ça ;
http://sametmax.com/obtenir-les-in [...] ec-ffmpeg/
Voir le message plus bas concernant FFprobe qui est livré avec FFmpeg.
 
https://trac.ffmpeg.org/wiki/FFprobeTips

n°2050241
arnuche
Posté le 27-08-2016 à 21:04:17  profilanswer
 

J'ai trouvé une commande qui marche pour extraire plein d'infos et les imprimer dans un fichier ini (ou xml, json ...) ;

Code :
  1. C:\ffmpeg\ffprobe.exe -v quiet -print_format ini -show_format -show_streams "P:\ma vidéo.mp4" > "P:\ma vidéo.ini"


ou txt ;

Code :
  1. C:\ffmpeg\ffprobe.exe -v quiet -show_format -show_streams "P:\ma vidéo.mp4" > "P:\ma vidéo.txt"


Mais je ne sais pas s'il y a moyen de rassembler les infos de plusieurs vidéos dans un seul fichier.
 
 
Pour afficher juste la durée il y a ça qui donne la durée en secondes ;

Code :
  1. C:\ffmpeg\ffprobe.exe -v quiet -show_entries format=duration "P:\ma vidéo.mp4" > "P:\ma vidéo.txt"


donne ;
[FORMAT]
duration=67.803000
[/FORMAT]
 
 
 
ou dans un format plus classique ;

Code :
  1. C:\ffmpeg\ffprobe.exe -v quiet -show_entries format=duration -sexagesimal "P:\ma vidéo.mp4" > "P:\ma vidéo.txt"


donne ;
[FORMAT]
duration=0:01:07.803000
[/FORMAT]
 
 
batch (à mettre dans .bat) qui crée 1 fichier txt par vidéo ;

Code :
  1. for %%a in ("*.mp4" ) do C:\ffmpeg\ffprobe.exe -v quiet -show_entries format=duration -sexagesimal "%%a" > "%%~na duree.txt"


 
si on écrit durée dans "%%~na durée.txt", le fichier créé contiendra le mot durÚe, donc c'est mieux de mettre duree.
 
 
 
Sinon MediaInfo peut ouvrir un dossier (file, open, folder) et créer un fichier txt (ou autre) qui rassemblera tout dans un seul fichier (file, export).
Mais ça contient toutes les infos, pas juste la durée, et en plus il est moins précis que ffprobe, il manque les secondes.


Message édité par arnuche le 27-08-2016 à 22:01:32
mood
Publicité
Posté le 27-08-2016 à 21:04:17  profilanswer
 

n°2050296
arnuche
Posté le 28-08-2016 à 10:34:10  profilanswer
 

En fait il y a toujours moyen de combiner les fichiers txt facilement ;
http://www.wikihow.com/Merge-Text- [...] and-Prompt
 
Reste plus qu'à trouver le moyen d'exporter le nom parce qu'avec juste la durée, tu ne vas pas t'y retrouver.

n°2050322
burnout293
Posté le 28-08-2016 à 15:07:10  profilanswer
 

L'idée c'était de traiter fichier par fichier :
- Enlever les 30 premières secondes de la vidéo (car 30sec de generique de début)
- Obtenir la durée (disons 3min20)
- Terminer la vidéo à 2min50 (car 30 sec de générique de fin)

n°2050329
arnuche
Posté le 28-08-2016 à 16:19:08  profilanswer
 

Ben oui mais tu ne pourras pas automatiser le processus puisque les vidéos ont des durées différentes.
Ou alors il faudrait trouver un script qui permet de couper x secondes avant la fin, quelle que soit la durée (en obtenant la durée et en en soustrayant x secondes).

n°2051328
naldo
Posté le 04-09-2016 à 01:55:22  profilanswer
 

Drap.
Il y a un TU concernant ffmpg où je pourrais poster ?
Parce que je galère dessus à écrire une ligne  pour encoder en gardant la couche alpha...
Merci !

n°2051333
arnuche
Posté le 04-09-2016 à 10:41:11  profilanswer
 

naldo a écrit :

Il y a un TU concernant ffmpg où je pourrais poster ?


Non mais je suppose qu'il n'y a aucun inconvénient à ce que tu crées un topic pour poser ta question. Et tu peux poster le lien ici.

n°2051378
honrisse
Posté le 04-09-2016 à 17:17:42  profilanswer
 

burnout293 a écrit :

L'idée c'était de traiter fichier par fichier :
- Enlever les 30 premières secondes de la vidéo (car 30sec de generique de début)
- Obtenir la durée (disons 3min20)
- Terminer la vidéo à 2min50 (car 30 sec de générique de fin)


 
Si une solution n'a pas déjà été trouvée, il y a ça (pas testé) : Cut last 30 seconds off ends of videos using ffmpeg in a batch file in Windows.

Message cité 1 fois
Message édité par honrisse le 04-09-2016 à 17:19:24
n°2051379
arnuche
Posté le 04-09-2016 à 17:21:43  profilanswer
 

Pas mal, je me demande pourquoi il faut 2 bat mais c'est à tester.

n°2051381
honrisse
Posté le 04-09-2016 à 17:28:15  profilanswer
 

honrisse a écrit :


 
Si une solution n'a pas déjà été trouvée, il y a ça (pas testé) : Cut last 30 seconds off ends of videos using ffmpeg in a batch file in Windows.


 
Et il y a aussi (doc) pour couper à la fin de la vidéo facilement

Code :
  1. -sseof position (input/output)


Citation :


Like the -ss option but relative to the "end of file". That is negative values are earlier in the file, 0 is at EOF.


 
Source : FFMPEG: get last 10 seconds.


Message édité par honrisse le 04-09-2016 à 17:33:36
n°2051384
arnuche
Posté le 04-09-2016 à 18:01:42  profilanswer
 

Encore mieux !
Mais dans cet exemple il garde la fin au lieu de l'exclure, il faut trouver le moyen de faire l'inverse.

n°2052398
ryoz
Posté le 12-09-2016 à 17:15:31  profilanswer
 

Bonjour les amis
 
Merci pour ces infos,
Personnellement j'ai crée un script VBA qui me crée automatiquement le batch dans la fenêtre d’exécution de Visual basic.
Ouvrir Excel + activer la fenêtre d’exécution (affichage > fenêtre d’exécution ou ctrl+g)
Avant la première exécution, dans outils > référence, cocher  'Microsoft Shell Control and Automation'
Une dernière chose, si votre explorateur Windows n'est pas en mesure d'afficher le temps de la vidéo, installez un pack de codec ou Icaros_v3 sinon le script ne fonctionnera pas.
On voit toujours le nom, la taille, la derniere date de modif, mais de nombreuses propriétés ne s'affichent pas nativement dans Windows.
 
J'ai fait le script pour des .avi, mais c'est facilement modifiable.
 

Code :
  1. Sub PropriétésFichiersAVI()
  2. Dim objShell As Object, strFileName As Object
  3. Dim objFolder As Folder
  4. Dim Resultat, GenDebut, GenFin  As String
  5. Dim i As Byte
  6. Dim j As Integer
  7. Dim H1, H2 As Date
  8. Dim repert As String
  9. GenDebut = "00:00:23"
  10. GenFin = "00:00:13"
  11. Dim repcible As FileDialog
  12. Set repcible = Application.FileDialog(msoFileDialogFolderPicker)
  13. repcible.Show
  14. repert = repcible.SelectedItems(1)
  15. Set objShell = CreateObject("Shell.Application" )
  16. 'On double la parenthese pour passer le chemin en parametre
  17. Set objFolder = objShell.Namespace((repert))
  18. ' ou Set objFolder = objShell.Namespace(("c:\tmp" ))
  19. 'Exit Sub
  20. ''boucle sur les fichiers "avi" du répertoire
  21. For Each strFileName In objFolder.Items
  22.         'For j = 0 To 50
  23.         'Debug.Print j & " = " & objFolder.GetDetailsOf(strFileName, j) & " "
  24.         'Next j
  25. ''attention à l'écriture de ".avi" : sensible aux majuscules et minuscules
  26. 'Pour que la détection fonctionne, il faut que l'extention des fichiers ne soit pas masquée dans l'explorateur windows
  27.     If Right(objFolder.GetDetailsOf(strFileName, 0), 4) = ".avi" Or Right(objFolder.GetDetailsOf(strFileName, 0), 4) = ".AVI" Then
  28.     H1 = CDate(GenDebut) + CDate(GenFin)
  29.     H2 = CDate(objFolder.GetDetailsOf(strFileName, 27))
  30.     'Debug.Print Format(H1 - H2, "hh:mm:ss" )
  31.     'Debug.Print "AAA" & i & strFileName & objFolder.GetDetailsOf(strFileName, 0) & " " & objFolder.GetDetailsOf(strFileName, 1) & " " & objFolder.GetDetailsOf(strFileName, 2) & " " & objFolder.GetDetailsOf(strFileName, 3) & " " & objFolder.GetDetailsOf(strFileName, 4) & " " & objFolder.GetDetailsOf(strFileName, 5) & " " & objFolder.GetDetailsOf(strFileName, 6)
  32.         'For j = 0 To 50
  33.         'Debug.Print j & " = " & objFolder.GetDetailsOf(strFileName, j) & " "
  34.         'Next j
  35.         Debug.Print "C:\tmp\ffmpeg.exe -i " & Chr(34) & "C:\Tmp\convert\" & objFolder.GetDetailsOf(strFileName, 0) & Chr(34) & _
  36.         " -c copy -ss 00:00:23.000 -t " & Format(H2 - H1, "hh:mm:ss" ) & " " & Chr(34) & "C:\Tmp\convert\" & _
  37.         "New-" & objFolder.GetDetailsOf(strFileName, 0) & Chr(34)
  38.     End If
  39. Next
  40. End Sub


 
 
Il suffit dans les params de mettre le temps de generique du début et celui de fin
GenDebut = "00:00:23"
GenFin = "00:00:13"
ensuite lancer le script et sélectionnez le rep contenant les vidéos.
La nouvelle vidéo sans générique sera préfixée de "New-". Episode 01.avi devient New-Episode 01.avi
 
 
et ça générè le script
exemple:  
C:\tmp\ffmpeg.exe -i "C:\Tmp\convert\Episode 01.avi" -c copy -ss 00:00:23.000 -t 00:03:00 "C:\Tmp\convert\New-Episode 01.avi"
C:\tmp\ffmpeg.exe -i "C:\Tmp\convert\Episode 02.avi" -c copy -ss 00:00:23.000 -t 00:03:25 "C:\Tmp\convert\New-Episode 02.avi"
C:\tmp\ffmpeg.exe -i "C:\Tmp\convert\Episode 03.avi" -c copy -ss 00:00:23.000 -t 00:03:37 "C:\Tmp\convert\New-Episode 03.avi"
 
J'espere que ca vous aidera.
Derniere chose, sur Internet je vois sur de nombreux forum que la propriete duree est 21, mais chez moi c'est 27 ==> (objFolder.GetDetailsOf(strFileName, 27)
 
Pour voir cette info, décommentez le bloc  
       For j = 0 To 50
       Debug.Print j & " = " & objFolder.GetDetailsOf(strFileName, j) & " "
       Next j
 
Je vais créer un VBS pour me passer d'excel avec création direct du .bat
 


Message édité par ryoz le 12-09-2016 à 17:26:34
n°2052444
arnuche
Posté le 13-09-2016 à 10:30:28  profilanswer
 

Bien vu mais ça me semble nettement plus compliqué que l'exemple (avec 2 bat) posté par honrisse plus haut.
Tu pourrais expliquer comment ffmpeg utilise la durée du générique de fin pour trouver où couper la vidéo ?
C'est surtout la ligne 40 qui m'intéresse, je vois qu'il y a H2 - H1 mais je ne vois pas bien à quelle fonction de ffmpeg ça correspond.

n°2052459
ryoz
Posté le 13-09-2016 à 12:50:43  profilanswer
 

Me again
 
Bon, voici un script en VBS, c'est plus pratique, car plus besoin d'Excel
Cette fois, il suffit de paramétrer  
 
path = "E:\tmp\vb\"  <=== endroit où sont les vidéos
GenDebut = "00:00:23"  <===  Temps du générique de début
GenFin = "00:00:13"  <=== Temps du générique de fin
ffmpeg = "C:\tmp\ffmpeg.exe"  <===  Emplacement de ffmpeg.exe
nomduscript = "monscript.bat"  <=== nom du script de sortie (se génére à l"emplacement des vidéos)
 

Code :
  1. Option Explicit
  2. Dim shellApplication, folderNamespace, fso, Fichier, path, NewFichier, GenDebut, GenFin, H1, H2, H3, temps, headers, i, aHeaders(300), ffmpeg, nomduscript
  3. path = "E:\tmp\vb\"
  4. GenDebut = "00:00:23"
  5. GenFin = "00:00:13"
  6. ffmpeg = "C:\tmp\ffmpeg.exe"
  7. nomduscript = "monscript.bat"
  8.     Set shellApplication = CreateObject("Shell.Application" )
  9.     Set folderNamespace  = shellApplication.Namespace(path)
  10.     '*** Pour Création du fichier texte
  11.     Set fso = WScript.CreateObject("Scripting.FileSystemObject" )
  12. Fichier = path & nomduscript
  13. Set NewFichier = fso.CreateTextFile(Fichier,TRUE)
  14. 'For i = 0 to 289
  15. ' NewFichier.WriteLine (i & vbtab & aHeaders(i) & ": " & folderNamespace.GetDetailsOf(fileName, i))
  16. 'Next
  17. Dim fileName   
  18.     For Each fileName in folderNamespace.Items
  19.         If LCase(Right(fileName,4))=".avi" Then
  20.  H1 = CDate(GenDebut) + CDate(GenFin)
  21.  H2 = CDate(folderNamespace.GetDetailsOf(fileName, 27))
  22.  H3 = H2 - H1
  23.  temps = FormatDateTime(H3,vbLongTime)
  24.    NewFichier.WriteLine ( ffmpeg & " -i " & Chr(34) & path & folderNamespace.GetDetailsOf(fileName, 0) & Chr(34) & _
  25.    " -c copy -ss " & GenDebut & ".000 -t " & temps & ".000 " & Chr(34) & path & _
  26.    "New-" & folderNamespace.GetDetailsOf(fileName, 0) & Chr(34))
  27.         End If
  28.     Next
  29. WScript.Echo "-OK- votre script dans ==> " & Fichier
  30. '*** Destruction des objets
  31. Set fso = Nothing
  32. WScript.Quit


 
Voila, ya plus qu'a


Message édité par ryoz le 13-09-2016 à 12:55:46
n°2052460
ryoz
Posté le 13-09-2016 à 12:53:25  profilanswer
 

Salut Arnuche, c'est tout simple, je prends le gen de début + celui de fin (ex=30 + 20)
dans ffmpeg "-ss" supprime 30 sec au début et "-t" c'est le temps de video que l'on veut apres le générique.
Donc le temps total de video à la fin doit faire : Le temps complet - 30 (gen début) - 20 (gen fin)
Si la video fait 20 min, donc on coupe les 30s du générique et on garde 19min10 de video (20min -30s -20s).
Au final, une video de 19min10 sans les 30sec de début et sans les 20sec de fin :)
 
Je confirme que ca fonctionne nikel, j'ai deja coupé plein de videos (kamelott, scene de menage, ...)

Message cité 1 fois
Message édité par ryoz le 13-09-2016 à 18:01:00
n°2052535
arnuche
Posté le 13-09-2016 à 20:53:25  profilanswer
 

ryoz a écrit :

Salut Arnuche, c'est tout simple, je prends le gen de début + celui de fin (ex=30 + 20)
dans ffmpeg "-ss" supprime 30 sec au début et "-t" c'est le temps de video que l'on veut apres le générique.
Donc le temps total de video à la fin doit faire : Le temps complet - 30 (gen début) - 20 (gen fin)
Si la video fait 20 min, donc on coupe les 30s du générique et on garde 19min10 de video (20min -30s -20s).
Au final, une video de 19min10 sans les 30sec de début et sans les 20sec de fin :)


Merci mais ça j'avais compris  :p , je voulais savoir précisément comment tu intègres ça dans une commande de ffmpeg.
Je vois que tu as mis à la ligne 40 ceci ;
-t " & Format(H2 - H1, "hh:mm:ss" ) &
précédé à la ligne 34 de ;
'Debug.Print Format(H1 - H2, "hh:mm:ss" )
Je me doute que les 2 sont liés mais quel programme fait ce calcul de la ligne 34 pour obtenir la position (le timecode) de coupe de fin utilisée à la ligne 40 ?
Et comment se fait-il que ffmpeg comprenne la fonction Format(H2 - H1, "hh:mm:ss" ) qui ne ressemble pas aux scripts habituels de ffmpeg ?


Message édité par arnuche le 13-09-2016 à 20:58:47
n°2052543
ryoz
Posté le 13-09-2016 à 21:44:45  profilanswer
 

prends plutot le vbs qui est beaucoup plus simple et sur le meme principe.
Ca crée un .bat qu'il n'y a plus qu'à executer

 

Pour repondre à ta question, le script crée une ligne du type
C:\tmp\ffmpeg.exe -i "C:\Tmp\convert\Episode 03.avi" -c copy -ss 00:00:23.000 -t 00:03:37 "C:\Tmp\convert\New-Episode 03.avi"

 

Dans ffmpeg, tu ne verra pas Format(H2 - H1, "hh:mm:ss" , cette ligne donne juste la difference en H1 et H2 en format hh:mm:ss, ex : 00:42:15


Message édité par ryoz le 13-09-2016 à 21:59:45
n°2052548
arnuche
Posté le 13-09-2016 à 22:44:21  profilanswer
 

Ok, mais tu n'as pas dit qui faisait ce calcul de H2 - H1 pour obtenir -t 00:03:37, puisque ce n'est visiblement pas ffmpeg.
Et il n'y aurait pas un autre moyen que ces complexes et longs scripts pour obtenir ce timing de fin ?
Ce serait bien de pouvoir intercaler d'une autre manière dans un simple script cette manière de calculer le timing, une sorte de parenthèse dans un script du genre du tien ;
C:\tmp\ffmpeg.exe -i "C:\Tmp\convert\Episode 03.avi" -c copy -ss 00:00:23.000 -t 00:03:37 "C:\Tmp\convert\New-Episode 03.avi"
mais avec un renvoi à H2 - H1 à la place de 00:03:37.
En fait le plus simple pour l'instant reste le 1er posté par honrisse ;
https://superuser.com/questions/657 [...] in-windows


Message édité par arnuche le 13-09-2016 à 22:46:04
n°2052551
ryoz
Posté le 13-09-2016 à 23:05:08  profilanswer
 

C'est le script VB qui fait ce calcul
Essaye le script VBS, en 2sec, tu obtiens le batch complet.
Apres, je n'aime pas trop le dos qui est trop limité à mon gout.
Disons que je me suis fait un tool, donc je l'ai partagé.
Le 1er en VBA est trop complexe, car il faut excel et activer une refenrence.
Par contre en VBS, juste un double-clic et c'est fini
Je posterai une video youtube pour montrer le fonctionnement


Message édité par ryoz le 13-09-2016 à 23:06:32
n°2052553
arnuche
Posté le 13-09-2016 à 23:30:24  profilanswer
 

Donc tu mets tout ça dans un bat et il ne faut rien installer pour le faire fonctionner ?

n°2052560
ryoz
Posté le 14-09-2016 à 08:59:09  profilanswer
 

Non, absolument rien à installer
 
Tu prends le script, tu l'enregistres dans un fichier .vbs (comme tu le ferais pour un .bat, mais .vbs)
Tu double-clic dessus et ca te créé le .bat complet à l'endroit où tu as les videos à couper.  
Ensuite, tu exécute le .bat.
 
Voir la video  
https://youtu.be/tA14M_boqpM
1min40, le temps de présenter, modifier le script, l’exécuter et couper 9 vidéos (de courte durée pour la présentation)
 
La 1ere fois il faut adapter  
path = "E:\tmp\vb\"  <=== endroit où sont les vidéos
GenDebut = "00:00:23"  <===  Temps du générique de début
GenFin = "00:00:13"  <=== Temps du générique de fin
ffmpeg = "C:\tmp\ffmpeg.exe"  <===  Emplacement de ffmpeg.exe
nomduscript = "monscript.bat"  <=== nom du script de sortie (se génére à l"emplacement des vidéos)  
 
Les fois suivantes, juste les 3 premiers, car ffmpeg restera au meme endroit et le nom du script n'a pas besoin de changer.
Je pourrais même ne passer que par un vbs sans création de .bat, mais ça me permet de vérifier que tout est correct avant l’exécution.
 
 
Juste une précision, si vous utilisez bloc-note pour enregistrer le script, il se peux que vous ayez l'erreur "Erreur de compilation Ms VBScript, caractere inconnu"
Donc plutôt prendre notepad++
plus d'information ici http://informatiquesecours.com/inf [...] lation.pdf

Message cité 1 fois
Message édité par ryoz le 14-09-2016 à 14:39:54
n°2052864
arnuche
Posté le 17-09-2016 à 17:12:27  profilanswer
 

Merci, à retenir !
Mais je voudrais revenir à ma question concernant la durée ; tu disais "c'est le script VB qui fait ce calcul", mais il fait ça comment ? Il me semble qu'il n'utilise pas ffmpeg pour ce faire.
 
Et la question subsidiaire : y a-t-il moyen de transformer ton script pour lui faire utiliser ffprobe (qu'on reçoit avec ffmpeg) pour calculer la durée ?
Comme dans cet exemple ;
https://superuser.com/questions/657 [...] in-windows

n°2052979
honrisse
Posté le 19-09-2016 à 00:18:16  profilanswer
 

arnuche a écrit :

Pas mal, je me demande pourquoi il faut 2 bat mais c'est à tester.


 
Je me demande si ce n'est pas parce que sinon le script lance tous les travaux en même temps (flemme de tester, je n'utilise jamais de script bat) ? En appelant un script qui fait le job avec FFmpeg, cela permet peut être de lancer les travaux séquentiellement ?
 

arnuche a écrit :

Merci, à retenir !
Mais je voudrais revenir à ma question concernant la durée ; tu disais "c'est le script VB qui fait ce calcul", mais il fait ça comment ? Il me semble qu'il n'utilise pas ffmpeg pour ce faire.


 
Je ne connais pas VBS mais a priori :


ryoz a écrit :

Non, absolument rien à installer
 
Tu prends le script, tu l'enregistres dans un fichier .vbs (comme tu le ferais pour un .bat, mais .vbs)
Tu double-clic dessus et ca te créé le .bat complet à l'endroit où tu as les videos à couper.  
Ensuite, tu exécute le .bat.
 
Voir la video  
https://youtu.be/tA14M_boqpM
1min40, le temps de présenter, modifier le script, l’exécuter et couper 9 vidéos (de courte durée pour la présentation)
 
La 1ere fois il faut adapter  
path = "E:\tmp\vb\"  <=== endroit où sont les vidéos
GenDebut = "00:00:23"  <===  Temps du générique de début
GenFin = "00:00:13"  <=== Temps du générique de fin
ffmpeg = "C:\tmp\ffmpeg.exe"  <===  Emplacement de ffmpeg.exe
nomduscript = "monscript.bat"  <=== nom du script de sortie (se génére à l"emplacement des vidéos)  
 
Les fois suivantes, juste les 3 premiers, car ffmpeg restera au meme endroit et le nom du script n'a pas besoin de changer.
Je pourrais même ne passer que par un vbs sans création de .bat, mais ça me permet de vérifier que tout est correct avant l’exécution.
 
 
Juste une précision, si vous utilisez bloc-note pour enregistrer le script, il se peux que vous ayez l'erreur "Erreur de compilation Ms VBScript, caractere inconnu"
Donc plutôt prendre notepad++
plus d'information ici http://informatiquesecours.com/inf [...] lation.pdf


 
C'est sympa de partager cette solution, c'est toujours bien d'avoir plusieurs méthodes pour résoudre un problème.

n°2052992
arnuche
Posté le 19-09-2016 à 09:16:44  profilanswer
 

honrisse a écrit :

Je ne connais pas VBS mais a priori :

Ok, dans ce cas ffprobe est peut-être plus précis pour déterminer la durée.

n°2053022
ryoz
Posté le 19-09-2016 à 12:36:09  profilanswer
 

Effectivement, ça récupère la durée que tu visualises dans l’explorateur Windows.  
Au milieu du script, il y a une boucle qu'il faut décommenter pour avoir toutes les propriétés, et effectiement 27, c'est la durée de la video en secondes. ffmpeg est donc plus précis car il va jusqu'au millième.

n°2053024
ryoz
Posté le 19-09-2016 à 12:41:01  profilanswer
 

on peut tout à fait utiliser ffprobe dans le script pour récupérer la durée, mais ca necessite quelques modifs.  
Il faut lancer la commande ffprobe précise et récuperer la valeur de sortie.
Au final, tu ne gagneras pas grand chose.

n°2053151
arnuche
Posté le 20-09-2016 à 09:40:36  profilanswer
 

Ok, si t'as le temps tu peux toujours poster le script modifié  :)

n°2057999
naldo
Posté le 30-10-2016 à 15:00:09  profilanswer
 

Hello,
je me permets de vous demander un peu d'aide pour FFMPEG car je galère.
J'ai créé un topic là
http://forum.hardware.fr/hfr/Video [...] 9980_1.htm
Merci !

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Video & Son
  Traitement Vidéo

  Couper X temps au début et fin de plusieurs vidéos en même temps

 

Sujets relatifs
pb lecture videos gopro sur tele samsung en DLNAGravure vidéos MKV sur BD-R: augmentation de taille
GTX 950 et Vidéos 4Kvidéos partie bas de la vidéo saccade et est verte
Création et montage vidéosHelp, impossible de couper une vidéo sur Premiere Elements
Répartiteur son sur plusieurs zonePlusieurs sources sonores pour plusieurs sorties : comment ?
Problème étrange avec micro-casque Hyper X Cloud !Couper séquences After effect & qualité optimum.
Plus de sujets relatifs à : Couper X temps au début et fin de plusieurs vidéos en même temps


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR