J'ai du mal à trouver une application cli qui peut prendre un fichier vidéo (avi, mkv et mp4 de préférence) et découper des clips très courts (2-6 secondes) avec une précision temporelle précise. J'ai essayé ffmpeg , mencoder , avidemux et mp4box mais ils ont tous découpé des images clés, ce qui crée des clips de plus de 6 secondes. Existe-t-il un outil qui réencodera le fichier d'entrée et réduira l'heure exacte ou coupera de manière inexacte, réencodera, puis coupera avec précision?
command-line
video
video-editing
mp4
curmil
la source
la source
-ss
paramètre après-i
), elle devrait être plus précise.Réponses:
Couper la vidéo avec
ffmpeg
Vous pouvez couper avec précision des vidéos avec FFmpeg. Depuis la version 2.5, c'est très simple. Cela réduirait par exemple 10 secondes, à partir de 0 minute, 3 secondes et 123 millisecondes.
La position et l'heure peuvent être en secondes ou en
hh:mm:ss[.xxx]
forme.Notez que dans ces exemples, la vidéo sera ré-encodée à l'aide de l' encodeur x264 ; l'audio est copié.
Vous pouvez également utiliser
-to
au lieu de-t
pour spécifier le point final au lieu de la durée. Dans ce cas, cependant,-to
est équivalent à-t
, car en mettant le-ss
devant-i
, ffmpeg cherchera d'abord à ce point puis commencera à sortir.Voir aussi l' entrée du wiki à la recherche .
Coupe précise pour les anciennes
ffmpeg
versionsSi vous avez une ancienne version de ffmpeg, pour une recherche précise, vous devez placer l'
-ss
after-i
, ce qui rend le processus d'encodage un peu plus lent, car la vidéo entière doit d'abord être décodée:Ici,
-to
et-t
se comporter différemment.-t 10
créerait un clip de dix secondes, tandis-to 10
que créerait un clip de sept secondes.la source
-c:v libx264 -c:a libfaac
je pense que nous pouvons utiliser-acodec copy -vcodec copy
ce qui indique à ffmpeg de détecter et d'utiliser les mêmes codecs que le fichier d'origine. Quelqu'un peut-il confirmer?-c:a aac -strict experimental
. C'est la solution la plus simple.Le seul outil de ligne de commande Linux que j'ai trouvé jusqu'à présent, qui peut couper à l'image exacte (ou, avec une précision d'image), est
melt
(sudo apt-get install melt
).Disons que vous avez un
inputvid.mp4
- vérifiez d'abord ses paramètres d'encodage avec sayffmpeg
(ici, je dis simplement que je veux le recoder-f mp4
, mais comme le fichier de/dev/null
sorte que la sortie est supprimée; je redirige stderr afin que je puisse le parcourir - note au milieu , la commande vous invite, et vous devez répondrey
avec ENTER, afin que le processus se poursuive et vide les informations utiles; c'est avec ffmpeg 3.3.3 sur Ubuntu 14):Ok, donc nous pouvons voir les
ffmpeg
choixlibx264
et lesaac
encodeurs pour cette vidéo; alors nous pouvons saisir ceci pourmelt
:.... et
melt
coupera avec la pièce entre les cadres et 7235 7349 dans un nouveau fichier,cut.mp4
. Ensuite, pour vérifier si lescut.mp4
boucles sont correctes, utilisez àmelt
nouveau pour les lire deux fois - et lisez-les dans une fenêtre SDL:... et voici ce que
ffmpeg
voit ce fichier:Les paramètres de codage vidéo
cut.mp4
semblent être identiques à,inputvid.mp4
sauf le débit binaire vidéo changé de 389 kb / s à 526 kb / s, et les paramètres de codage audio sont également presque les mêmes, sauf que la fréquence d'échantillonnage est passée de 44100 à 48000 Hz; bien que cela puisse être réglementé avec:... cependant, même avec cela, le bitrate vidéo final pour moi finit par 337 kb / s. Pourtant, les coupes bouclent bien (et cela inclut l'audio) lorsqu'elles sont jouées en boucle, donc je suppose que c'est en effet une image précise ...
la source
melt
réencode la vidéo et utilise les bibliothèques FFmpeg en dessous. Si vous autorisez le ré-encodage, ffmpeg peut produire la même sortie.melt
utilise les bibliothèques FFmpeg), bon à savoir!Comme Baodad l'a dit dans les commentaires (je poste car il n'est pas facile de trouver si vous lisez rapidement), la meilleure approche est de détecter automatiquement les encodeurs audio / vidéo par ffmpeg, donc:
la source