GNU/Linux >> Tutoriels Linux >  >> Linux

Couper les vidéos en fonction de l'heure de début et de fin à l'aide de ffmpeg

Essayez d'utiliser ceci. C'est le moyen ffmpeg le plus rapide et le meilleur que j'ai trouvé :

 ffmpeg -ss 00:01:00 -to 00:02:00  -i input.mp4 -c copy output.mp4

Cette commande découpe votre vidéo en quelques secondes !

Explication de la commande :

-i : Ceci spécifie le fichier d'entrée. Dans ce cas, c'est (input.mp4).
-ss : Utilisé avec -i, cela cherche dans le fichier d'entrée (input.mp4) à positionner.
00:01:00 : Il s'agit de l'heure à laquelle votre vidéo découpée commencera.
-à : Cela spécifie la durée du début (00:01:40) à la fin (00:02:12).
00:02:00 : Il s'agit de l'heure à laquelle votre vidéo découpée se terminera.
-c copier : Il s'agit d'une option pour couper via la copie de flux. (NB :Très rapide)

Le format d'heure est :hh:mm:ss

Veuillez noter que la réponse actuelle hautement votée est obsolète et que la coupe serait extrêmement lente. Pour plus d'informations, consultez cet article officiel de ffmpeg.


Voici ce que j'utilise et ne prendra que quelques secondes exécuter :

ffmpeg -i input.mp4 -ss 01:19:27 -to 02:18:51 -c:v copy -c:a copy output.mp4

Référence :découper des fichiers vidéo à l'aide de FFmpeg par Alexander Refsum Jensenius .

mp4 généré les fichiers peuvent également être utilisés dans iMovie . Plus d'informations sur l'obtention de la durée complète à l'aide du modèle get_duration(input_video).

Si vous souhaitez concaténer plusieurs cinématiques, vous pouvez utiliser le script Python suivant :

#!/usr/bin/env python3

import subprocess

def get_duration(input_video):
    cmd = ["ffprobe", "-i", input_video, "-show_entries", "format=duration",
           "-v", "quiet", "-sexagesimal", "-of", "csv=p=0"]
    return subprocess.check_output(cmd).decode("utf-8").strip()


def main():
    name = "input.mkv"
    times = []
    times.append(["00:00:00", "00:00:10"])
    times.append(["00:06:00", "00:07:00"])
    # times = [["00:00:00", get_duration(name)]]
    if len(times) == 1:
        time = times[0]
        cmd = ["ffmpeg", "-i", name, "-ss", time[0], "-to", time[1], "-c:v", "copy", "-c:a", "copy", "output.mp4"]
        subprocess.check_output(cmd)
    else:
        open('concatenate.txt', 'w').close()
        for idx, time in enumerate(times):
            output_filename = f"output{idx}.mp4"
            cmd = ["ffmpeg", "-i", name, "-ss", time[0], "-to", time[1], "-c:v", "copy", "-c:a", "copy", output_filename]
            subprocess.check_output(cmd)

            with open("concatenate.txt", "a") as myfile:
                myfile.write(f"file {output_filename}\n")

        cmd = ["ffmpeg", "-f", "concat", "-i", "concatenate.txt", "-c", "copy", "output.mp4"]
        output = subprocess.check_output(cmd).decode("utf-8").strip()
        print(output)


if __name__ == "__main__":
    main()

L'exemple de script coupera et fusionnera les scènes entre 00:00:00 - 00:00:10 et 00:06:00 - 00:07:00 .

Si vous voulez couper la vidéo complète (au cas où vous voudriez convertir mkv formater en mp4 ) décommentez simplement la ligne suivante :

# times = [["00:00:00", get_duration(name)]]

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -c copy cut.mp4 

Utilisez -c copie pour faire en instantanément. Dans ce cas, ffmpeg ne réencodera pas la vidéo, mais la coupera simplement à sa taille.


Vous n'avez probablement pas d'image clé à la marque des 3 secondes. Étant donné que les images non clés encodent les différences par rapport aux autres images, elles nécessitent toutes les données commençant par l'image clé précédente.

Avec le conteneur mp4, il est possible de couper à une image non clé sans réencoder à l'aide d'une liste d'édition. En d'autres termes, si l'image clé la plus proche avant 3s est à 0s, elle copiera la vidéo en commençant à 0s et utilisera une liste de montage pour dire au joueur de commencer à jouer 3 secondes plus tard.

Si vous utilisez le dernier ffmpeg de git master, il le fera à l'aide d'une liste de modification lorsqu'il sera invoqué à l'aide de la commande que vous avez fournie. Si cela ne fonctionne pas pour vous, vous utilisez probablement une ancienne version de ffmpeg ou votre lecteur ne prend pas en charge les listes de modification. Certains lecteurs ignorent la liste de modification et lisent toujours tous les médias du fichier du début à la fin.

Si vous voulez couper précisément à partir d'une image non clé et que vous souhaitez qu'il soit lu à partir du point souhaité sur un lecteur qui ne prend pas en charge les listes de montage, ou si vous voulez vous assurer que la partie coupée ne se trouve pas réellement dans le fichier de sortie (par exemple s'il contient des informations confidentielles), vous pouvez le faire en ré-encodant afin qu'il y ait une image clé précisément à l'heure de début souhaitée. Le réencodage est la valeur par défaut si vous ne spécifiez pas copy . Par exemple :

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

Lors du réencodage, vous pouvez également souhaiter inclure des options supplémentaires liées à la qualité ou un encodeur AAC particulier. Pour plus de détails, consultez le Guide d'encodage x264 de ffmpeg pour la vidéo et le Guide d'encodage AAC pour l'audio.

Aussi, le -t L'option spécifie une durée, pas une heure de fin. La commande ci-dessus encodera 8 secondes de vidéo à partir de 3 secondes. Pour commencer à 3 s et terminer à 8 s, utilisez -t 5 . Si vous utilisez une version actuelle de ffmpeg, vous pouvez également remplacer -t avec -to dans la commande ci-dessus pour terminer à l'heure spécifiée.


Linux
  1. Qu'est-ce qu'une Rolling Release Linux et quel est le véritable avantage de l'utiliser

  2. Comment faire pivoter des vidéos à l'aide de FFMpeg à partir de la ligne de commande

  3. Sortie vers Stdout et en même temps Grep dans un fichier ?

  4. Définir la date, l'heure et le fuseau horaire sur un serveur Linux

  5. Utilisation du script Apache2Buddy pour les performances et la stabilité

Comment obtenir la date et l'heure actuelles en Python

Comment zoomer et dézoomer des vidéos à l'aide de FFmpeg

Le guide complet d'utilisation de ffmpeg sous Linux

Firefox atteint le top 100, et il est temps que vous commenciez à utiliser ce navigateur open-source

Copier et chmod/chown en même temps

En quoi le temps CPU et l'utilisation du CPU sont-ils identiques ?