Quiero ser capaz de registrar procesos FFMPEG porque estoy tratando de calcular cuánto tarda un minuto de video en convertir para ayudar con la planificación de capacidad de mi servidor de codificación de video. ¿Cómo habilito el registro y dónde se guarda el archivo de registro? Tengo FFMPEG instalado en una máquina CentOS LAMP.¿Cómo habilito el registro FFMPEG y dónde puedo encontrar el archivo de registro FFMPEG?
Respuesta
FFmpeg no escribe en un archivo de registro específico, sino que envía su salida a standard error. Para capturar eso, es necesario que sea
- captura y analizarlo, ya que se genera
- redirigir el error estándar a un archivo y leer que después se termina el proceso
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 se realiza el proceso, puede inspeccionar out.txt
.
Es un poco más complicado hacer la primera opción, pero es posible. (Lo he hecho yo mismo. Lo tengo otros. Eche un vistazo a SO y a la red para más detalles.)
Si solo quiere saber cuánto tiempo le lleva ejecutar el comando, puede considerar usar el time mando. Por ejemplo, use time ffmpeg -i myvideoofoneminute.aformat out.anotherformat
Encontré la respuesta. 1/Primer puesto en los preajustes, 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 puede hacer un informe que está ubicando en la carpeta fuente de su archivo Fuente. puede poner cualquier nombre si lo desea, he resuelto mi problema "escribo muchas veces en este foro" leyendo un .docx completo sobre las propiedades de mpeg. finalmente puedo hacer mi barra de progreso leyendo este archivo txt generado.
Atentamente.
+1 barra de progreso –
Encontré las cosas a continuación en ffmpeg Docs. ¡Espero que esto ayude! :)
Referencia: http://ffmpeg.org/ffmpeg.html#toc-Generic-options
‘-report’ Volcado de línea de comandos completa y salida de la consola en un archivo denominado programa -AAAAMMDD-HHMMSS.log en el directorio actual. Este archivo puede ser útil para informes de errores. También implica -loglevel verbose.
Nota: la configuración de la variable de entorno FFREPORT a cualquier valor tiene el mismo efecto .
aparece en estos días FFREPORT también puede especificar un nombre de archivo de salida, vea http://stackoverflow.com/questions/11241878/ffmpeg-report-generation/14417386#14417386 también NB que al especificar "-report" establece automáticamente el registro al modo detallado, creo. – rogerdpack
¿Puede usar -informar y cambiar el nivel de registro para depurar? – MarcusJ
@MarcusJ: Sí, use 'of = out.mkv; FFREPORT = "level = 32: file = $ of.log" ffmpeg -v verbose ... "$ of" 'para establecer el nivel de registro para stderr a" verbose ", y el nivel de registro para' out.mkv.log' a "estado". ('AV_LOG_WARNING = 24',' AV_LOG_INFO = 32', 'AV_LOG_VERBOSE = 40'). El soporte para esto fue [agregado hace 2 años] (https: //trac.ffmpeg.org/ticket/3057 # comment: 5), por lo que necesita una versión no antigua de ffmpeg. –
parece que si se agrega esto a la línea de comandos:
-loglevel debug
o
-loglevel verbose
tiene un resultado de depuración más detallada a la línea de comandos.
Debe declarar el archivo de informe como variable para la consola.
El problema es que todo el Dokumentations se pueden encontrar no están funcionando de manera .. yo era dar 1 día de mi vida para encontrar el camino correcto ....
Ejemplo: para el lote/consola
cmd.exe/K set FFREPORT = archivo = 'C: \ ffmpeg \ proto \ test.log': nivel = 32 & & C: \ ffmpeg \ bin \ ffmpeg.exe -loglevel advertencia -registro -i archivo de entrada f archivo de salida
Ejemplo de Javascript:
var reortlogfile = "cmd.exe/K establecer FFREPORT = archivo = 'C: \ ffmpeg \ proto \" + nombre de archivo + ".log': nivel = 32 & & C: \ ffmpeg \ bin \ ffmpeg.exe" .. .....;
Puede cambiar el directorio y el nombre de archivo como desee.
Frank de Berlín
registros ffmpeg salida estándar de errores, y pueden conectarse a un archivo de registro con un nivel diferente de stderr. La opción de línea de comando -report
no le da el control del nombre del archivo de registro o el nivel de registro, por lo que es preferible establecer la variable de entorno.
(-v
es un sinónimo de -loglevel
. Ejecutar ffmpeg -v help
para ver los niveles. Ejecutar ffmpeg -h full | less
para ver todo. O consultar el online docs, o sus páginas wiki como the h.264 encode guide).
#!/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 se 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 soporte para esto fue added 2 years ago, por lo que necesita una versión no antigua de ffmpeg. (Siempre es una buena idea de todos modos, para la seguridad/correcciones de errores y aceleraciones)
Unos codecs, como -c:v libx265
, escribir directamente a stderr en lugar de utilizar la infraestructura de registro de ffmpeg. De modo que sus mensajes de registro no terminan en el archivo de informe. Supongo que es un elemento de error/lista TODO.
Para registrar stderr, al tiempo que lo ve en un terminal, puede usar tee(1)
.
Si utiliza un nivel de registro que incluye línea de estado actualiza (el valor por defecto -v info
, o más alto), que se incluirá en el archivo de registro, separados (también conocido como retorno de carro \r
) ^M
. No hay ningún nivel de registro que incluya estadísticas de codificador (como SSIM), pero no actualizaciones de línea de estado, por lo que la mejor opción es probablemente filtrar esa secuencia.
Si no desea filtrar (p. Ej.entonces el fps/bitrate en cada intervalo de actualización de estado está en el archivo), puede usar less -r
para pasarlos directamente a su terminal para que pueda ver los archivos limpiamente. Si tiene .enc
registros de varias codificaciones que desea hojear, less -r ++G *.enc
funciona muy bien. (++ G significa comenzar al final del archivo, para todos los archivos). Con single-key key bindings como .
y ,
para el siguiente archivo y el archivo anterior, puede hojear muy bien algunos archivos de registro. (los enlaces predeterminados son :n
y :p
).
Si quiere filtrar, sed 's/.*\r//'
funciona perfectamente para la salida de ffmpeg. (En el caso general, necesita algo like vt100.py
, pero no solo para retornos de carro). Hay (al menos) dos formas de hacer esto con tee + sed: tee
a/dev/tty y la salida de T de tubería en sed, o usa una sustitución de proceso para formar una T en una tubería a 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 pude hacer una flecha arriba y editarlo, pero lo desactivo 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
[email protected]${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
Nota que prueba la existencia del archivo de vídeo de salida para evitar arrojar basura adicional en el archivo de registro si ya existe. Aun así, utilicé y agregué (>>
) redirigir.
Sería "más limpio" escribir una función de shell que tomara args en lugar de mirar variables de shell, pero esto era conveniente y fácil de escribir para mi propio uso. También es por eso que ahorré espacio al no citar correctamente todas mis expansiones variables. ($v
en lugar de "$v"
)
- 1. ¿Dónde puedo encontrar el registro de transacciones de MySQL?
- 2. ffmpeg no encontrar vcodec h264
- 3. ffmpeg para un android (usando el tutorial: "ffmpeg and Android.mk")
- 4. Dónde puedo encontrar el archivo de registro de MySQL en XAMPP
- 5. Registro de Java: ¿dónde está mi archivo de registro?
- 6. Usando FFMPEG y el ejemplo url_fopen
- 7. ¿Cómo puedo limitar el uso de memoria de ffmpeg?
- 8. Cómo generar un archivo SDP desde FFMPEG
- 9. FFmpeg Cómo escribir vídeo a un archivo
- 10. ¿Cómo encontrar el registro coincidente en mongodb?
- 11. ffmpeg y opengl
- 12. ¿Dónde puedo encontrar archivos de registro de errores?
- 13. Subproceso FFMPEG y Python
- 14. Encontrar archivo de registro Log4J
- 15. ¿Cómo puedo limitar el uso de CPU FFMpeg?
- 16. FFmpeg: archivo Jpeg a AVFrame
- 17. Comprender y usar las configuraciones de ffmpeg
- 18. cómo funcionan VLC y FFMPEG juntos?
- 19. ffmpeg av_seek_frame
- 20. cómo usar ffmpeg
- 21. ¿Dónde puedo encontrar el registro de Tomcat escrito por 'run-run' de Grails?
- 22. ¿Dónde está el archivo de registro de nodejs?
- 23. ¿Dónde puedo encontrar programáticamente dónde se almacenan los archivos de registro log4j?
- 24. ¿Dónde se encuentra el registro de PHPMailer?
- 25. FFMpeg jni en Android?
- 26. ¿Puedo ffmpeg grabar en el código de tiempo?
- 27. ¿Dónde creará log4net este archivo de registro?
- 28. usando ffmpeg hwaccel de C++
- 29. Hacer un video con opencv y ffmpeg. ¿Cómo encontrar el formato de color correcto?
- 30. Encontrar el registro MX usando C#?
Si bien ffmpeg puede no proporcionar una opción para escribir archivos de registro, dependiendo de su códec y opciones, el codificador creará registros. Y eso puede ser muy perturbador, ya que está escrito donde se ejecutó, lo que puede generar problemas de permisos. En mi caso, era un problema con ** PHP ** y con '-pass 1/2'. – cregox
@Stu Thompson, el problema aquí es que ffmpeg no produce salida de depuración normal a stderr cuando ffmpeg no se ejecuta desde una consola sino que se ejecuta programáticamente (comprueba si se trata de un TTY). – Tom
@Tom: no tengo ese problema, mi código Java llama a FFmpeg programáticamente sin problemas. Y no soy el único. –