217 votes

Couper une partie du fichier vidéo de la position de début à la position de fin avec FFmpeg

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'en ai pas trouvé pour la position finale. Je peux vous aider ?

345voto

slhck Points 209720

Installer ffmpeg

Assurez-vous que vous télécharger une version récente de ffmpeg et n'utilisez pas celle qui est fournie avec votre distribution (par exemple Ubuntu). Les versions packagées de diverses 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 la réencoder ?

Utilisez-le pour couper la vidéo de [start] para [duration] :

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

Utilisez-le pour couper la vidéo de [start] a [end] :

ffmpeg -ss [start] -i in.mp4 -to [end] -c copy -copyts out.mp4

Ici, les options signifient ce qui suit :

  • -ss spécifie l'heure de début, par exemple 00:01:23.000 o 83 (en secondes)
  • -t spécifie la durée du clip (même format).
  • Au lieu de -t vous pouvez également utiliser -to qui spécifie l'heure de fin (besoins -copyts si -ss est avant -i pour une recherche plus rapide). Notez que si vous avez utilisé -ss vous devez le soustraire de la -to horodatage. Par exemple, si vous coupez avec -ss 3 -i in.mp4 -to 5 la sortie durera cinq secondes.
  • -c copy copie le premier flux binaire vidéo, audio et de sous-titres de l'entrée vers le fichier de sortie sans les ré-encoder. Cela ne nuit pas à la qualité et permet à la commande de fonctionner en quelques secondes.

Pour plus d'informations, voir https://trac.ffmpeg.org/wiki/Seeking

Comment couper une vidéo, avec réencodage

Si vous laissez de côté le -c copy option, ffmpeg réencodera automatiquement la vidéo et l'audio de sortie en fonction du format que vous avez choisi. Pour une vidéo et un audio de haute qualité, lisez le Guide d'encodage x264 y el Guide de codage AAC respectivement.

Par exemple :

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4

45voto

sflee Points 551

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

Jetez aussi un coup d'œil ffmpeg Doc , oder cette page wiki .

22voto

malat Points 1149

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

Laissez tomber tout sauf la deuxième minute d'entrée :

ffmpeg -i INPUT -vf trim=60:120

Ne gardez que la première seconde :

ffmpeg -i INPUT -vf trim=duration=1

Laissez tomber tout sauf de la seconde 13 à la seconde 58 :

ffmpeg -i INPUT -vf trim=13:58 OUTPUT

8voto

Christian Points 6908

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

Il y a deux façons de diviser les fichiers vidéo avec ffmpeg. La première est bonne en soi, plus que cela - elle est plus rapide, mais crée parfois des fichiers de sortie avec certains défauts. Pour ces cas, il y a donc la deuxième façon de diviser les fichiers vidéo : elle est considérablement plus lente, les fichiers de sortie sont plus gros, 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 que ffmpeg doit couper. Format : 00:00:00.0000 , c'est-à-dire heures:minutes:secondes:millisecondes.

  • <duration> - la durée de la partie d'une vidéo que ffmpeg doit 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 coupe une partie du fichier vidéo à partir de 1 heure 19 minutes 0 seconde. La durée de la séquence vidéo coupée est de 5 minutes 0 secondes.

-3voto

Michael Banzon Points 115

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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X