youtube-dlとmpvを使用してYouTubeの自動再生を有効にする方法は?

youtube-dlとmpvを使用してYouTubeの自動再生を有効にする方法は?

動画を再生してYouTubeの自動再生動画に従う方法はありますか?

youtube-dlおよび/またはを使用してこれを実行できますかmpv

答え1

簡素化されたアプローチ

小さなスクリプトを使用できます。

#!/usr/bin/perl
use strict;
use warnings;

my $id = $ARGV[0] or die "youtube ID as param needed"; 
$id =~ s/.*v=//;
my $yt = "https://www.youtube.com/watch?v="; 
while(1){
    `mpv $yt$id`; 
    ($id) = `wget -q -O- "$yt$id"` =~ /"autoplay":\{.*?"videoId":"([^"]+)"/; 
    print "$id\n";
}

別の名前で保存してautoplay.pl呼び出してchmod 755 autoplay.plみてください。./autoplay.pl 5YTxsc3Cz24

またはシェルから直接:

perl -e 'my $id="5YTxsc3Cz24"; my $yt = "https://www.youtube.com/watch?v="; while(1){`mpv $yt$id`; ($id) = `wget -q -O- "$yt$id"` =~ /"autoplay":\{.*?"videoId":"([^"]+)"/; print "$id\n";}'

ctrl + cを押して再生を終了できます(mpvに1回、スクリプトに1回)。

冗長IDの防止

上記のコードは基本的な例であり、ループを避けません。同じIDで動画を繰り返し再生したくない場合は、バケットを追加するだけです。

#!/usr/bin/perl
use strict;
use warnings;

my $id = $ARGV[0] or die "youtube ID or youtube url as param needed"; 
$id =~ s/.*v=//;
my $yt = "https://www.youtube.com/watch?v="; 
my %bucket = ($id => 1);
while(defined $id){
    print "$id\n";
    `mpv $yt$id`; 
    my @ids = `wget -q -O- "$yt$id"` =~ /"videoId":"([^"]+)"/g; 
    undef $id;
    for my $i(@ids){
        unless($bucket{$i}){
            $id = $i;
            ++$bucket{$id};
        }
    }
}

このコードは現在YouTubeページのすべてのIDを検索し、すでに再生されているIDをスキップします。現在のページで再生されていないIDが見つからない場合は終了します。

冗長IDを避けるのは難しいです。

ただし、まれな(?)場合は、現在のYouTubeページのすべてのIDを再生している可能性があります。その後、スクリプトはすでにIDを持つページを見つける必要があります。

#!/usr/bin/perl
use strict;
use warnings;

my $id = $ARGV[0] or die "youtube ID or youtube url as param needed"; 
$id =~ s/.*v=//;
my $yt = "https://www.youtube.com/watch?v="; 
my %bucket = ($id => 1);

sub get_new_videoID{
    my $id = shift;
    my @ids = `wget -q -O- "$yt$id"` =~ /"videoId":"([^"]+)"/g; 
    my $new_id;
    for my $i(@ids){
        unless($bucket{$i}){
            ++$bucket{$i};
            $new_id = $i;
            last;
        }
    }
    return $new_id;
}

sub search_seen_videos{
    my @seen_IDs = keys %bucket;
    my $new_id;
    for my $id(@seen_IDs){
        $new_id = get_new_videoID($id);
        last if defined $new_id;
    }
    return $new_id;
}

while(defined $id){
    print "$id\n";
    `mpv $yt$id`; 
    $id = get_new_videoID($id) // search_seen_videos();
}
print "you have watched all related videos. better do something else now.\n";

答え2

youtube-dlとmpvを使用してストリーミングできます。

私のスクリプトあなたが望むもの。これはとても簡単です...

  1. YTリンクであることを確認し、
  2. 指定されたパラメータを確認してください。
    • -dダウンロード用
    • -nvは映像がないという意味なのでミュージックビデオを聴くことができます。
  3. たとえば、wgetを使用してYTリンクソースを取得します。
  4. いくつかのgrepとトリミングを使用して、以下のすべてのおすすめ動画の動画IDを取得してください。
  5. 一つずつプレイしてみてください

答え3

最小限の労働集約的オプションは、ターミナルプログラムmps-youtubeの関連ビデオ機能を使用することです。ここで確認してください:https://github.com/mps-youtube/mps-youtube

たとえば、

Chris Cornellの記念動画を視聴してmps-youtubeをインストールして起動した場合は、次のコマンドを使用して動画の再生を「true」に設定できます(それ以外の場合は音声のみ再生されます)。

set show_video true

次に、再生したい動画やプレイリストを見つけます。

ビデオの場合:

.Chris Cornell Tribute

次に、関連動画を追加する動画を選択します。

r 1

(ここで1は関連動画が欲しい動画です)

次に、再生するビデオの範囲を入力します。

1-50

(関連映像はすべて最大50個まで再生されます。)

デフォルトのビデオプレーヤーをmpvに設定することもできます。プログラムのデフォルト値はmPlayerに設定されているためです。私はこれが混合に完全に別々のプログラムを追加することを知っていますが、端末に滞在し続けるために必要なスキルを活用しています。

答え4

mpv私はこれのためにスクリプトを作成しました。https://github.com/cvzi/mpv-youtube-upnext

YouTube動画を起動すると、常に自動再生動画がmpv再生リストに追加されます。

関連情報