Ответ 1
Теперь это возможно с FFmpeg 2.2 с опцией -hide_banner
. См. Также соответствующие commit и ticket.
Я вызываю 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, Copyright (c) 2000-2010 гг. Libav разработчики построили 22 марта 2011 года 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-libable - 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-libable - 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) Как минимум один выходной файл должен быть указан
Есть ли возможность предотвратить этот чрезмерный вывод? Должен ли я делать это по-другому?
Теперь это возможно с FFmpeg 2.2 с опцией -hide_banner
. См. Также соответствующие commit и ticket.
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);
}
Смотрите здесь за неудачную попытку пропустить его (я не понимаю, что GPL имеет к этому что-либо). Я предлагаю вам указать ошибку и надеюсь, что вы достаточно конвектируете.
Как и многие другие, я скомпилировал ffmpeg с show_banner()
, это просто утомительно.
Взгляните на man-страницу ffmpeg, особенно параметр -loglevel
.
FFmpeg!= Libav
ffmpeg
из FFmpeg с параметром -loglevel
работает как ожидалось.