web-dev-qa-db-ja.com

Youtube-dlはバックグラウンドでの実行を拒否します

コマンドの後にyoutube-dlを入力して、バックグラウンドで&を実行します。問題は、それをバックグラウンドに置いてもかまいませんし、端末に情報を印刷し続けることです。

止まるだけでなく Ctrl+C または Ctrl+Z、これらのメッセージを表示する以外は何もしません。停止するには、ターミナルを閉じる必要があります。

正確に何が起こるかです:

mohamed@Smithers:~$ clear
mohamed@Smithers:~$ youtube-dl https://www.youtube.com/watch?v=LMQsYSuw8hw &
[1] 2028
mohamed@Smithers:~$ [youtube] LMQsYSuw8hw: Downloading webpage
[youtube] LMQsYSuw8hw: Downloading video info webpage
[youtube] LMQsYSuw8hw: Extracting video information
[youtube] LMQsYSuw8hw: Downloading MPD manifest
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Resuming download at byte 11440128
[download] Destination: I Was On Japanese TV... and I F#%KING HATED IT.-LMQsYSuw8hw.f137.mp4
[download]   4.8% of 231.85MiB at 199.01KiB/s ETA 18:56^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
[download]   4.8% of 231.85MiB at 136.95KiB/s ETA 27:30^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
[download]   5.0% of 231.85MiB at 127.41KiB/s ETA 29:31^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
[download]   5.0% of 231.85MiB at 111.38KiB/s ETA 33:44^C
mohamed@Smithers:~$ ^C
[download]   5.0% of 231.85MiB at 111.21KiB/s ETA 33:47^C
mohamed@Smithers:~$ ^C
[download]   5.1% of 231.85MiB at 116.77KiB/s ETA 32:09^C

[download]   5.5% of 231.85MiB at 108.71KiB/s ETA 34:24^C

[download]   5.6% of 231.85MiB at 76.68KiB/s ETA 48:41
1
Mohamed Ashref

youtube-dlはバックグラウンドで実行されていますが、まだ出力を端末に送信しており、その進行状況を通知するためにかなり多くの出力を生成しています。これを変更するにはいくつかの方法がありますが、おそらくyoutube-dlproduceの出力を減らすか、その出力を端末に表示される代わりに、ファイル(または完全に破棄されます)。

方法1:youtube-dl -qを実行して、ステータスメッセージを抑制します。

進捗メッセージを表示したくない場合は、-qフラグ(または同じことを行う--quiet)をyoutube-dlコマンドに渡すことができます。

youtube-dl -q https://www.youtube.com/watch?v=NZ-ElsvYKyo &

もちろん、そのURLを、ダウンロードしようとしているものに置き換える必要があります。エラーや警告など、一部のメッセージが引き続き出力される場合があります。しかし、あなたはそれらを見たいと思うでしょう。

youtube-dlで警告を生成したくない場合は、youtube-dlフラグを指定して--no-warningsを実行できます。しかし、あなたがそれがあなたが望むものであることが確実でない限り、私はそれをすることを勧めません。

youtube-dl -q --no-warnings https://www.youtube.com/watch?v=NZ-ElsvYKyo &

youtube-dlで受け入れられるコマンドラインオプションの詳細については、man youtube-dlまたは オンラインでマニュアルページを読む を実行できます。

方法2:youtube-dlの標準出力をファイルにリダイレクトします。

現在のディレクトリのdl.logに出力を追加するには(これに名前を付けることができます。まだ存在しない場合は作成されます)、実行します:

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo >> dl.log &

末尾にテキストを追加する代わりにoverwritedl.logを使用する場合は、>の代わりに>>を使用します。

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo > dl.log &

その後、通常の出力はdl.log(または使用するよう指示したファイル)にリダイレクトされます。ただし、エラー出力は引き続き端末に表示されます。たとえば、そのコマンドを実行すると、端末に1つの警告が出力されました。

ek@Io:~$ youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo >> dl.log &
[1] 14456
ek@Io:~$ WARNING: Requested formats are incompatible for merge and will be merged into mkv

その他はすべてログファイルに記録されます。

ek@Io:~$ cat dl.log
[youtube] NZ-ElsvYKyo: Downloading webpage
[youtube] NZ-ElsvYKyo: Downloading video info webpage
[youtube] NZ-ElsvYKyo: Extracting video information
[youtube] NZ-ElsvYKyo: Downloading MPD manifest
[download] Destination: Lecture 1 _ Topics in String Theory-NZ-ElsvYKyo.f244.webm
[download]  23.2% of 359.52MiB at 204.49KiB/s ETA 23:02ek@Io:~$

いつでもcat(上記で行ったように)で出力を表示して、進行状況を確認できます。

youtube-dlなしで-qを実行すると、主に端末向けの出力が生成されます。この出力には、以前の進行メッセージを消去するよう端末に指示する制御文字が含まれているため、視覚的に新しい進行メッセージに置き換えることができます。 cat dl.logなど、ファイルを表示するいくつかの方法では、「消去された」メッセージや制御文字は表示されません。ただし、それらはまだファイルの一部であり、他のユーティリティで表示できます。たとえば、view dl.logは機能します。

方法2a:出力を/dev/nullにリダイレクトして削除します。

出力を実際のファイルに保存するのではなく単に破棄する場合は、 /dev/null にリダイレクトできます。

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo > /dev/null &

/dev/nullを使用すると、「上書き」(>)か「追加」(>>)かは関係ありません。

これは一般に便利な手法ですが、おそらくyoutube-dlでは不要です。進行を抑制したい場合は、代わりにyoutube-dl -qを実行するだけです。

方法3:標準エラーもリダイレクトします。

通常の出力エラー出力 は別々です。 youtube-dlが両方を生成することは一般的です。上記のメソッドは、標準出力のみをリダイレクトしました。標準エラーをリダイレクトすることもできます。 2つの出力ストリームを別々のファイルにリダイレクトするなど、リダイレクトでできることはたくさんあります。ここでは、標準出力と標準エラーの両方を同じファイルに送信する方法を示します。

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo &>> dl.log &

私がそれを実行したとき、私のシェルは

[2] 15009

...通常の出力とエラー出力の両方がdl.logに現れました:

ek@Io:~$ cat dl.log
[youtube] NZ-ElsvYKyo: Downloading webpage
[youtube] NZ-ElsvYKyo: Downloading video info webpage
[youtube] NZ-ElsvYKyo: Extracting video information
[youtube] NZ-ElsvYKyo: Downloading MPD manifest
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Destination: Lecture 1 _ Topics in String Theory-NZ-ElsvYKyo.f244.webm
[download]   0.0% of 359.52MiB at 107.65KiB/s ETA 56:59ek@Io:~$

上記の例では&>>を使用し、dl.logに追加します。代わりにファイルを上書きするには、&>の代わりに>&(または機能する&>>)を使用します。

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo &> dl.log &

方法3a:通常の出力とエラー出力の両方を/dev/nullにリダイレクトします。

本当にしたい場合は、標準出力と標準エラーの両方を/dev/nullにリダイレクトして、すべてが単に破棄されるようにすることができます。

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo &> /dev/null &

ただし、実際のエラーメッセージを見たいと思うでしょう。必要のないステータスメッセージと警告だけの場合は、リダイレクトは必要ありません。その場合、上記のようにyoutube-dl -q --no-warningsを使用できます。 (方法1を参照してください。)

5
Eliah Kagan