example and python logging ffmpeg subprocess stderr

python - and - ¿Ejecutar ffmpeg sin generar información de configuración?



python execute shell command and get output (4)

AFAIK no hay manera, loglevel no sirve de nada. 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); }

Vea here un intento fallido de omitirlo (no entiendo qué tiene que ver la GPL con nada de esto). Le sugiero que presente un error y espero que esté lo suficientemente convencido.

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

Estoy invocando ffmpeg con subprocess.Popen , y tratando de capturar la salida stderr y escribirla en el logging .

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 mucha información de configuración como la siguiente:

FFmpeg versión 0.6.2-4: 0.6.2-1ubuntu1, Copyright (c) 2000-2010 que los desarrolladores de Libav crearon el 22 de marzo de 2011 15:55:04 con gcc 4.5.2
configuración - --extra-versión = 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 biblioteca no coincidente 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-li bdirac --enable-libfaad --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libdc1394 --enable-shared --disable-static libavcodec configuración: --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 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 registrar:

Parece que la velocidad de fotogramas del códec del flujo 0 difiere de la velocidad de fotogramas del contenedor: 47.95 (66893/1395) -> 23.98 (66893/2790) Se debe especificar al menos un archivo de salida

¿Hay alguna opción para evitar esta salida excesiva? ¿Debo hacerlo de otra manera?


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


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


FFmpeg! = Libav

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