동영상을 재생하고 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에 한 번, 스크립트에 한 번).
중복 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를 사용하여 스트리밍할 수 있습니다.
내 스크립트당신이 원하는 것. 이건 아주 간단해요...
- YT 링크인지 확인하고,
- 주어진 매개변수를 확인하세요.
- -d 다운로드용
- -nv는 영상이 없다는 뜻이므로 뮤직비디오를 들을 수 있습니다.
- 예를 들어 wget을 사용하여 YT 링크 소스를 가져옵니다.
- 몇 가지 grep 및 자르기를 사용하여 아래의 모든 추천 동영상의 동영상 ID를 얻으세요.
- 하나씩 플레이해 보세요
답변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
재생목록에 추가됩니다.