2011-04-08 17 views
18

Invoco ffmpeg con subprocess.Popen, y trato de capturar la salida stderr y la escribo en logging.Ejecute ffmpeg sin generar información de configuración?

args = ['ffmpeg', '-i', path] 
if start: 
    args += ['-ss', start] 
if end: 
    args += ['-t', end] 
args += [ 
    '-vcodec', 'copy', 
    '-acodec', 'copy', 
    '-scodec', 'copy', 
    '-f', 'mpegts', 
    '-y', '/dev/stdout'] 
self.child = subprocess.Popen(
    args, 
    stdin=open(os.devnull, 'rb'), 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE) 

ffmpeg genera una gran cantidad de información de configuración como la siguiente:

FFmpeg versión 0.6.2-4: 0.6.2-1ubuntu1, Copyright (C) 2000-2010 los desarrolladores Libav construido en Mar 22 2011 15:55:04 con gcc 4.5.2
configuración: --extra-version = 4: 0.6.2-1ubuntu1 --prefix =/usr --enable-avfilter --enable-avfilter -lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex - -enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable- postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static ADVERTENCIA: configuración de la biblioteca desajuste configuración de libavutil: --extra-version = 4: 0.6.2-1ubuntu2 - -prefix =/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libdirac --enable-libgsm --enable-libopenjpeg --enable-libschroedinger --enable -libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg - -enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libfaad --enable-libdirac --enable-libfaad --enable-libmp3lame --enable-librtmp --enable-libx264 - -enable-libxvid --enable-libdc1394 --enable-shared --disable-static configuración libavcodec: --extra-versión = 4: 0.6.2-1ubuntu2 --prefix =/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libdirac --enable-libgsm --enable-libopenjpeg --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libfaad --enable -libdirac --enable-libfaad --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libdc1394 --enable-shared --disable-static libavutil 50.15. 1/50.15. 1
libavcodec 52.72. 2/52.72. 2
libavformat 52.64. 2/52.64. 2
libavdevice 52. 2. 0/52. 2. 0
libavfilter 1.19. 0/1.19. 0
libswscale 0.11. 0/0.11. 0
libpostproc 51. 2. 0/51. 2. 0

Antes de finalmente dar salida a las cosas que me gustaría iniciar la sesión:

Parece corriente 0 códec de velocidad de fotogramas difiere de contenedores velocidad de cuadro: 47.95 (66893/1395) -> 23.98 (66893/2790) al menos un archivo de salida se debe especificar

¿hay una opción para evitar esta salida excesiva? ¿Debo hacerlo de otra manera?

Respuesta

32

Esto ahora es posible a partir de FFmpeg 2.2 con la opción -hide_banner. Ver también el relevante commit y ticket.

+2

Sería bueno si hubiera una variable de entorno FFOPTIONS a la que pudiera agregar esto para que el banner esté siempre oculto, pero no creo que exista tal característica? – yoyo

0

Eche un vistazo a la página de manual de ffmpeg, especialmente el parámetro -loglevel.

+1

He intentado '-loglevel', y parece no tener ningún efecto. –

+0

Intenté -loglevel pánico y suprimió la salida. https://superuser.com/questions/326629/how-can-i-make-ffmpeg-be-quieter-less-verbose – nish

3

AFAIK no hay manera, loglevel es inútil. Mira ffmpeg.c:

init_opts(); 
show_banner(); 

y cmdutils.c:

void show_banner(void) 
{ 
    fprintf(stderr, "%s version " FFMPEG_VERSION ", Copyright (c) %d-%d the FFmpeg developers\n", 
      program_name, program_birth_year, this_year); 
    fprintf(stderr, " built on %s %s with %s %s\n", 
      __DATE__, __TIME__, CC_TYPE, CC_VERSION); 
    fprintf(stderr, " configuration: " FFMPEG_CONFIGURATION "\n"); 
    print_all_libs_info(stderr, INDENT|SHOW_CONFIG); 
    print_all_libs_info(stderr, INDENT|SHOW_VERSION); 
} 

Ver here de un intento fallido de tomarlo (no conseguir lo que la GPL tiene que ver con nada de esto). Le sugiero que llame al file a bug y espero que esté convencido lo suficiente.

Como muchos otros, tengo ffmpeg compilado con show_banner() comentado, es simplemente fastidioso.

+0

Su rastreador de errores es una mierda épica. +1 si puede obtener un enlace a un error _en el rastreador_ sobre el banner. Gracias. –

+0

Todavía me gustaría dar +1 si puede vincular a un error relevante en su rastreador. –

+1

@Matt: No encontré ningún informe de error relacionado con el banner: https://ffmpeg.org/trac/ffmpeg/query?status=closed&status=new&status=open&status=reopened&max=3000&order=priority. Pero tenga en cuenta que uno de los autores (Ronald S. Bultje) dijo en la lista de correo que esto no iba a suceder. – tokland

-1

FFmpeg! = Libav

ffmpeg de FFmpeg con -loglevel parámetro funciona como se espera.

+1

¿Qué versión de ffmpeg? La solución aceptada menciona que estos sitios no funcionan. –

+0

parece que ffmpeg -loglevel funciona para cualquier nivel de registro superior a "información". Los parámetros de LogLevel son (de menos detallado a la mayoría): "silencioso" "pánico" "fatal" "error" "advertencia" "información" "detallado" "depuración". Estoy usando ffmpeg 1.0 (basado en Mac). – stib

Cuestiones relacionadas