尾を防ぐ/維持する方法 \r を \n に変更します。

尾を防ぐ/維持する方法 \r を \n に変更します。

バックグラウンドでmpvでビデオを再生すると、次のような結果が表示されます。

$ 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

しかし、私は次のような出力が必要です(例:出力のないファイルを再生するとき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:私はttyのようなものを使っているので、それを/dev/pts/2入力するとstty inlcr現在のttyに影響します。

私はまだ同じ混乱の出力を取得します。tail -f nohup.out

編集2:@mosvyによると、tail非難する人ではなく、mpv非難されなければならない人です。

mpvsに対してS&Rを実行する方法を見つけました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)

編集3:@mosvyありがとう。今動作します。

$ 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

編集4:@ 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" &

どうすればいいですか?解決しました!

ベストアンサー1

tailはいいいえ\rに交換してください\n

プログラムは、mpvstderrが端末かどうかに応じてステータス出力を調整します。

tail次に置き換えることなく\r簡単なテストについて\n

$ nohup sh -c 'while printf "s=$((s=s+1))\r"; do sleep 1; done' &
[1] 3897
$ nohup: ignoring input and appending output to 'nohup.out'

$ tail -f nohup.out
s=8  # s=9, s=10 ... on the same line

親と同様に、mplayer誰かmpvが作者が想像したものとは異なる方法で実行しようとすると、非常にトリッキーになります。 stderrが通常のファイルまたはパイプの場合は、端末と同じ方法で実行するオプションがありません。その状態。あなたscreenができるtmux最も簡単なことはnohup

おすすめ記事