开发者

Run ffmpeg without outputting configuration information?

开发者 https://www.devze.com 2023-02-22 20:33 出处:网络
I\'m invoking ffmpeg with subprocess.Popen, and trying to capture the stderr output and write it to logging.

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?


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


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.


Take a look at ffmpeg's manpage, especially the -loglevel parameter.


FFmpeg != Libav

ffmpeg from FFmpeg with -loglevel parameter works as expected.

0

精彩评论

暂无评论...
验证码 换一张
取 消