Pregunta

Quiero ser capaz de iniciar sesión procesos FFMPEG porque estoy tratando de averiguar cuánto tiempo un minuto de vídeo se necesita para convertir a ayudar con la planificación de la capacidad de mi servidor de codificación de vídeo. ¿Cómo se habilita el registro y dónde está el archivo de registro guardado. He instalado FFMPEG en una máquina CentOS LAMP.

¿Fue útil?

Solución

FFmpeg no escribe en un archivo de registro específico, sino que envía su salida a error estándar. Para capturar eso, es necesario que sea

  • captura y analizar, ya que se genera
  • redirigir el error estándar a un archivo y leer después de que el proceso está terminado

Ejemplo para la redirección de error std:

ffmpeg -i myinput.avi {a-bunch-of-important-params} out.flv 2> /path/to/out.txt

Una vez que el proceso se realiza, puede inspeccionar out.txt.

Es un poco más complicado de hacer la primera opción, pero es posible. (He hecho yo mismo. Así que tienen otros. Echa un vistazo alrededor SO y la red para obtener más información.)

Otros consejos

He encontrado el material a continuación en Docs ffmpeg. ¡Espero que esto ayude! :)

Referencia: http://ffmpeg.org/ffmpeg.html#toc-Generic- opciones

  

‘- informe’ Volcado de línea de comandos completa y salida de la consola a un archivo llamado   programa-AAAAMMDD-HHMMSS.log en el directorio actual. Este archivo puede ser   útil para los informes de error. También implica detallado -logLevel.

     

Nota: la configuración del entorno FFREPORT variable para cualquier valor tiene la   mismo efecto.

Me parece la respuesta. 1 / En primer lugar poner en las preselecciones, tengo este ejemplo "Formato de salida MPEG2 DVD HQ"

-vcodec mpeg2video -vstats_file MFRfile.txt -r 29.97 -s 352x480 -aspect 4:3 -b 4000k -mbd rd -trellis -mv0 -cmp 2 -subcmp 2 -acodec mp2 -ab 192k -ar 48000 -ac 2

Si desea un informe incluye los comandos -vstats_file MFRfile.txt en los preajustes como el ejemplo. esto se puede hacer un informe en el que se ubicadet en el origen de la carpeta del archivo fuente. se puede poner cualquier nombre si lo desea, he resuelto mi problema "escribo muchas veces en este foro" leer un .docx completa acerca de las propiedades del MPEG. Finalmente puedo hacer mi barra de progreso de la lectura de este archivo txt generado.

Saludos.

Parece ser que si se agrega esto a la línea de comandos:

 -loglevel debug

o

 -loglevel verbose

Se obtiene salida de depuración más detallada a la línea de comandos.

Los registros de ffmpeg en stderr, y pueden conectarse a un archivo de registro con un nivel diferente de stderr. La opción de línea de comandos -report no le da el control del nombre del archivo de registro o el nivel de registro, por lo que la variable de entorno es preferible.

(-v es sinónimo de -loglevel. Ejecutar ffmpeg -v help para ver los niveles. Ejecutar ffmpeg -h full | less para ver todo. O consultar el documentos en línea , o sus páginas wiki como la guía de codificación H.264 ).

#!/bin/bash

of=out.mkv
FFREPORT="level=32:file=$of.log" ffmpeg -v verbose   -i src.mp4 -c:a copy -preset slower -c:v libx264 -crf 21 "$of"

Eso TRANCODE src.mp4 con x264, y establecer el nivel de registro para stderr a "prolija", y el nivel de registro para out.mkv.log al "status".

(AV_LOG_WARNING=24, AV_LOG_INFO=32, AV_LOG_VERBOSE=40, etc.). El apoyo a esta era Hace 2 años , por lo que necesita un no-antigua versión de ffmpeg. (Siempre es una buena idea de todos modos, para la seguridad / correcciones de errores y aceleraciones)


A pocos codecs, como -c:v libx265, escribir directamente a stderr en lugar de utilizar la infraestructura de registro de ffmpeg. Así que sus mensajes de registro no terminan en el archivo de informe. Asumo que esto es un artículo de errores / TODO-lista.

Para iniciar la sesión stderr, sin dejar de ver que en un terminal, puede utilizar tee(1) .


Si se utiliza un nivel de registro que incluye actualizaciones de la línea de estado (el -v info por defecto, o superior), que se incluirán en el archivo de registro, separados por ^M (también conocido como retorno de carro \r). No hay nivel de registro que incluye las estadísticas del codificador (como SSIM), pero no a las actualizaciones de estado de línea, por lo que la mejor opción es, probablemente, para filtrar esa corriente.

Si no desea filtrar (por ejemplo, por lo que el fps / velocidad de bits en cada intervalo de actualización de estado-hay en el archivo), puede utilizar less -r para pasarlos a través directamente a su terminal para que pueda ver los archivos de forma limpia. Si ha .enc registros de varias codificaciones que desea hojear, less -r ++G *.enc funciona muy bien. (++ G significa empezar por el final del archivo, para todos los archivos). Con asociaciones de teclas de una sola tecla como . y , para el próximo archivo y el archivo anterior, se puede voltear a través de algunos archivos de registro muy bien. (Los enlaces predeterminados son :n y :p).

Si desea filtrar, sed 's/.*\r//' funciona perfectamente para la salida de ffmpeg. (En el caso general, se necesita algo como vt100.py , pero no sólo para los retornos de carro). Hay (al menos) dos maneras de hacer esto con la camiseta + sed:. tee a / dev / tty y la salida del tubo en T sed, o utilizar un proceso de sustitución para el primer golpe en una tubería de sed

# pass stdout and stderr through to the terminal, 
## and log a filtered version to a file (with only the last status-line update).

of="$1-x265.mkv"
ffmpeg -v info -i "$1" -c:a copy -c:v libx265 ... "$of" |&    # pipe stdout and stderr
   tee /dev/tty | sed 's/.*\r//' >> "$of.enc"

## or with process substitution where tee's arg will be something like /dev/fd/123

ffmpeg -v info -i "$1" -c:a copy -c:v libx265 ... "$of" |&
  tee >(sed 's/.*\r//' >> "$of.enc")

Para probar unos parámetros diferentes codificar, se puede hacer una función como éste que he usado recientemente para probar algunas cosas. Lo tenía todo en una línea así que podría fácilmente de flecha hacia arriba y editarlo, pero voy a ONU-ofuscar aquí. (Es por eso que hay ;s al final de cada línea)

ffenc-testclip(){
  # v should be set by the caller, to a vertical resolution.  We scale to WxH, where W is a multiple of 8 (-vf scale=-8:$v)
  db=0;   # convenient to use shell vars to encode settings that you want to include in the filename and the ffmpeg cmdline
  of=25s@21.15.${v}p.x265$pre.mkv; 
  [[ -e "$of.enc" ]]&&echo "$of.enc exists"&&return;   # early-out if the file exists

  # encode 25 seconds starting at 21m15s (or the keyframe before that)
  nice -14 ffmpeg -ss $((21*60+15))  -i src.mp4 -t 25  -map 0 -metadata title= -color_primaries bt709 -color_trc bt709 -colorspace bt709 -sws_flags lanczos+print_info -c:a copy -c:v libx265 -b:v 1500k -vf scale=-8:$v  -preset $pre -ssim 1 -x265-params ssim=1:cu-stats=1:deblock=$db:aq-mode=1:lookahead-slices=0 "$of" |&
   tee /dev/tty | sed 's/.*\r//' >> "$of.enc";
}

# and use it with nested loops like this.
for pre in fast slow;  do for v in  360 480 648 792;do  ffenc-testclip ;done;done

less -r ++G *.enc       # -r is useful if you didn't use sed

Tenga en cuenta que las pruebas de la existencia del archivo de vídeo de salida para evitar arrojar basura adicional en el archivo de registro si ya existe. A pesar de ello, he utilizado y anexar (>>) redirección.

Sería más "limpia" para escribir una función de shell que tuvo argumentos en vez de mirar las variables de shell, pero esto era conveniente unad fácil escribir para mi propio uso. Por eso también he salvado espacio al no citar correctamente todas mis expansiones variables. ($v en lugar de "$v")

Debe declarar la reportfile como variable para la consola.

El problema es que todo el Dokumentations se pueden encontrar no están funcionando de manera .. Estaba dar 1 día de mi vida para encontrar el camino correcto ....

Ejemplo: para el lote / consola

cmd.exe / K establecer FFREPORT = file = 'C: \ ffmpeg \ proto \ test.log': Nivel = 32 && C: \ ffmpeg \ bin \ ffmpeg.exe -logLevel advertencia -report -i InputFile f outputfile

Exemple Javascript:

var reortlogfile = "cmd.exe / K establece FFREPORT = file = 'C: \ ffmpeg \ proto \" + nombre de archivo +" .log': Nivel = 32 && C: \ ffmpeg \ bin \ ffmpeg.exe". ......;

Puede cambiar el directorio y el nombre de la forma que quieras.

Frank de Berlín

Si lo que desea es saber cuánto tiempo tarda el comando a ejecutar, es posible considerar el uso de la tiempo comando. Por ejemplo, el uso time ffmpeg -i myvideoofoneminute.aformat out.anotherformat

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top