youtube-dlを使用してビデオのメタデータをファイルに保存するには、bashで次のように呼び出すことができます。
youtube-dl -j https://www.youtube.com/watch?v=${video_id} > metadata.json
しかし、動画がプレイリストのコンテキストで参照される場合、つまり
youtube-dl -j https://www.youtube.com/watch?v=${video_id}&list=${list_id}&index=${index} > metadata.json
その後、youtube-dl はシェルからフォークまたはデタッチされ (これは正しく理解していますか?)、出力はファイルではなくターミナルに送信されます。プロセスは何かを待機して停止しているようです。Ctrl + C を使用して終了できます。
youtube-dl がなぜこのようなことを行うのでしょうか。また、これを防ぐことはできますか。再生リストに関連するメタデータとビデオに関連するメタデータを保存したいと考えています。
答え1
のシェルオペレータを使用してプロセスを実行すると、プロセスがバックグラウンドで実行されます&
。
問題のYouTube URLには「&」で区切られたクエリパラメータがあるため、引用シェルが「&」を演算子として解釈するのを防ぐには、URL 全体を二重引用符で囲むか (URL で変数も使用する場合推奨)、少なくとも & の前にバックスラッシュを付けます。
"https://host?a=b&c=d"
https//host?a=b\&c=d