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 say ffmpeg
(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épondre y
avec ENTER, afin que le processus se poursuive et vide les informations utiles; c'est avec ffmpeg 3.3.3 sur Ubuntu 14):
ffmpeg -i inputvid.mp4 -f mp4 /dev/null 2>&1 | grep 'Stream\|encoder'
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 640x360 [SAR 1:1 DAR 16:9], 389 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 95 kb/s (default)
y
File '/dev/null' already exists. Overwrite ? [y/N] Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
encoder : Lavf57.71.100
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p(progressive), 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc (default)
encoder : Lavc57.89.100 libx264
Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s (default)
encoder : Lavc57.89.100 aac
Ok, donc nous pouvons voir les ffmpeg
choix libx264
et les aac
encodeurs pour cette vidéo; alors nous pouvons saisir ceci pour melt
:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac vcodec=libx264
.... et melt
coupera avec la pièce entre les cadres et 7235 7349 dans un nouveau fichier, cut.mp4
. Ensuite, pour vérifier si les cut.mp4
boucles sont correctes, utilisez à melt
nouveau pour les lire deux fois - et lisez-les dans une fenêtre SDL:
melt cut.mp4 cut.mp4 -consumer sdl
... et voici ce que ffmpeg
voit ce fichier:
ffmpeg -i cut.mp4 -f mp4 /dev/null 2>&1 | grep 'Stream\|encoder' encoder : Lavf54.20.4
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 526 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 182 kb/s (default)
y
File '/dev/null' already exists. Overwrite ? [y/N] Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
encoder : Lavf57.71.100
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc (default)
encoder : Lavc57.89.100 libx264
Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s (default)
encoder : Lavc57.89.100 aac
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:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac ar=44100 ab=95k vcodec=libx264 vb=389k
... 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 ...