Das einzige Linux-Kommandozeilen-Tool, das ich bisher gefunden habe und das bildgenau (oder bildgenau) schneiden kann, ist melt( sudo apt-get install melt).
Angenommen, Sie haben eine inputvid.mp4- überprüfen Sie zuerst die Codierungseinstellungen mit say ffmpeg(hier sage ich nur, dass ich sie erneut codieren möchte -f mp4, aber da die Datei /dev/nullso verworfen wird, leite ich stderr um, damit ich sie durchgehen kann - notieren Sie sich in der Mitte yWenn der Befehl dazu auffordert und Sie mit der EINGABETASTE antworten , fährt der Prozess fort und gibt die nützlichen Informationen aus (dies ist mit ffmpeg 3.3.3 unter 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, wir können also eine ffmpegAuswahl libx264und aacEncoder für dieses Video sehen. dann können wir dies eingeben für melt:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac vcodec=libx264
.... und meltschneidet mit dem Stück zwischen den Frames 7235 und 7349 in eine neue Datei cut.mp4. Um zu überprüfen, ob die cut.mp4Schleifen korrekt sind, geben Sie meltsie noch einmal zweimal wieder - und spielen Sie sie in einem SDL-Fenster ab:
melt cut.mp4 cut.mp4 -consumer sdl
... und hier ist was ffmpegfür diese Datei zu sehen:
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
Die Einstellungen für cut.mp4die Videokodierung scheinen mit inputvid.mp4Ausnahme der Änderung der Videobitrate von 389 kb / s auf 526 kb / s identisch zu sein , und auch die Einstellungen für die Audiokodierung sind nahezu identisch, außer dass die Abtastrate von 44100 auf 48000 Hz geändert wurde. das kann man aber regeln mit:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac ar=44100 ab=95k vcodec=libx264 vb=389k
... die endgültige Video-Bitrate beträgt für mich jedoch 337 kb / s. Trotzdem sind die Schnitte bei der Wiedergabe in einer Schleife in Ordnung (und das schließt auch Audio ein), also denke ich, dass dies tatsächlich bildgenau ist ...