J'utilise ffmpeg pour découper une section d'un fichier volumineux comme ceci:
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
La -ss
partie fonctionne bien mais la -t
est ignorée. Il supprime correctement les secondes spécifiées initialement spécifiées avec -ss
mais continue à aller à la fin de l'entrée avec la copie.
Existe-t-il un moyen d'utiliser ffmpeg pour couper la fin d'une vidéo sans la recoder?
Réponses:
Vous pouvez utiliser l'
-ss
option pour spécifier un horodatage de démarrage et l'-t
option pour spécifier la durée d'encodage. Les horodatages doivent être auHH:MM:SS.xxx
format ou en secondes (s.msec
).Les éléments suivants coupent les 30 premières secondes, puis tout ce qui se passe 10 secondes après:
Notez que ceci
-t
est une option de sortie et doit toujours être spécifié après-i
.Quelques conseils:
-ss
après-i
, vous obtiendrez une recherche plus précise au détriment d’une exécution plus lente. Voir aussi: Rechercher avec FFmpegVous pouvez utiliser
-to
au lieu de-t
spécifier l’horodatage sur lequel vous voulez couper. Donc, au lieu de-i <input> -ss 30 -t 10
vous pourrait également faire-i <input> -ss 30 -to 40
pour atteindre le même objectif.Si votre ffmpeg ne prend pas en charge
-c
, ou-to
, il est probablement très obsolète. Compilez vous-même une nouvelle version ou téléchargez une version statique à partir de leur page d'accueil. C'est vraiment pas compliqué.la source
ffmpeg -i input.wmv -c copy -t 35 output.wmv
frame= 150 fps=0.0 q=-1.0 Lsize= 264kB time=00:00:09.97 bitrate= 216.6kbits/s
-c copy
supprimer l'écran noir initial, voir sa réponse pour plus de détails.Comme d'autres personnes l'ont mentionné, mettre
-ss
avant (beaucoup plus rapidement) ou après (plus précisément)-i
fait toute la différence. La section "Recherche rapide et précise" de la page de recherche de ffmpeg vous explique comment obtenir les deux. Je l'ai utilisée et cela fait toute la différence. En gros, vous mettez-ss
avant ET après le-i
, assurez-vous de laisser assez de temps avant de commencer à couper pour avoir une autre image clé. Exemple: si vous souhaitez créer un clip d’une minute, de 9min0sec à 10min 0sec dans Video.mp4, vous pouvez le faire rapidement et avec précision en utilisant:La première
-ss
vise à rapide (environ) 8min0sec, puis la seconde-ss
vise précisément à 9min0sec, et le-t 00:01:00
fait sortir un clip 1min0sec.Notez également le point important de cette page: "Si vous utilisez
-ss
with-c:v copy
, le flux de données résultant peut être saccadé, illisible ou non synchronisé avec le flux audio, car ffmpeg est forcé de n'utiliser / diviser que sur des images i. "Cela signifie que vous devez ré-encoder la vidéo, même si vous souhaitez simplement la copier, sinon vous risquez de la perdre et de la désynchroniser. Vous pouvez essayer d’
-c copy
abord, mais si la vidéo est nulle, vous devrez la refaire.la source
-c:a copy
cette façon de chercher.J'ai trouvé que
-ss
combinée avec-c copy
résultait en une côtelette d'une demi-seconde au début.Pour éviter cela, vous devez supprimer le
-c copy
(qui fera certes un transcodage).la source
-c copy
corrigée.MANUELLEMENT
Ouvrez le fichier dans un lecteur multimédia qui avance image par image et lisez un fichier AVISynth contenant des données telles que:
Ensuite, coupez avec le format d’heure EXACT:
et
Créez maintenant un fichier txt avec les fichiers vidéo avec des contenus tels que:
Exécuter ffmpeg:
la source
Pour moi, l'
-t
option n'a pas fonctionné, mais a-vframes
fonctionné. Je préfère utiliser#frames
, car je préfère couper chez I-Frames et j'ai découvert GOP pour l'utilisation vidéoffprobe
.La ligne de commande qui a fonctionné pour moi est la suivante:
À propos, mettre
-ss
en avant-i
fait une grande différence dans le temps d'exécution.la source
-vframes
(ou-frames:v
) devrait venir après-i
parce que c'est une option de sortie.Comme avec user225366, l'option -t ne fonctionne pas pour les vidéos courtes, mais elle le fait pour les vidéos plus longues. Pour les courtes vidéos, il semble que -frames: v is better. C'est ce qui a fonctionné pour moi.
La copie -acodec doit être ajoutée si la vidéo contient de l'audio, comme le montrent les autres réponses.
la source
Je ne vois pas beaucoup le mentionner (je ne suis pas un expert, alors il y a peut-être un piège), mais si votre fichier contient d'autres flux tels que des sous-titres et d'autres métadonnées telles que des chapitres, etc., il est possible de couper / couper et de conserver tous les flux avec le même fichier. commande suivante
Avec
-map 0
vous prenez tous les flux du fichier et-c copy
copiez-les tous tels quels.Si vous
-to
omettez le début via-ss
, la vidéo en entrée sera coupée du début à la seconde 60.Il
map
est également utile de bidouiller avec si vous souhaitez que seuls des flux spécifiques soient conservés (vous n'avez peut-être pas besoin de toutes les sources audio du fichier, ni de certains sous-titres).J'utilise ceci lorsque j'ai besoin de fractionner de gros fichiers MKV qui ne peuvent pas être stockés dans le stockage FAT32.
la source