Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/05/2020, à 00: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 18/05/2020, à 00: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, à 08: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, à 09: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.  smile

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 0t1 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, à 10: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, à 12: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, à 12: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, à 13: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

En ligne

#8 Le 12/05/2020, à 13: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, à 14: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, à 16: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, à 17: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, à 18:19

erresse

Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video

cristobal78 a écrit :

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 résolu, 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, à 19:26

cristobal78

Re : (résolu) ffmpeg : supprimer une ou plusieurs séquences d'une video

@ erresse

bien vu  ! smile
Je vais essayer selon ta procédure : option copy.

@ grigouille

super ta Cde !
Bravo et Merci smile smile smile
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 big_smile

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, à 19: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, à 21: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, à 20: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  smile

Dernière modification par cristobal78 (Le 15/05/2020, à 17:15)


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne