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";

おすすめ記事