Couper X temps au début et fin de plusieurs vidéos en même temps - Traitement Vidéo - Video & Son
Marsh Posté le 26-08-2016 à 21:01:24
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 :
|
autre exemple pour garder 2 minutes à partir de la 1ère minute, on rajoute -t ;
Code :
|
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 :
|
Mais ce n'est pas un batch, voici ce que ça devrait donner dans un batch (à mettre dans un fichier .bat) ;
Code :
|
Ç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
Marsh Posté le 26-08-2016 à 21:05:20
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
Marsh Posté le 26-08-2016 à 21:17:17
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.
Marsh Posté le 26-08-2016 à 21:19:15
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
Marsh Posté le 26-08-2016 à 23:06:43
Tu peux toujours utiliser le script pour couper le début (sauf du 1er épisode), ce sera déjà ça.
Marsh Posté le 27-08-2016 à 16:55:07
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 :
|
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 :
|
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.
Marsh Posté le 27-08-2016 à 20:10:59
Je viens de penser, est-ce que c'est possible d'obtenir la durée de chaques épisodes ?
Marsh Posté le 27-08-2016 à 20:45:20
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
Marsh Posté le 27-08-2016 à 21:04:17
J'ai trouvé une commande qui marche pour extraire plein d'infos et les imprimer dans un fichier ini (ou xml, json ...) ;
Code :
|
ou txt ;
Code :
|
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 :
|
donne ;
[FORMAT]
duration=67.803000
[/FORMAT]
ou dans un format plus classique ;
Code :
|
donne ;
[FORMAT]
duration=0:01:07.803000
[/FORMAT]
batch (à mettre dans .bat) qui crée 1 fichier txt par vidéo ;
Code :
|
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.
Marsh Posté le 28-08-2016 à 10:34:10
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.
Marsh Posté le 28-08-2016 à 15:07:10
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)
Marsh Posté le 28-08-2016 à 16:19:08
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).
Marsh Posté le 04-09-2016 à 01:55:22
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 !
Marsh Posté le 04-09-2016 à 10:41:11
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.
Marsh Posté le 04-09-2016 à 17:17:42
burnout293 a écrit : L'idée c'était de traiter fichier par fichier : |
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.
Marsh Posté le 04-09-2016 à 17:21:43
ReplyMarsh Posté le 04-09-2016 à 17:28:15
honrisse a écrit : |
Et il y a aussi (doc) pour couper à la fin de la vidéo facilement
Code :
|
Citation : |
Source : FFMPEG: get last 10 seconds.
Marsh Posté le 04-09-2016 à 18:01:42
Encore mieux !
Mais dans cet exemple il garde la fin au lieu de l'exclure, il faut trouver le moyen de faire l'inverse.
Marsh Posté le 12-09-2016 à 17:15:31
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 :
|
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
Marsh Posté le 13-09-2016 à 10:30:28
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.
Marsh Posté le 13-09-2016 à 12:50:43
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 :
|
Voila, ya plus qu'a
Marsh Posté le 13-09-2016 à 12:53:25
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, ...)
Marsh Posté le 13-09-2016 à 20:53:25
ryoz a écrit : Salut Arnuche, c'est tout simple, je prends le gen de début + celui de fin (ex=30 + 20) |
Merci mais ça j'avais compris , 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 ?
Marsh Posté le 13-09-2016 à 21:44:45
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
Marsh Posté le 13-09-2016 à 22:44:21
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
Marsh Posté le 13-09-2016 à 23:05:08
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
Marsh Posté le 13-09-2016 à 23:30:24
Donc tu mets tout ça dans un bat et il ne faut rien installer pour le faire fonctionner ?
Marsh Posté le 14-09-2016 à 08:59:09
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
Marsh Posté le 17-09-2016 à 17:12:27
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
Marsh Posté le 19-09-2016 à 00:18:16
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 ! |
Je ne connais pas VBS mais a priori :
Code : |
permet de récupérer les informations affichées à propos d'un fichier dans l'explorateur Windows
ryoz a écrit : Non, absolument rien à installer |
C'est sympa de partager cette solution, c'est toujours bien d'avoir plusieurs méthodes pour résoudre un problème.
Marsh Posté le 19-09-2016 à 09:16:44
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.
Marsh Posté le 19-09-2016 à 12:36:09
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.
Marsh Posté le 19-09-2016 à 12:41:01
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.
Marsh Posté le 20-09-2016 à 09:40:36
Ok, si t'as le temps tu peux toujours poster le script modifié
Marsh Posté le 30-10-2016 à 15:00:09
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 !
Marsh Posté le 26-08-2016 à 17:40:03
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 ?