Couper une partie du fichier vidéo de la position de départ à la position de fin avec FFmpeg [dupliquer]

144

Cette question a déjà une réponse ici:

J'ai un fichier vidéo de 30 minutes, mais je veux extraire une vidéo de 00:09:23 à 00:25:33.

Je peux définir la position de départ avec -ss, mais je n’ai pas pu en trouver une pour la position finale. Toute aide s'il vous plaît?

x74x61
la source

Réponses:

244

Installer ffmpeg

Assurez-vous de télécharger une version récente deffmpeg , et n'utilisez pas celle fournie avec votre distribution (par exemple, Ubuntu). Les versions packagées de différentes distributions sont souvent obsolètes et ne se comportent pas comme prévu.

Ou compilez-le vous-même .

Comment couper une vidéo, sans ré-encodage

Utilisez ceci pour couper la vidéo de [start]pour [duration]:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4

Ici, les options ont les significations suivantes:

  • -ssspécifie l'heure de début, par exemple 00:01:23.000ou 83(en secondes)
  • -t spécifie la durée du clip (même format).
  • Récent a ffmpegégalement un drapeau pour indiquer l'heure de fin -to.
  • -c copycopie le premier train de bits vidéo, audio et de sous-titres de l’entrée au fichier de sortie sans les ré-encoder. Cela n'affectera pas la qualité et fera exécuter la commande en quelques secondes.

Comment couper une vidéo, avec réencodage

Si vous laissez cette -c copyoption de côté, ffmpegrecodage automatique de la sortie vidéo et audio en fonction du format choisi. Pour une qualité audio et vidéo supérieure, lisez respectivement le Guide d’encodage x264 et le Guide d’encodage AAC .

Par exemple:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4
slhck
la source
1
Sur Ubuntu 12:10, -c: v et -c: a ne fonctionnait pas. Je devais utiliser "copie -acodec et copie -vcodec" à la place.
Samuel Lampa
1
@Samuel Vous utilisez alors une version obsolète, qui n'est même pas du vrai FFmpeg, mais le fork de Libav. Voir: stackoverflow.com/a/9477756/1109017
slhck
Merci pour cela! si vous ne spécifiez pas de durée, ira-t-elle jusqu'à la fin?
Jeff
@ Jeff Oui! (personnage minimum)
slhck le
3
@Prateek Lorsque vous copiez le flux vidéo binaire (au lieu de le ré-encoder), vous ne pouvez couper qu'au niveau des images clés . S'il existe des images clés aux secondes 1, 2 et 3, mais que vous souhaitez couper à la seconde 1,5, ffmpeg attendra jusqu'à la seconde 2 avant de pouvoir commencer à couper. Cela le rend inexact.
Slhck
26

Je pense que vous pouvez utiliser la commande suivante maintenant.

ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile

Regardez aussi ffmpeg Doc , ou cette page wiki .

sflee
la source
6
ffmpeg -i inputFile -c copy -ss 00:09:23 -to 00:25:33 outputFileversion plus simple
nwgat
3
Je devais utiliser la ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4version (avec -copyts), sinon la découpe était incorrecte (avec un écran noir au début). Merci pour le 2e lien cependant.
Necronomicron
Cela tombe bien, la dernière chose que je voulais était de calculer la durée à partir des points d'extrémité.
Tomasz Gandor
L'option -to répond à la question qui a été posée. Le reste des réponses est soit impertinent, soit obsolète.
James Bowery
12

C'est étrange que personne n'ait suggéré le trim filtre .

Déposez tout sauf la deuxième minute de saisie:

ffmpeg -i INPUT -vf trim=60:120

Ne gardez que la première seconde:

ffmpeg -i INPUT -vf trim=duration=1

Tout laisser tomber sauf du deuxième 13 au deuxième 58:

ffmpeg -i INPUT -vf trim=13:58 OUTPUT
malat
la source
8
Oui, bon à mentionner trimet atrim. Je les utilise habituellement lors du filtrage, mais les utilisateurs doivent noter que le filtrage nécessite un réencodage .
llogan
Tu es mon héros. J'avais cruellement besoin d'un filtre pour le faire.
Fahadash
5

Vous pouvez utiliser ces deux méthodes qui fonctionnent pour Windows et Linux.

Il existe deux manières de diviser des fichiers vidéo par ffmpeg. Le premier est bon en soi, plus que cela - il est plus rapide, mais crée parfois des fichiers de sortie avec certaines failles. Ainsi, dans ces cas, il existe un deuxième moyen de fractionner les fichiers vidéo: il est considérablement plus lent, les fichiers de sortie sont plus volumineux, mais il semble qu’ils soient toujours du même niveau de qualité que les fichiers d’entrée utilisés.

Voie 1:

ffmpeg -ss <start> -i in1.avi -t <duration> -c copy out1.avi

Voie 2:

ffmpeg -ss <start> -i in1.avi -t <duration> out1.avi
  • <start>- le début de la partie d'une vidéo ffmpeg est à couper. Format:, 00:00:00.0000signifiant heures: minutes: secondes: millisecondes.

  • <duration>- la durée de la partie d'une vidéo ffmpeg est à couper. Même format que ci-dessus.

Exemples:

ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 -c copy out1.avi
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 out1.avi

ffmpeg découpe une partie du fichier vidéo à partir de 1 heure 19 minutes 0 secondes. La durée de la séquence vidéo est de 5 minutes 0 secondes.

Christian Wörz
la source
Ok, merci. Je vérifierai la documentation et j'essaierai demain.
juGGaKNot
3
-sameqne signifie pas "qualité identique" et a été supprimé de ffmpeg. Utilisez à la -codec copyplace. De plus, n'oubliez pas l' -tooption.
llogan
J'ai corrigé les commandes de votre citation, car elles étaient plutôt obsolètes. Veuillez ne pas copier-coller les informations sans les citer correctement.
Slhck
-1

Vous pouvez utiliser ceci

ffmpeg -sameq -ss clip_start -t duration  -i  original.ogg  clip.ogg

Ici vous devez donner la durée de la vidéo. c'est à dire. 00: 25: 33-00: 09: 23

daya
la source
1
Comme je l’ai mentionné dans l’autre réponse: Avec votre commande, vous réencodez le fichier, ce qui n’est absolument pas nécessaire, ce qui réduit la qualité et augmente le temps de traitement.
Slhck
-2

J'utilise la syntaxe suivante pour couper une vidéo avec ffmpef:

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

-t est utilisé pour définir la durée en secondes - vous ne pouvez pas spécifier l'heure de fin, mais cela devrait fonctionner pour vous.

Michael Banzon
la source
1
Pourquoi configurez-vous FFmpeg pour réencoder le fichier? Notez que -sameqcela ne signifie pas du tout "même qualité".
Slhck