首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于搜索和查看/下载YouTube视频的CLI实用程序

用于搜索和查看/下载YouTube视频的CLI实用程序
EN

Unix & Linux用户
提问于 2019-01-22 15:34:41
回答 2查看 6.3K关注 0票数 4

是否有一个实用工具可以从命令行搜索YouTube,然后根据用户输入查看或下载搜索结果?

代码语言:javascript
复制
$ youtube-search madonna

1 Madonna - Hung Up (Official Music Video)
madonna ♩ 180M views 9 years ago
https://www.youtube.com/watch?v=EDwb9jOVRtU
"Hung Up" by Madonna from Confessions On A Dance Floor, available now.

2 Madonna - Like A Prayer (Official Music Video)
madonna ♩ 69M views 9 years ago
https://www.youtube.com/watch?v=79fzeNUqQbQ
2006 WMG Like A Prayer.

etc.

然后你可以进入:

  • "v1“查看视频1(带有VLC等)
  • "d1-3“下载影片1-3 (与youtube-dl等)
  • "n“查看下一页搜索结果

到目前为止我尝试过的是:

谷歌人部分地与YouTube一起工作,但出于某种原因,在搜索“麦当娜”时只显示了两个搜索结果。此外,在视图和下载之间也没有选择。

youtube-dl有一个搜索函数,但似乎不打印搜索结果,也不接受用户输入。youtube-dl -j ytsearch:madonna列出了有关搜索结果的元数据,但似乎没有包含所需的视频链接、标题和描述。

EN

回答 2

Unix & Linux用户

发布于 2019-01-22 19:44:41

基于硒的解决方案:

代码语言:javascript
复制
#!/usr/bin/env python

from pyvirtualdisplay import Display
from selenium import webdriver
import time
import argparse
import re
import subprocess


class bcolors:
    BLUE = '\033[94m'
    GREEN = '\033[92m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'

pattern1=re.compile("v:[0-9]");
pattern2=re.compile("d:[0-9](-[0-9])?$")

parser = argparse.ArgumentParser()
parser.add_argument("query", help="enter the youtube search query here")
args = parser.parse_args()
query=args.query

display = Display(visible=0, size=(800, 600))
display.start()

driver = webdriver.Chrome()  # Optional argument, if not specified will search path.
driver.get('https://youtube.com');
search_box = driver.find_element_by_name('search_query')
search_box.send_keys(query)
search_box.submit()

i=1
page = driver.find_elements_by_css_selector("ytd-video-renderer.ytd-item-section-renderer")
link_list=[];
for video in page:
    a1=video.find_element_by_id('thumbnail').get_attribute('href')
    a2=video.find_element_by_id('video-title').text
    a3=video.find_elements_by_css_selector('yt-formatted-string[has-link-only_]:not([force-default-style]) a.yt-simple-endpoint.yt-formatted-string')[0].text
    a4=video.find_elements_by_css_selector('#metadata-line.ytd-video-meta-block span.ytd-video-meta-block')[0].text
    a5=video.find_elements_by_css_selector('#metadata-line.ytd-video-meta-block span.ytd-video-meta-block')[1].text
    a6=video.find_elements_by_css_selector('#description-text.ytd-video-renderer')[0].text
    #ink=video.get_attribute('innerHTML')
    print i,a2
    print a3+"    "+a4+"    "+a5
    print a1
    print a6
    print
    i+=1
    link_list.append(a1)


driver.quit()
display.stop()

print bcolors.BOLD+bcolors.GREEN+"Available options- v: open video in VLC media player, d: download video by number, q: quit"+bcolors.ENDC
print bcolors.BOLD+bcolors.BLUE+"Usage - option:number    or    option:beginning-end"+bcolors.ENDC
print
entry="y"
while entry!="q":
    entry=raw_input(">")
    if pattern1.match(entry):
        link=entry.split(":")[1]
        bashCommand="vlc "+link_list[int(link)]
        pass
    elif pattern2.match(entry):
        nums=entry.split(":")[1]
        b=int(nums.split("-")[0])
        e=int(nums.split("-")[1])
        bashCommand="youtube-dl "+" ".join(link_list[b:e])
    print bashCommand
    process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
    output, error = process.communicate()
    pass

我还没有尝试运行实际的命令(Popen),但我认为应该可以这样做。

票数 1
EN

Unix & Linux用户

发布于 2022-04-19 09:01:55

这里是一个基于终端的工具:ytfzf。找到了,这里

在2022年测试它/ubuntu时,我发现它不像mps那样有问题,也不那么复杂-youtube。

在终端中键入ytfzf以启动。请参阅ytfzf -h的选项,如仅音频和下载。

搜索是在设置变量之后完成的,因此,例如

  • 为了只获得音频:ytfzf -m <search_term>
  • 为了下载视频:ytfzf -d <search_term>

我们可以在应用程序启动程序中添加类似于Exec=konsole -e ytfzf -m的行,称为"Youtube音频.“--其他选项也是如此。

上下滚动,按回车或双击选择标题.

默认播放器为mpv,下载由curl完成,设置为~/.config/ytfzf/conf.sh

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/495998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档