web-dev-qa-db-fra.com

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

J'ai essayé de couper la vidéo en utilisant l'heure de début et de fin de la vidéo en utilisant la commande suivante

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

En utilisant la commande ci-dessus, je souhaite couper la vidéo de 00:00:03 à 00:00:08. Mais il ne s'agit pas de couper la vidéo entre ces moments, mais bien de couper la vidéo avec les 11 premières secondes. Quelqu'un peut-il m'aider à résoudre ce problème?

Éditer 1:

J'ai essayé de couper en utilisant la commande suivante qui est suggérée par mark4o

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

Mais il a été montré l'erreur suivante.

le codeur 'aac' est expérimental mais les codecs expérimentaux ne sont pas activés

donc j’ai ajouté le -strict -2 dans la commande i.e.,

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

Maintenant ça fonctionne bien.

429
Kalai

Vous n'avez probablement pas d'image clé à la troisième marque. Comme les images non clés codent les différences par rapport aux autres images, elles nécessitent toutes les données à partir de l'image clé précédente.

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

Si vous utilisez le last ffmpeg de git master, il utilisera une liste de montage lorsqu'il sera appelé à 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 montage. Certains lecteurs ignoreront la liste de montage et liront toujours tous les médias du fichier du début à la fin.

Si vous souhaitez couper avec précision en commençant par une image non clé et que celle-ci doit être lue à partir du point souhaité sur un lecteur ne prenant pas en charge les listes de montage, ou voulez vous assurer que la partie coupée ne se trouve pas réellement dans le fichier de sortie (par exemple si elle contient des informations confidentielles), vous pouvez le faire en recodant une image clé à 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 codeur AAC particulier. Pour plus de détails, consultez ffmpeg's Guide d'encodage x264 pour la vidéo et Guide d'encodage AAC pour l'audio.

De plus, l'option -t spécifie une durée et non une heure de fin. La commande ci-dessus va encoder 8s de vidéo à partir de 3s. Pour commencer à 3 et se terminer à 8, utilisez -t 5. Si vous utilisez une version actuelle de ffmpeg, vous pouvez également remplacer -t par -to dans la commande ci-dessus pour se terminer à l'heure spécifiée.

481
mark4o

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

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

Cette commande ajuste votre vidéo en quelques secondes!

Je l'ai expliqué sur mon blog ici :

- i: Ceci spécifie le fichier d'entrée. Dans ce cas, c’est (input.mp4).
- ss: Utilisé avec -i, ceci cherche à se positionner dans le fichier d'entrée (input.mp4).
00:01:00: Ceci est l'heure à laquelle votre vidéo coupée commencera.
- to: Ceci 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 coupée se terminera.
- c copy: Il s'agit d'une option pour rogner via une copie en flux. (NB: très vite)

Le format de synchronisation est le suivant: hh: mm: ss

Veuillez noter que la réponse actuellement hautement votée est obsolète et que l'assiette serait extrêmement lente. Pour plus d'informations, regardez ce ffmpeg officiel article .

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

Utilisez - c copy pour entrer instantanément. Dans ce cas, ffmpeg ne réencodera pas la vidéo, mais coupera à la taille correspondante.

77
Vlad Hudnitsky
    ffmpeg -i movie.mp4 -vf trim=3:8 cut.mp4

Déposez tout sauf du deuxième 3 au deuxième 8.

26
JFMD

Pour couper en fonction de l'heure de début et de fin de la vidéo source et éviter d'avoir à faire des calculs, spécifiez l'heure de fin en tant qu'option d'entrée et l'heure de début en tant qu'option de sortie.

ffmpeg -t 1:00 -i input.mpg -ss 45 output.mpg

Cela produira une coupure de 15 secondes de 0:45 à 1:00.

En effet, lorsque -ss est donné comme option de sortie, le temps ignoré est toujours inclus dans le temps total lu à partir de l'entrée, que -t utilise pour savoir quand s'arrêter. Alors que si -ss est donné comme une option en entrée , l’heure de début est recherchée et n’est pas comptée , d'où provient la confusion.

C'est plus lent que la recherche puisque le segment omis est toujours traité avant d'être rejeté, mais c'est la seule façon de le faire, autant que je sache. Si vous écrivez au plus profond d'un fichier volumineux, il est plus prudent de faire le calcul et d'utiliser -ss pour l'entrée.

15
Ryan Yoosefi