web-dev-qa-db-fra.com

Comment couper au format exact avec ffmpeg?

J'essaie d'utiliser ffmpeg pour couper des fichiers vidéo à des moments précis. L'aide de ffmpeg montre une option -timecode_frame_start pour spécifier l'image de départ, mais je ne parviens pas à faire fonctionner cette commande. La vidéo résultante commence toujours au début de la vidéo d'origine. Voici un exemple de la commande que j'exécute:

ffmpeg -i input.mpg -acodec copy -vcodec copy -timecode_frame_start 200 -vframes 210 -n ouput.mpg

J'ai déplacé l'option timecode_frame_start avant et après les autres options sans modifier les résultats. Y a-t-il une option supplémentaire que je dois spécifier? J'ai essayé divers formats de fichiers, mkv, avi, mp4, et il ne semble pas que le problème soit lié au codec. Voici un fichier que j'ai essayé:

http://www.seaotter.com/marine/movies/hermit-long-01.mpg

Est-ce que je manque quelque chose?

19
curmil

Je viens d'apprendre que le timecode_frame_start ne fonctionne pas comme ça. La seule façon de commencer à des images spécifiques consiste à convertir un certain nombre d'images en syntaxe ss.ms ou en hh:mm:ss.ms. Donc, si votre vidéo est à 25 images par seconde et que vous souhaitez commencer à 133 images, vous aurez besoin de

133/25 = 5,32

Alors, cours

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac out.mp4

Notez que couper sur des images exactes avec une copie en flux binaire (-c:v copy) n’est pas possible car toutes les images ne sont pas codées en interne et peuvent être autonomes.

-ss sera toujours précis à l'image.

Si vous souhaitez encoder un nombre spécifique d'images, utilisez -frames:v, par exemple:

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac -frames:v 60 out.mp4

Vous avez également le choix d'utiliser des filtres vidéo , mais la prise en charge audio peut ne pas être exacte. Et apparemment, la recherche sur des cadres n’est toujours pas une caractéristique. Vous pouvez suivre ce fil de discussion de FFmpeg-users (- === -):

vous pouvez utiliser -vf select pour une sélection d'image précise (quelque chose comme -vf 'select=gte(n\,100)' pour ignorer les 100 premières images)

45
slhck

L'option

-vf select = “between (n \,start_frame_num\,n ° de fin de fichier), setpts = PTS-STARTPTS "
-vf select=“between(n\,200\,300),setpts=PTS-STARTPTS"

coupe la vidéo de la 200ème à la 300ème image, le décompte commence à partir de 0.

3
Nuo Chen