ffmpeg менее многословен, не скрывает индикатор выполнения

Без редактирования и перекомпиляцииffmpegиз источника, как можно скрыть некоторые из многих строк, которые он печатает, когда он начинает кодирование, не скрывая при этом индикатор выполнения, который обновляется примерно каждую секунду во время кодирования?

Индикатор:
frame=14759 fps=3226 … bitrate=8509.2kbits/s speed= 108x

Типичная команда:
ffmpeg -hide_banner in.mov out.mp4

Типичный шум: дюжина и более строк типа

        Duration: 00:59:19.45, start: 0.257200, bitrate: 9623 kb/s
    Stream #0:0[0x1bf]: Data: dvd_nav_packet
    Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, smpte170m, bottom first), 720x480 [SAR 8:9 DAR 4:3], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:2[0xa0]: Audio: pcm_dvd, 48000 Hz, stereo, s16, 1536 kb/s
Stream mapping:
  Stream #0:1 -> #0:0 (copy)
  Stream #0:2 -> #0:1 (pcm_dvd (native) -> ac3 (native))

Эти попытки скрываютStream, но также скрыть индикатор выполнения (потому что он никогда не достигаетegrep, из-за\rвместо\n?):

stdbuf -i0 -o0 -e0 ( ffmpeg … 2>&1 ) | grep -v Stream

unbuffer ffmpeg … | unbuffer grep -v Stream

Заменить grep чем-то небуферизованным по своей сути?
sed -u /Stream/dтакже скрывает индикатор выполнения.

Связано: https://stackoverflow.com/questions/3465619/how-to-make-output-of-any-shell-command-unbuffered

Действительно сложный возможный подход: https://unix.stackexchange.com/questions/330636/how-to-grep-in-real-time-an-output-taining-a-progress-bar

2 ответа

      ffmpeg -v quiet -stats -i in.mov out.mp4

Нет необходимости использовать-hide_bannerфлаг.

Понизить уровень журнала доwarning/24но скройте баннер и явно включите статистику.

      ffmpeg -hide_banner -v warning -stats -i in.mov out.mp4
Другие вопросы по тегам