2017-02-18 3 views
1

Je souhaite découper des parties spécifiques d'une vidéo mp4 et fusionner ces parties pour créer un seul fichier vidéo. C'est pour faire un aperçu animé de la vidéo.FFMPEG: Couper des parties spécifiques d'une vidéo et les fusionner dans un seul fichier

Plus précisément: Découpez ces parties d'une vidéo:

  • Partie 1: heure de début de la coupe = 20% du temps total; heure de fin du coupe = 20% du temps total + 3secondes,
  • Partie 2: 40% du temps total; 40% nof temps total + 3 secondes
  • Partie 3: 60% du temps total; 60% du temps total + 3 secondes
  • Partie 4: 80% du temps total; 80% du temps total + 3 secondes

(Les vidéos sont plus de 3 minutes, donc il ne devrait pas y avoir de chevauchement dans les parties)

ensuite fusionner ces 4 parties dans un nouveau fichier vidéo mp4 . Comment faites-vous cela avec FFMPEG?

Edit: c'est donc aussi loin que je suis arrivé à cette question:

J'ai trouvé des réponses aux questions sur les « super-utilisateur » et « StackExchange » pour ces questions sur FFMPEG: -Comment obtenir des durées vidéo en quelques secondes partie -Couper du fichier vidéo avec des positions de début/fin fichiers -Concatenate mp4

donc: Obtenez le temps total de la vidéo:

$ ffprobe -v error -show_entries format=duration \ 
    -of default=noprint_wrappers=1:nokey=1 -sexagesimal inputvideo.mp4 

Avec le -sexagesimal je devrais obtenir le bon format d'heure à utiliser après.

Découpez partie de la vidéo

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy /path/videopart[number].mp4 

Ici, je ne sais pas: Comment faire une opération sur le temps total (20%, 40% ... puis 20% +3 secondes, 40 % +3 secondes ..) Comment mettre en œuvre correctement dans la ligne de code

Créer un videoparts.txt de fichier avec les noms de fichiers:

$ cat videoparts.txt 
file '/path/videopart1.mp4' 
file '/path/videopart2.mp4' 
file '/path/videopart3.mp4' 
file '/path/videopart4.mp4' 

cela devrait fusionner les dans un seul fichier:

$ ffmpeg -f concat -i videoparts.txt -c copy outputvideo.mp4 
+0

Avez-vous déjà essayé quelque chose? – tyb

Répondre

1

Selon ffmpeg Seeking documentation et Time Duration la seule façon de préciser « le temps de recherche » est en donnant l'heure exacte.

Vous pouvez écrire un script shell pour extraire la durée totale de la vidéo avec ffprobe, calculer les points de départ et appeler ffmpeg avec ces points de départ.