Est-il possible d'utiliser ffmpeg pour couper X secondes à partir du début d'une vidéo d'une durée indéterminée?

19

Je dois couper juste les 1 ou 2 premières secondes d'une série d'enregistrements FLV de longueurs variables et non spécifiées. J'ai trouvé de nombreuses ressources pour extraire une durée spécifique d'une vidéo (par exemple, des clips de 30 secondes), mais aucune pour continuer jusqu'à la fin d'une vidéo.

Ces deux tentatives ne donnent qu'une version copiée de la vidéo, sans le rognage souhaité:

ffmpeg -ss 2 -vcodec copy -acodec copy -i input.flv output.flv

ffmpeg -ss 2 -t 120 -vcodec copy -acodec copy -i input.flv output.flv

La pensée sur le second était: peut-être que si je spécifiais une longueur au-delà de ce qui était possible, cela irait jusqu'au bout. Pas de dé.

Je sais que ce n'est pas un problème avec les codecs ou d'utiliser des secondes au lieu du code temporel puisque ce qui suit a fonctionné comme un charme:

ffmpeg -ss 2 -t 5 -vcodec copy -acodec copy -i input.flv output.flv

D'autres idées? Je suis ouvert à l'utilisation d'autres outils de ligne de commande (basés sur Windows), mais je préfère fortement ffmpeg, car je l'utilise déjà pour la création de miniatures et je le connais bien.

Si cela peut aider, mes vidéos dureront moins de 2 minutes.

METTRE À JOUR:

Je suis passé à utiliser Mencoder ( http://www.mplayerhq.hu/ ) car il semble que ffmpeg ne le fera pas sans un peu plus de hackery.

La syntaxe Mencoder pour accomplir ce que je voulais faire est la suivante:

mencoder.exe -ss 2 -oac copy -ovc copy input.flv -o output.flv
marcelebrate
la source
Alors, que préférez-vous? la mencoder exemple, ci-dessus; ou la ffmpeg exemple, ci-dessous?
tjt263

Réponses:

9

Essayer:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Je pense que le paramètre d'entrée est censé être le premier.

Dave
la source
Merci pour la réponse. L'ordre des paramètres que j'ai utilisé ci-dessus donne le même résultat, donc je ne pense pas que ce soit l'ordre. Après avoir abandonné ffmpeg, mon intervalle d’images clés posait problème avec d’autres outils. Après avoir revisité cela tout à l’heure, c’était après tout l’intervalle d’images clés. Il a été défini sur 5 secondes auparavant et je l'ai depuis défini sur 1 seconde. À 5 secondes, votre commande et celles que j'ai essayées ci-dessus ont généré un espace noir au début (une valeur de 3 secondes, sans surprise). À 1 seconde, cela fonctionne comme prévu.
marcelebrate
Cela fonctionne aussi pour les mp3
geotheory
3
Comme expliqué dans FFmpeg cherche en utilisant -ss comme paramètre d’entrée (avant -i ) lors de la copie, voire du transcodage avec une version antérieure de FFmpeg, utilise la recherche d’images clés. C'est beaucoup plus rapide, mais sacrifie la précision. Si vous l'utilisez comme paramètre de sortie, le processus est potentiellement beaucoup plus lent (l'entrée est décodée image par image même pour les parties ignorées), mais précise. Même si la question est ancienne, je pense que cela devrait être la réponse acceptée.
Jonathan Y.
23

Tourne cette commande volonté Coupez la vidéo à partir de 2 secondes, comme prévu:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Le problème concernait l'intervalle d'images clés dans input.flv. Il était réglé sur 5 secondes, ce qui donnait 3 secondes d'images noires au début de la vidéo (5 - 2 = 3). J'ai depuis changé mon intervalle d'images clés à 1 seconde, bien que 2 secondes donnent probablement aussi les résultats souhaités dans mon cas.

METTRE À JOUR: Mise à jour de la commande de -i et -ss paramètres par réponse de Dave, que j'ai accepté pour crédit.

marcelebrate
la source
2
J'avais ce problème aussi. Ce post l'a fait pour moi. Je mordis la balle et arrêtai d'essayer d'utiliser -vcodec copy -acodec copy pour toutes mes commandes d'édition. Le ré-encodage a empêché les images noires dès le début de ma vidéo ou de ne pas couper au bon endroit (la différence d’une seconde sans pour autant le ré-encodage se traduisait par une différence de presque 5 secondes dans la vidéo). Donc, j'ai fini par remplacer -vcodec copy avec -vcodec libx264 -crf 0.
Hendy
2
Je viens de rencontrer cette même chose. J'ai découvert que je ne peux pas juste -vcodec copy parce que la tranche ne commence pas sur une image clé. Je recevais une image fixe ou une image noire pendant N secondes jusqu'à la prochaine image clé. Si je ré-encode plutôt que de copier, cela fonctionne comme prévu. Donc, même si mon entrée et ma sortie sont à la fois H264, je devais tout de même ré-encoder (en utilisant -vcodec libx264 au lieu de -vcodec copy ).
Karl Wilbur
La réponse de Daves est la bonne depuis la dernière version de ffmpeg. le -i devrait venir avant la -ss.
Arete
Merci @ Arete. Réponse mise à jour en conséquence.
marcelebrate