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 veux couper la vidéo de 00:00:03
à 00:00:08
. Mais il ne coupe pas la vidéo entre ces moments au lieu de cela, il coupe la vidéo avec les 11 premières secondes. quelqu'un peut-il m'aider à résoudre ce problème?
Modifier 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.
l'encodeur 'aac' est expérimental mais les codecs expérimentaux ne sont pas activés
donc j'ai ajouté le -strict -2
dans la commande, c'est-à-dire
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -strict -2 cut.mp4
Maintenant ça fonctionne bien.
linux
video
ffmpeg
video-editing
Kalai
la source
la source
Réponses:
Vous n'avez probablement pas d'image clé à la marque des 3 secondes. Étant donné que 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 sur une image non clé sans ré-encodage à l'aide d'une liste d'édition. En d'autres termes, si l'image clé la plus proche avant 3 s est à 0, elle copiera la vidéo à partir de 0 et utilisera une liste d'édition pour dire au lecteur de commencer à jouer 3 secondes.
Si vous utilisez la dernière ffmpeg de git master, elle le fera à l'aide d'une liste d'édition lorsqu'elle sera invoquée à 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 modifications. Certains joueurs ignoreront la liste d'édition et liront toujours tous les médias du fichier du début à la fin.
Si vous souhaitez couper précisément à partir d'une image non clé et que vous souhaitez qu'il démarre à partir du point souhaité sur un lecteur qui ne prend pas en charge les listes d'édition, 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 recodant afin qu'il y ait une image clé précisément à l'heure de début souhaitée. Le recodage est la valeur par défaut si vous ne spécifiez pas
copy
. Par exemple: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.
En outre, l'
-t
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
par-to
dans la commande ci-dessus pour terminer à l'heure spécifiée.la source
-t
/-to
et son argument pour continuer jusqu'à la fin.-ss
AVANT le fichier d'entrée (avant-i
), car de cette façon, ffmpeg sautera directement à l'emplacement. Cependant, cela mettra également le temps "zéro" à cet endroit, ce qui signifie qu'il-to
pointera au mauvais moment. Source: trac.ffmpeg.org/wiki/Seekingffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
, bien que le fichier d'origine n'ait pas un tel problème.-async 1
.Essayez d'utiliser ceci. C'est la méthode ffmpeg la plus rapide et la meilleure que j'ai trouvée:
Cette commande coupe votre vidéo en quelques secondes!
Je l'ai expliqué sur mon blog ici :
Le format de synchronisation est: hh: mm: ss
Veuillez noter que la réponse actuelle, très appréciée, est obsolète et que le découpage serait extrêmement lent. Pour plus d'informations, consultez cet article officiel de ffmpeg .
la source
ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4
. Maintenant, cependant, le saut est cassé et l'heure de fin n'est pas correcte (dans mon cas).Utilisez la copie -c pour créer instantanément. Dans ce cas, ffmpeg ne ré-encodera pas la vidéo, il sera juste coupé à la taille appropriée.
la source
ffmpeg -i movie.mkv -vcodec copy -acodec copy converted_movie.mp4
etDéposez tout sauf du deuxième 3 au deuxième 8.
la source
setpts=PTS-STARTPTS
filtre après le filtre de rognage.-strict -2
avantcut.mp4
(par opposition à la fin de la ligne de commande)?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 comme option d'entrée et l'heure de début comme option de sortie.
Cela produira une coupe de 15 secondes de 0:45 à 1:00.
En effet, lorsque
-ss
option est donnée comme option de sortie, le temps ignoré est toujours inclus dans le temps total lu à partir de l'entrée, qui permet-t
de savoir quand s'arrêter. Alors que si-ss
est donné comme option d' entrée , l'heure de début est recherchée et non comptée , d'où la confusion.C'est plus lent que de chercher car le segment omis est toujours traité avant d'être supprimé, mais c'est la seule façon de le faire à ma connaissance. Si vous découpez du plus profond d'un gros fichier, il est plus prudent de faire le calcul et de l'utiliser
-ss
pour l'entrée.la source
Voici ce que j'utilise:
Les
mp4
fichiers générés peuvent également être utilisés dansiMovie
.Référence: https://www.arj.no/2018/05/18/trimvideo
Si vous souhaitez concaténer plusieurs scènes de coupe, vous pouvez utiliser le script suivant:
la source
Utilisez -to au lieu de -t: -to spécifie l'heure de fin, -t spécifie la durée
la source
Même si j'ai 6 ans de retard, mais je pense que toutes les réponses ci-dessus n'ont pas correctement répondu à la question de @kalai . Le script bash ci-dessous traitera un fichier texte au format suivant:
par exemple
et parcourir le fichier, télécharge le fichier qui
youtube-dl
prend en charge, en calculant la durée entrestart_time
etend_time
et en le passantffmpeg
, car-t
c'est en fait la durée , pas la vraieend_time
Frappez-moi si vous avez des questions.
la source