#1 Le 11/05/2020, à 23:29
- cristobal78
(résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
bonjour à tous
en lisant la doc j'ai appris à extraire de mon film "film.mp4" un séquence vidéo comprise entre le temps "t1=10 secondes" et le temps "t2=46 secondes" et à en faire un fichier "extraitdufilm.avi"
ffmpeg -i film.mp4 -ss 00:00:10.00 -to 00:00:46.00 -c:v copy -c:a copy extraitdufilm.avi
Jusque là tout va bien.
Mais ce que je veux faire en réalité c'est carrément supprimer cette scène et rabouter le début et la fin de la vidéo d'origine (donc coller la partie de 0 à 10 avec la partie de 46 à la fin.
Pour ça je n'ai pas trouvé dans la doc.
Quant au man il est tellement compliqué que je m'y perds !
Dernière modification par cristobal78 (Le 17/05/2020, à 23:17)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#2 Le 12/05/2020, à 07:23
- grigouille
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#3 Le 12/05/2020, à 08:31
- cristobal78
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
Salut grigouille
intéressant ce lien sur la concaténation via ffmpeg.
Mais mon pb c'est d'abord de supprimer (avec ffmpeg ???) une séquence indésirable au milieu de la vidéo, par exemple entre les temps t1 et t2.
Si cela est possible avec ffmpeg alors le raboutage de la séquence de 0 a t1 avec le reste de la vidéo c'est dire de t2 jusqu' la fin de la vidéo (qui ont par définition les mêmes codec) devrait se faire tout seul (?????)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#4 Le 12/05/2020, à 09:28
- grigouille
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
Je ne sais pas si la suppression est possible. J'ai toujours découpé puis concaténé les morceaux.
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#5 Le 12/05/2020, à 11:22
- cristobal78
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
Tu veux dire que dans mon cas il faudrait procéder en 3 étapes :
1- extraire de 0 à t1 et l'appeler (par exemple) : "extrait-début"
2- extraire de t2 à la fin et l’appeler : "extrait-fin"
3- concaténer "extrait-début" avec "extrait-fin"
Si c'est ça alors c'est du super lourd surtout si on a plusieurs petites séquences à supprimer !!!
Au départ j'avais pensé utiliser ffmpeg car partout on lit que c'est un couteau suisse du montage vidéo.
Par ailleurs kdenlive ne semble pas répondre à mon pb.
Quant à avidemux je comprends à peu près comment ça marche mais ça prend des heures de traitement, ré-encodage ou je ne sais quoi : supprimer une séquence de 3 mn sur une video de 20 mn ça a pris plus de 30 mn (chez moi) !!
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#6 Le 12/05/2020, à 11:30
- grigouille
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
Je ne sais pas faire autrement.
Je note dans un coin les temps début-fin
je découpe en plusieurs fichiers a1, a2, a3, etc.
Puis je concatène.
Le plus long c'est de repérer les temps. Le reste est assez rapide.
Je ne sais pas faire autrement.
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#7 Le 12/05/2020, à 12:53
- Nasman
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
Petite question en passant :
Est ce que concatenate (cf post #2) gère correctement les informations de temps (reconstruction de l'index temporel).
Je me souviens d'un essai fait avec cat qui donnait bien une vidéo du tout mais dont l'index de temps avait disparu.
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#8 Le 12/05/2020, à 12:56
- Funix
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
perso je fais ça avec avidemux pour couper les plages de pub dans les films que j'enregistre avec ma box et ça me prend quelques minutes à tout casser, bon après je réencode en HEVC et c'est vrai que ça prend du temps, mais bon y a qu'à faire autre chose pendant ce temps là.
FUNIX - https://www.funix.org
Mettez un pingouin dans votre PC
Blog - https://olivier.hoarau.org
Hors ligne
#9 Le 12/05/2020, à 13:13
- grigouille
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
oui, la concatenation avec ffmpeg fonctionne très bien.
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#10 Le 12/05/2020, à 15:49
- cristobal78
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
@ grigouille
Donc je vais suivre ton conseil mais peux tu me confirmer la méthode suivante pour que je sois sur d'avoir bien compris :
1- J'extrais par exemple 3 différentes séquences (de 10 à 20, de 40 à 60 et de 80 à 90) du film "film.mp4" avec ma Cde du post #1 :
ffmpeg -i film.mp4 -ss 00:00:10.00 -to 00:00:20.00 -c:v copy -c:a copy extrait-1.avi
ffmpeg -i film.mp4 -ss 00:00:40.00 -to 00:00:60.00 -c:v copy -c:a copy extrait-2.avi
ffmpeg -i film.mp4 -ss 00:00:80.00 -to 00:00:90.00 -c:v copy -c:a copy extrait-3.avi
2- J'applique cette cde pour concaténer les 3 extraits en un seul nouveau film "new-film.avi" :
ffmpeg -i "concat:extrait-1.avi | extrait-2.avi | extrait-3.avi|" -c copy new-film.avi
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#11 Le 12/05/2020, à 16:00
- grigouille
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
Essaie ceci peut-être
ffmpeg -f concat -safe 0 -i <(for f in extrait-*.avi; do echo "file '$PWD/$f'"; done) -c copy new-film.avi
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#12 Le 12/05/2020, à 17:19
- erresse
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
Quant à avidemux je comprends à peu près comment ça marche mais ça prend des heures de traitement, ré-encodage ou je ne sais quoi : supprimer une séquence de 3 mn sur une video de 20 mn ça a pris plus de 30 mn (chez moi) !!
Avidemux est très rapide si tu ne ré-encode pas le film, c'est le ré-encodage qui est très long, mais ça vaut pour tous les logiciels, ffmpeg compris. Si tu sélectionne et supprime les séquences que tu veux éliminer, puis réécris le film résultant sans changer les codecs (choisir "copy" partout) tu auras ton nouveau film en quelques minutes.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#13 Le 12/05/2020, à 18:26
- cristobal78
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
@ erresse
bien vu !
Je vais essayer selon ta procédure : option copy.
@ grigouille
super ta Cde !
Bravo et Merci
J'ai modifié l'extension avi en mp4 car c'était celle de la vidéo que je voulais "charcuter".
Cela dit ta syntaxe, aussi belle et condensée soit elle,
...... <(for f in .......; do ..... ; done)
n'est pas facile à retenir pour les petits codeurs comme moi
N'y aurait il pas moyen de la décomposer en un peu plus de lignes pour pouvoir mieux suivre - surtout moi !! - les étapes.
Après ça je passerai en "résolu", promis !
----------------
Je viens d'essayer avec avidemux et copy comme suggéré par erresse.
Ca marche bien et très vite comme il le mentionnait dans son post.
Cela dit la vidéo de 10 Mo au départ est de maintenant de 11 Mo après amputation de 30 sec.
Bizarre non ?
Dernière modification par cristobal78 (Le 12/05/2020, à 18:40)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#14 Le 12/05/2020, à 20:50
- grigouille
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
Je n'ai aucun mérite : je l'ai trouvé sur la page ffmpeg concat. C'est très bien expliqué.
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#15 Le 14/05/2020, à 19:24
- cristobal78
Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video
Pour remercier mes "helpers" voici le script que j'ai mis au point pour extraire des séquences vidéo
#!/bin/bash
##############################################################################
# nom du script = video-cut
# D'une vidéo extraire une ou plusieurs séquences video entre "debut" et "fin"
##############################################################################
### variables
erreurtemps="<span color=\"red\">Erreur : la fin est avant le début !</span>\n\nArrêt du programme"
erreurrep="<span color=\"red\">Erreur : le répertoire Documents est introuvable !! </span>\n\nArrêt du programme"
k=0
on_continue=0
# test existence
if [ ! -d "/home/jcc/Documents" ] ; then zenity --error --width=500 --text="$erreurrep" ; exit ; fi
### script
# choisir la video source de l'extraction
video=$(zenity --file-selection --title="Cliquer sur la vidéo à traiter puis valider " --multiple --separator=" ")
var=$video
# pour avoir l'extension de la vidéo on enlève tout ce qui précède le dernier point "."
extension=$(echo ${var##*.})
while [ "$on_continue" -eq "0" ] ; do
k=$((k+1))
# select. du temps début
debut=$(zenity --entry --title="Saisie manuelle de l'heure du début de la séquence" --text "Format = 00:00:00")
# select. du temps fin
fin=$(zenity --entry --title="Saisie manuelle de l'heure de la fin de la séquence" --text "Format = 00:00:00")
# contrôle de validité des temps
if [[ "$fin" < "$debut" ]] ; then zenity --error --width=500 --text="$erreurtemps" ; exit ; fi
# extraction sauvegardée dans le rép. "Documents"
ffmpeg -i "$video" -ss "$debut" -to "$fin" -c:v copy -c:a copy Documents/extrait"$k"."$extension"
zenity --question --title "Suite à donner" --text "Un autre extrait ???"
on_continue=$?
done
ffmpeg -f concat -safe 0 -i <(for f in Documents/extrait*."$extension"; do echo "file '$PWD/$f'"; done) -c copy Documents/new-film."$extension"
Commentaires évidement bienvenus
Dernière modification par cristobal78 (Le 15/05/2020, à 16:15)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne