La única herramienta de línea de comandos de Linux que he encontrado hasta ahora, que puede cortar en el cuadro exacto (o, con precisión de cuadro), es melt
( sudo apt-get install melt
).
Digamos que tiene un inputvid.mp4
- primero verifique su configuración de codificación con say ffmpeg
(aquí, solo digo que quiero codificarlo nuevamente -f mp4
, pero como el archivo /dev/null
se descarta la salida; redirijo stderr para que pueda pasar por él - nota en el medio , el comando solicita, y debe responder y
con ENTER, para que el proceso continúe y descargue la información útil; esto es con ffmpeg 3.3.3 en 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, entonces podemos ver ffmpeg
opciones libx264
y aac
codificadores para este video; entonces podemos ingresar esto para melt
:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac vcodec=libx264
.... y melt
se corte con la pieza entre los marcos 7235 y 7349 en un nuevo archivo, cut.mp4
. Luego, para verificar si los cut.mp4
bucles están correctamente, úselos melt
nuevamente para reproducirlos dos veces, y reprodúzcalos en una ventana SDL:
melt cut.mp4 cut.mp4 -consumer sdl
... y esto es lo que ffmpeg
ve para este archivo:
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
La configuración de codificación de video cut.mp4
parece ser idéntica, inputvid.mp4
excepto que la tasa de bits de video cambió de 389 kb / sa 526 kb / s, y también la configuración de codificación de audio es casi la misma, excepto que la frecuencia de muestreo cambió de 44100 a 48000 Hz; aunque eso se puede regular con:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac ar=44100 ab=95k vcodec=libx264 vb=389k
... sin embargo, incluso con esto, la tasa de bits de video final para mí termina 337 kb / s. Aún así, los cortes en bucle están bien (y eso incluye audio) cuando se reproducen en bucle, por lo que supongo que esto es realmente preciso en el marco ...