Estoy usando ffmpeg
para convertir un archivo de video al formato H.264. Si llamo ffprobe
mientras ffmpeg
todavía se está ejecutando, no se sabe la duración del video. Solo cuando ffmpeg
finalice ffprobe
se mostrará la duración.
De manera similar, si corro mplayer
para reproducir el video mientras aún se está codificando, la duración es desconocida o se muestra incorrectamente.
¿Hay alguna manera de saber la duración del video resultante (h264 en el contenedor .mkv) mientras todavía está siendo codificado por ffmpeg
?
Editar : haré la pregunta un poco más clara.
Estoy interesado en saber cuánto dura el video que fue codificado hasta ahora . Digamos que el archivo de entrada tiene una duración de 1 minuto y 45 segundos. El archivo resultante debe conservar la longitud. Pero me gustaría saber cuánto ffmpeg
codificó hasta ahora . Si podemos determinar la duración del video después de realizar la conversión, ¿no debería haber una forma de determinar la duración del video que ya fue procesado y listo para reproducirse?
La respuesta corta es No.
La respuesta más larga es, depende.
Si está codificando un archivo, generalmente la salida es la duración de la entrada, a menos que se -ss, -to, -t
apliquen opciones o filtros de ajuste o cambio de velocidad. Para una entrada en vivo, FFmpeg detendrá la codificación cuando encuentre EOF en la entrada, por lo que, a menos que sepa eso, no sabrá la duración de la salida. Para entradas múltiples de diferente duración, dependerá de cuál sea el comando, por ejemplo, ¿hay un -shortest
allí? ¿Hay un amix
?, que por defecto es la entrada más larga o amerge
que termina con la entrada más corta.
De forma predeterminada, la lectura de la consola ffmpeg mostrará el progreso de la codificación en tiempo real, es decir, la duración codificada hasta el momento.
Ver la -report
opción. De las páginas de manual:
-informe
Vuelque la línea de comandos completa y la salida de la consola en un archivo llamado " program-YYYYMMDD-HHMMSS.log " en el directorio actual. Este archivo puede ser útil para informes de errores. También implica "
-loglevel verbose
".Establecer la variable
FFREPORT
de entorno en cualquier valor tiene el mismo efecto. Si el valor es una secuencia de valores clave separados por ' ' ,:
estas opciones afectarán el informe; los valores de las opciones se deben escapar si contienen caracteres especiales o el delimitador de opciones ' ' (vea la sección ``Comillas y escapes'' en el manual de ffmpeg-utils).=
:
Se reconocen las siguientes opciones:
expediente
establecer el nombre de archivo que se usará para el informe;
%p
se expande al nombre del programa,%t
se expande a una marca de tiempo, "%%
" se expande a un simple "%
"nivel
establezca el nivel de detalle del registro mediante un valor numérico (consulte "
-loglevel
").Por ejemplo, para enviar un informe a un archivo llamado ffreport.log utilizando un nivel de registro de 32 (alias para el nivel de registro "
info
"):
FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output
Los errores al analizar la variable de entorno no son fatales y no aparecerán en el informe.
Combina con -stats
y tu uno | head -n 2 | tail -n 1
para llevar:
-estadísticas (globales)
Imprima el progreso/estadísticas de la codificación. Está activado de forma predeterminada, para deshabilitarlo explícitamente debe especificar "
-nostats
".
Si tiene problemas con su barra de progreso, que se usa \r
para reescribir la misma línea, puede usar ffmpeg -stats ... 2>&1 | tr \\r \\n
head&tail.
VL-80
gian
stderr
VL-80
VL-80
-progress
que hace que genere la información de progreso antes mencionada en un formato amigable para la máquina que se puede analizar fácilmente.