2010-05-06 14:12:17 +0000 2010-05-06 14:12:17 +0000
357
357

Utilisation de ffmpeg pour découper une vidéo

J'utilise ffmpeg pour découper une section d'un gros fichier comme ceci :

ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv

La partie -ss fonctionne bien mais le -t est ignoré. Il supprime correctement les secondes initiales spécifiées avec le -ss mais continue ensuite à aller à la fin de l'entrée avec la copie.

Y a-t-il un moyen d'utiliser ffmpeg pour couper la fin d'une vidéo sans la recoder ?

Réponses (7)

105
105
105
2014-01-20 04:07:24 +0000

Comme d'autres personnes l'ont mentionné, mettre -ss avant (beaucoup plus rapide) ou après (plus précis) le -i fait une grande différence. La section “Recherche rapide et précise” sur la page de recherche ffmpeg vous indique comment obtenir les deux, et je l'ai utilisée, et cela fait une grande différence. En gros, vous mettez -ss avant ET après le -i, assurez-vous juste de laisser assez de temps avant l'endroit où vous voulez commencer à couper pour avoir une autre image clé. Exemple : Si vous voulez faire un clip d'une minute, de 9min0sec à 10min 0sec dans Video.mp4, vous pouvez le faire à la fois rapidement et précisément en utilisant :

ffmpeg -ss 00:08:00 -i Video.mp4 -ss 00:01:00 -t 00:01:00 -c copy VideoClip.mp4

Le premier -ss cherche rapidement jusqu'à (environ) 8min0sec, et ensuite le second -ss cherche précisément jusqu'à 9min0sec, et le -t 00:01:00 sort un clip de 1min0sec.

Notez également ce point important de cette page : “Si vous utilisez -ss avec -c:v copy, le flux binaire résultant peut être haché, non lisible ou désynchronisé avec le flux audio, puisque ffmpeg est forcé de n'utiliser/se diviser que sur des i-frames”

Cela signifie que vous devez réencoder la vidéo, même si vous voulez juste la copier, ou risquer qu'elle soit hachée et désynchronisée. Vous pouvez d'abord essayer -c copy, mais si la vidéo est nulle, vous devrez la refaire.

27
27
27
2014-05-09 02:24:58 +0000

J'ai découvert que -ss combiné avec -c copy entraînait un hachage d'une demi-seconde au départ.

Pour éviter cela, il faut supprimer le -c copy (qui, il est vrai, fera un transcodage).

13
13
13
2014-09-04 05:48:57 +0000

MANUELLEMENT

Ouvrez le fichier dans un lecteur multimédia qui va avancer image par image et lire un fichier AVISynth avec des données telles que :

DirectShowSource(("C:\Downloads\Video\Do you want him.flv"), Pixel_Type="yuy2").Crop(0,0,-0,-0)
Subtitle("C:\Downloads\Video\Do you want him.flv", font="Arial", size=24, text_color=$ff0000, align=3)
ShowFrameNumber(scroll=true, x=336, y=27, font="Arial", size=24, text_color=$ff0000)
ShowTime(x=398, y=44, font="Arial", size=24, text_color=$ff0000)

Puis coupez avec le format de temps EXACT :

ffmpeg -i "Path\do you want him.flv" \
       -ss 00:00:05.240 -to 00:00:08.360 \
       -vcodec libx264 -acodec libvo_aacenc \
       "Path\Do you want him1.flv"

et

ffmpeg -i "Path\do you want him.flv" \
       -ss 00:00:10.240 -to 00:00:14.360 \
       -vcodec libx264 -acodec libvo_aacenc \
       "Path\Do you want him2.flv"

Maintenant, créez un fichier txt avec les fichiers vidéo avec des contenus tels que :

file 'C:\Downloads\Video\Do you want him1.flv'
file 'C:\Downloads\Video\Do you want him2.flv'

Exécutez ffmpeg :

ffmpeg -f concat -i FileList.txt -c copy "Path\NewName_joined.flv"
8
8
8
2013-05-19 03:14:56 +0000

Pour moi, l'option -t n'a pas fonctionné, mais -vframes a fonctionné. Je préfère utiliser #frames, car je préfère couper à I-Frames et j'ai découvert le GOP pour la vidéo en utilisant ffprobe. La ligne de commande qui a fonctionné pour moi est :

ffmpeg -ss 60s -i input.wmv -vframes 1800 -acodec copy -vcodec copy output.wmv

Au fait, mettre -ss devant -i fait une grande différence dans le temps d'exécution.

5
5
5
2016-12-08 11:24:57 +0000

Comme pour user225366, l'option -t ne fonctionne pas pour les vidéos courtes, mais elle fonctionne pour les vidéos plus longues. Pour les vidéos courtes, il semble que -frames:v soit meilleur. C'est ce qui a fonctionné pour moi.

ffmpeg -ss 4 -i input.mp4 -frames:v 200 -vcodec copy output.mp4

-acodec copy doit être ajouté si la vidéo a du son, comme le montrent les autres réponses.

0
0
0
2020-02-12 02:20:00 +0000

utiliser ce format :

ffmpeg <start time> <input file> <cut duration> <out file>

ex. couper un clip de 60 secondes après une minute de vidéo

ffmpeg.exe -ss 00:01:00 -i "in file.mp4" -to 00:01:00 -c copy out.mp4

0
0
0
2019-09-01 05:29:02 +0000

Je n'en vois pas beaucoup parler (je ne suis pas un expert, donc il y a peut-être un piège), mais si votre fichier contient d'autres flux comme des sous-titres et d'autres métadonnées comme des chapitres, etc., il est possible de couper/découper et de conserver tous les flux avec la commande suivante :

ffmpeg -to 60 -i input.mkv -map 0 -c copy output.mkv

Avec -map 0, vous prenez tous les flux du fichier, et avec -c copy, vous les copiez tous tels quels.
Utiliser -to en omettant le début via -ss va couper la vidéo d'entrée du début à la seconde 60.

Fiddling with map est également utile si vous voulez que seuls des flux spécifiques soient conservés dans la coupe (peut-être que vous n'avez pas besoin de toutes les sources audio dans le fichier, ou seulement de certains sous-titres).

J'utilise cela lorsque j'ai besoin de diviser de gros fichiers MKV qui ne peuvent pas être stockés en FAT32.