動画を再生して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";