Meu objetivo final é fazer com que uma caixa de diálogo de andamento do zenity funcione durante a codificação com o fdkaac.
Eu comecei com algum código que está trabalhando quando eu codifico "aa.wav" para "aa.mp3" com lame. Isso resulta em uma barra de progresso que é atualizada de 0 a 100%:
lame -m auto -V 4 aa.wav aa.mp3 | awk -vRS='\r' '(NR>3){gsub(/[()%|]/," ");print $2; fflush();}' | zenity --progress --title="Title" --text="encoding" --auto-close
Agora eu corro este código com fdkaac:
fdkaac --profile 2 --bitrate-mode 5 aa.wav -o aa.aac
Isso resulta na saída da tela no final da codificação:
[100%] 05: 31.227 / 05: 31.227 (43x), ETA 00: 00.000 |
14607096/14607096 amostras processadas em 00: 07.689
Durante a codificação, a primeira linha é impressa e o [100%] atualiza suavemente de 0 a 100 durante a codificação. No final da codificação, a segunda linha é impressa.
Com base nisso, modifico a pesquisa do gsub e substituo por: gsub (/ [[%] /, "") para selecionar os dados.
Agora executo este código:
fdkaac --profile 2 --bitrate-mode 5 aa.wav -o aa.aac 2>&1 | awk -vRS='\r' '(NR>3){gsub(/[\[%]/," ");print $1; fflush();}' | zenity --progress --title="Title" --text="Encoding" --auto-close
O resultado não é o que eu esperava. A caixa de diálogo de progresso aparece com 0% ... e depois de algum tempo pula para 50% ... e depois desaparece quando a codificação é concluída.
Então, dou uma olhada nos dados indo zenity com este código:
fdkaac --profile 2 --bitrate-mode 5 aa.wav -o aa.aac 2>&1 | awk -vRS='\r' '(NR>3){gsub(/[\[%]/," ");print $1; fflush();}'
A saída da tela não é o que eu esperava. 1 a 50 são todas impressas ao mesmo tempo, mas em linhas consecutivas e, em seguida, 50 a 100 são impressas em linhas consecutivas quando a codificação é concluída:
1
2
3
4
5
...
48
49
50
e continua até 50. e depois a saída continua em linhas separadas de 50 a 100 (novamente impressas todas ao mesmo tempo):
50
51
52
..
98
99
100
Assim, o problema é aparente ... Os dados de saída são impressos em dois lotes (como visto na caixa de diálogo). E os dados estão aparecendo em linhas consecutivas. (A saída lame após o filtro awk é toda impressa na mesma linha e atualizada sem problemas).
Eu suspeito que o problema tenha a ver com retornos extras de carro, mas eu não sei como me livrar deles. Eu tentei remover o comando -vRS = '\ r .. mas isso não resultou em nenhuma saída.
Eu não entendo a subsituição: RS = '\ r'. Onde a variável RS está aparecendo?
Também é estranho para mim que os dados sejam impressos exatamente em 50% e 100%. Por que não 38% ou 67%? .. então os dados estão me dizendo algo, mas não tenho certeza do que é.