Quando eu reproduzo um vídeo com mpv no backgroud, recebo isso:
$ tail -f nohup.out
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
(+) Video --vid=1 (*) (h264 1266x720 30.000fps)
(+) Audio --aid=1 (*) 'DASH audio' (aac 1ch 48000Hz) (external)
File tags:
Artist: TBN
Date: 20180113
Title: Joseph Prince joins Matt & Laurie TONIGHT on PRAISE... watch NOW!
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 1266x720 yuv420p
AV: 00:00:00 / 00:56:50 (0%) A-V: 0.000
AV: 00:00:00 / 00:56:50 (0%) A-V: 0.000
AV: 00:00:00 / 00:56:50 (0%) A-V: 0.000
... # THERE ARE QUITE A LOT OF LINES
AV: 00:00:03 / 00:56:50 (0%) A-V: 0.000
AV: 00:00:03 / 00:56:50 (0%) A-V: 0.000
Saving state.
Exiting... (Quit)
^C
mas eu adoraria ter essa saída (assim como quando eu reproduzo o arquivo sem o nohup
):
$ mpv --no-resume-playback https://www.facebook.com/TBN/videos/1580372468665943/
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
(+) Video --vid=1 (*) (h264 1266x720 30.000fps)
(+) Audio --aid=1 (*) 'DASH audio' (aac 1ch 48000Hz) (external)
File tags:
Artist: TBN
Date: 20180113
Title: Joseph Prince joins Matt & Laurie TONIGHT on PRAISE... watch NOW!
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 1266x720 yuv420p
AV: 00:00:03 / 00:56:50 (0%) A-V: 0.000
Saving state.
Exiting... (Quit)
EDIT1: Eu uso um tty like /dev/pts/2
, portanto, se eu digitar stty inlcr
, ele deve afetar o tty atual.
Eu ainda recebo a mesma saída confusa emtail -f nohup.out
EDIT2: De acordo com @mosvy tail
não é o culpado, mas mpv
é.
Eu descobri uma maneira de fazer um S&R mpv
em stderr
:
$ mpv --no-resume-playback https://www.facebook.com/TBN/videos/1580372468665943/ 2>&1 | perl -p -e '$| = 1;s/\n/\r/g if $_ =~ /^AV:/;s/Saving state/\nSaving state/' | tee mpv_all.log
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
(+) Video --vid=1 (*) (h264 634x360 30.000fps)
(+) Audio --aid=1 (*) (aac 1ch 48000Hz)
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 634x360 yuv420p
AV: 00:00:08 / 00:56:50 (0%) A-V: 0.000 Cache: 1024s+86MB
Saving state.
[ffmpeg] https: Will reconnect at 63421312 in 0 second(s), error=End of file.
Exiting... (Quit)
EDIT 3: @mosvy Obrigado, agora funciona:
$ nohup sh -c ' mpv --no-resume-playback https://www.facebook.com/TBN/videos/1580372468665943/ 2>&1 | perl -p -e '\''$| = 1;s/\n/\r/g if $_ =~ /^AV:/;s/Saving state/\nSaving state/'\'' ' &
$ tail -f nohup.out
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
(+) Video --vid=1 (*) (h264 634x360 30.000fps)
(+) Audio --aid=1 (*) (aac 1ch 48000Hz)
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 634x360 yuv420p
AV: 00:00:08 / 00:56:50 (0%) A-V: 0.000 Cache: 1767s+147MB
Saving state.
[ffmpeg] https: Will reconnect at 103693952 in 0 second(s), error=End of file.
Exiting... (Quit)
^C
EDIT 4: Outra solução graças a @jw013:
export perl_script='$| = 1;s/\n/\r/g if $_ =~ /^AV:/;s/Saving state/\nSaving state/'
mpv="command mpv"
args=("$@")
nohup sh -c "$mpv ${args[*]} 2>&1 | perl -p -e '$perl_script' | tee ~/mpv_all.log" &
Como posso fazer isso ? RESOLVIDO!
tail
não está substituindo\r
por\n
.É o seu
mpv
programa que está ajustando sua saída de status dependendo se seu stderr é um terminal.Teste trivial sobre
tail
não substituir o\r
por\n
:Assim como seu pai
mplayer
,mpv
é bastante mal-humorado quando alguém tenta executá-lo de uma forma diferente de como seus autores o imaginaram; Não consegui encontrar nenhuma opção para imprimir seu status da mesma maneira que em um terminal quando seu stderr é um arquivo ou pipe regular. A coisa mais fácil que você pode fazer é executá-lo em uma janelascreen
/ separada, em vez de com .tmux
nohup