Sem editar e recompilar ffmpeg
a partir da fonte, como ocultar algumas das muitas linhas que imprime quando inicia a codificação, sem também ocultar sua barra de progresso que atualiza a cada segundo durante a codificação?
Barra de progresso:
frame=14759 fps=3226 … bitrate=8509.2kbits/s speed= 108x
Comando típico:
ffmpeg -hide_banner in.mov out.mp4
Ruído típico: uma dúzia ou mais de linhas como
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))
Essas tentativas ocultam Stream
, mas também ocultam a barra de progresso (porque ela nunca atinge egrep
, por causa de \r
em vez de \n
?):
stdbuf -i0 -o0 -e0 ( ffmpeg … 2>&1 ) | grep -v Stream
unbuffer ffmpeg … | unbuffer grep -v Stream
Substituir grep por algo inerentemente sem buffer?
sed -u /Stream/d
oculta a barra de progresso também.
Relacionado: https://stackoverflow.com/questions/3465619/how-to-make-output-of-any-shell-command-unbuffered
Abordagem possível realmente complicada: https://unix.stackexchange.com/questions/330636/how-to-grep-in-real-time-an-output-containing-a-progress-bar
Diminua o nível de log para
warning
/24
mas oculte o banner e ative expressamente as estatísticas.Não há necessidade de usar
-hide_banner
bandeira.