不输出配置信息的情况下运行ffmpeg?

43

我正在使用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 --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) 必须指定至少一个输出文件

有什么选项可以防止这种过度输出吗?我应该用不同的方法吗?


相关链接:https://superuser.com/q/326629/736190 - jdhao
4个回答

65

6
如果有一个FFOPTIONS环境变量可以添加这个功能,使横幅始终隐藏,那就太好了,但我认为并没有这样的功能存在? - yoyo
6
您可以在您的 .bashrc 文件(或与您的 shell 相关的其他文件)中添加“alias ffmpeg='ffmpeg -hide_banner'”以避免每次使用ffmpeg命令时都需要指定选项,从而使终端不会被杂乱输出。 - m132
使用bash函数function ffmpeg () { command ffmpeg -hide_banner "$@"; }; export -f ffmpeg而不是别名的优点是您可以直接使用GNU Parallel(而不是使用env_parallel - Stefan Schmidt

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与此有何关系)。建议您提交错误报告,并希望您能够令人信服。

像许多其他人一样,我已经编译了带有show_banner()注释的ffmpeg,这非常让人疲倦。


他们的错误跟踪器真是太烂了。如果你能找到一个讨论横幅的跟踪器中的链接,就点个赞吧。谢谢。 - Matt Joiner
如果您能链接到相关的错误跟踪器,我仍然想要给出+1。 - Matt Joiner
1
@Matt:我没有找到有关横幅的错误报告:https://ffmpeg.org/trac/ffmpeg/query?status=closed&status=new&status=open&status=reopened&max=3000&order=priority。但请注意,其中一位作者(Ronald S. Bultje)在邮件列表中表示,这不会发生。 - tokland

1

看一下ffmpeg的man页面,特别是-loglevel参数。


我尝试了-loglevel panic,它抑制了输出。 - nish

-2

FFmpeg != Libav

ffmpeg 带有 -loglevel 参数的版本可以正常工作。


1
FFmpeg的哪个版本?被接受的解决方案提到了这些网站实际上不起作用。 - Matt Joiner
似乎 ffmpeg -loglevel <level> 对于高于“info”的任何日志级别都有效。 日志级别参数为(从最不详细到最详细):“quiet”、“panic”、“fatal”、“error”、“warning”、“info”、“verbose”、“debug”。 我正在使用在 Mac 上构建的 ffmpeg 1.0 版本。 - stib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接