如何运行ffmpeg而不输出配置信息?

44 投票
4 回答
22822 浏览
提问于 2025-04-16 15:21

我正在使用ffmpeg,通过subprocess.Popen来调用它,并尝试捕获stderr的输出,然后把这些信息写入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会生成很多配置的信息,比如下面这些:

FFmpeg版本 0.6.2-4:0.6.2-1ubuntu1,
版权所有 (c) 2000-2010 Libav开发者
构建时间:2011年3月22日 15:55:04,使用gcc 4.5.2
配置信息:
--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
警告:库配置不匹配
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
libavcodec配置:
--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

在最终输出我想记录的信息之前:

似乎流0的编解码器帧率与容器帧率不同:
47.95 (66893/1395) -> 23.98 (66893/2790) 至少必须指定一个输出文件

有没有什么选项可以防止这些过多的输出?我应该换个方式做吗?

4 个回答

1

看看ffmpeg的手册,特别是-loglevel这个参数。

3

据我所知,没有办法,loglevel 没什么用。看看 ffmpeg.c 文件:

init_opts();
show_banner();

还有 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);
}

你可以在 这里 查看一个尝试跳过这个问题的失败案例(我不明白 GPL 和这个有什么关系)。我建议你去 提交一个bug,希望你能说服他们。

和很多人一样,我把 ffmpeg 编译时的 show_banner() 注释掉了,实在是太麻烦了。

66

从FFmpeg 2.2版本开始,这个功能变得可能了,你可以使用-hide_banner这个选项。你还可以查看相关的提交记录问题单

撰写回答