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