Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run ffmpeg without outputting configuration information?

I'm invoking ffmpeg with subprocess.Popen, and trying to capture the stderr output and write it to 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 generates a lot of configuration information like the following:

FFmpeg version 0.6.2-4:0.6.2-1ubuntu1, Copyright (c) 2000-2010 the Libav developers built on Mar 22 2011 15:55:04 with gcc 4.5.2
configuration: --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 WARNING: library configuration mismatch libavutil configuration: --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 libavcodec configuration: --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

Prior to finally outputting the stuff I'd like to log:

Seems stream 0 codec frame rate differs from container frame rate: 47.95 (66893/1395) -> 23.98 (66893/2790) At least one output file must be specified

Is there an option to prevent this excessive output? Should I be doing it differently?

like image 354
Matt Joiner Avatar asked Apr 08 '11 13:04

Matt Joiner


2 Answers

This is now possible as of FFmpeg 2.2 with the -hide_banner option. See also the relevant commit and ticket.

like image 102
Andrew Marshall Avatar answered Oct 03 '22 13:10

Andrew Marshall


AFAIK there is no way, loglevel is no use. Look at ffmpeg.c:

init_opts(); show_banner(); 

and 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); } 

See here for an unsuccessful attempt of skipping it (I don't get what the GPL has to do with anything of this). I suggest you to file a bug and hope you are convicing enough.

As many others, I have ffmpeg compiled with show_banner() commented out, it's simply tiresome.

like image 30
tokland Avatar answered Oct 03 '22 12:10

tokland