【问题标题】:Run ffmpeg without outputting configuration information?运行ffmpeg而不输出配置信息?
【发布时间】:2011-08-01 13:18:16
【问题描述】:

我正在使用subprocess.Popen 调用ffmpeg,并尝试捕获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 --启用-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
libav 格式 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) 至少一个输出文件 必须指定

是否有防止这种过度输出的选项?我应该采取不同的做法吗?

【问题讨论】:

标签: python logging ffmpeg subprocess stderr


【解决方案1】:

现在可以使用 -hide_banner 选项从 FFmpeg 2.2 开始。另请参阅相关的committicket

【讨论】:

  • 如果有一个 FFOPTIONS 环境变量我可以添加它,这样横幅总是隐藏的,但我认为没有这样的功能会很好吗?
  • 您可以将alias ffmpeg='ffmpeg -hide_banner' 放入您的.bashrc(或其他与您的shell 相关的文件)中,以防止ffmpeg 使您的终端混乱,而无需每次都指定选项
【解决方案2】:

AFAIK 没办法,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);
}

请参阅here 以了解跳过它的失败尝试(我不明白 GPL 与此有什么关系)。我建议你file a bug,希望你有足够的说服力。

和其他很多人一样,我已经编译了带有show_banner() 注释掉的ffmpeg,这简直令人厌烦。

【讨论】:

  • 他们的错误跟踪器非常垃圾。 +1 如果您可以在跟踪器中获得讨论横幅的错误链接。谢谢。
  • 如果您可以链接到他们跟踪器中的相关错误,我仍然愿意 +1。
  • @Matt:我没有找到任何关于横幅的错误报告:ffmpeg.org/trac/ffmpeg/…。但请注意,其中一位作者(Ronald S. Bultje)在邮件列表中说这不会发生。
【解决方案3】:

查看 ffmpeg 的手册页,尤其是 -loglevel 参数。

【讨论】:

【解决方案4】:

FFmpeg != Libav

来自带有-loglevel参数的FFmpeg的ffmpeg按预期工作。

【讨论】:

  • 什么版本的ffmpeg?接受的解决方案提到此站点实际上不起作用。
  • 似乎 ffmpeg -loglevel 适用于任何高于“info”的日志级别。日志级别参数是(从最不详细到最详细):“安静”“恐慌”“致命”“错误”“警告”“信息”“详细”“调试”。我正在使用 ffmpeg 1.0(基于 mac)。
猜你喜欢
  • 2015-09-24
  • 2018-05-17
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 2010-10-10
  • 2022-11-27
  • 2019-02-14
相关资源
最近更新 更多