Couper une partie du fichier vidéo de la position de départ à la position finale 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'ai pas pu trouver un pour la position finale. Toute aide, s'il vous plaît?

    Installez ffmpeg

    Assurez-vous de télécharger une version récente de ffmpeg , et n'utilisez pas celle qui accompagne votre distribution (p. Ex. Ubuntu). Les versions emballées provenant de diverses distributions sont souvent dépassées et ne se comportent pas comme prévu.

    Ou compilez-vous vous-même .

    Comment couper une vidéo, sans recodage

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

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

    Ici, les options signifient ce qui suit:

    • -ss spécifie l'heure de début, p.ex. 00:01:23.000 ou 83 (en secondes)
    • -t spécifie la durée du clip (même format).
    • La ffmpeg récente a également un drapeau pour fournir l'heure de fin avec -to .
    • -c copy copie le premier flux de bits vidéo, audio et sous-titres de l'entrée vers le fichier de sortie sans les coder à nouveau. Cela ne nuira pas à la qualité et fera exécuter la commande en quelques secondes.

    Notez qu'avec les anciennes versions de ffmpeg, cette commande peut ne pas être précise lors de la copie des flux de bits.

    Comment couper une vidéo, sans recodage – méthode précise

    Si vous avez une ancienne version ffmpeg et que vous voulez la précision du cadre, utilisez ceci à la place:

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

    Cependant, il y a un inconvénient. La vidéo devra être décodée jusqu'à ce qu'elle atteigne la position impliquée par -ss , et seulement alors elle commence à copier le flux de bits. Cela peut prendre beaucoup de temps, surtout pour les vidéos vraiment longues.

    Comment couper une vidéo, avec recodage

    Si vous quittez l'option de -c copy , ffmpeg automatiquement la vidéo de sortie et l'audio selon le format que vous avez choisi. Pour une vidéo et un audio de haute qualité, lisez le Guide de codage x264 et le 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 

    Comme expliqué dans Seeking with FFmpeg ): Lors de l'utilisation de -ss avant -i sur FFmpeg 2.1 et plus récente, la recherche est exacte lorsque vous recodez la vidéo (c.-à-d., Pas en utilisant -c copy ). Donc, vous n'avez pas à vous soucier de mettre -ss après -i pour la vitesse.


    Conversion des points finaux en durée

    Si vous devez utiliser une ancienne version de ffmpeg et que vous ne pouvez pas utiliser l'option -to , vous pouvez créer une liste d'édition des points d'entrée et de sortie et les convertir en points avec durée. Pour cela, vous pouvez utiliser ce script Ruby que j'ai écrit, qui calcule la différence:

     require "Time" def time_diff(time1_str, time2_str) t = Time.at( Time.parse(time2_str) - Time.parse(time1_str) ) (t - t.gmt_offset).strftime("%H:%M:%S.%L") end 

    Par exemple:

     time_diff("00:09:23.000", "00:25:33.000") => "00:16:10.000" 

    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 .

    C'est étrange que personne ne suggère le filtre de trim .

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

     ffmpeg -i INPUT -vf trim=60:120 

    Ne conservez que la première seconde:

     ffmpeg -i INPUT -vf trim=duration=1 

    Déposez tout, sauf de la deuxième 13 à la seconde 58:

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

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

    Il existe deux façons de diviser les fichiers vidéo par ffmpeg. Le premier est bon en soi, plus que cela – il est plus rapide, mais parfois crée des fichiers de sortie avec certains défauts. DdddMMMMMMMMMMMMMMdMMMMMdMMMMMMMMMMMMMMMMMM AlAAAFMMMMMMMMMMMMMMMM AlAAAAAAADA SEGPORTELGMMLLLLMMMMMMTdiceAAYAAAAADAúdAAYDAADAidenceAlAAADAFDAFDAFMMMMMMMMMMMMMMddAAAY AlAAAFMMMMMMMMMDADA SEGPORTHFDAFMMDAMMMMMMDADAFMDMMMMMM

    Voie 1:

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

    Chemin 2:

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

    • <duration> – la durée de la partie d'une vidéo ffmpeg est de découpage. 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 secondes. La durée de la séquence vidéo découpée est de 5 minutes 0 secondes.

    Vous pouvez utiliser cela

     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

    J'utilise la syntaxe suivante pour couper la 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.