如何运行ffmpeg而不输出配置信息?
我正在使用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 个回答
看看ffmpeg的手册,特别是-loglevel
这个参数。
据我所知,没有办法,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()
注释掉了,实在是太麻烦了。
从FFmpeg 2.2版本开始,这个功能变得可能了,你可以使用-hide_banner
这个选项。你还可以查看相关的提交记录和问题单。