Ion*_*zău 113 terminal video adobe-flash
我正在寻找一种在终端中观看 YouTube 视频的方法(不是在浏览器或其他窗口中,而是在任何 bash 会话中)。
有没有一种简单的方法可以做到这一点?
我想象这样的事情:
$ youtube <video-url>
Run Code Online (Sandbox Code Playgroud)
我已经知道如何使用mplayer以下方法播放视频:
$ mplayer -vo caca local-file.avi
Run Code Online (Sandbox Code Playgroud)
但是,这会打开一个新窗口。在终端中播放它会很酷。
此外,它应该与tmux会话兼容。
我问了另一个关于如何防止打开新窗口的问题。
对于那些想知道我在哪里需要这样的功能的人,我开始了一个名为TmuxOStmux的实验项目—— 其概念是一切都应该在session内运行 。
所以,确实我需要一个本地和远程视频的视频播放器。:-)
slm*_*slm 139
您可以下载视频和/或仅下载音频,然后使用youtube-dl. 该脚本是用 Python 编写的,并使用了ffmpeg我相信的。
$ youtube-dl --help
Usage: youtube-dl [options] url [url...]
Options:
General Options:
-h, --help print this help text and exit
--version print program version and exit
-U, --update update this program to latest version.
Make sure that you have sufficient
permissions (run with sudo if needed)
...
...
Run Code Online (Sandbox Code Playgroud)
要下载视频,您只需从您想要视频的页面上给它一个 URL,脚本会完成剩下的工作:
$ youtube-dl https://www.youtube.com/watch?v=OwvZemXJhF4
[youtube] Setting language
[youtube] OwvZemXJhF4: Downloading webpage
[youtube] OwvZemXJhF4: Downloading video info webpage
[youtube] OwvZemXJhF4: Extracting video information
[youtube] OwvZemXJhF4: Encrypted signatures detected.
[youtube] OwvZemXJhF4: Downloading js player 7N
[youtube] OwvZemXJhF4: Downloading js player 7N
[download] Destination: Joe Nichols - Yeah (Audio)-OwvZemXJhF4.mp4
[download] 100% of 21.74MiB in 00:16
Run Code Online (Sandbox Code Playgroud)
然后您可以使用vlc或mplayer在本地观看这些:
$ vlc "Joe Nichols - Yeah (Audio)-OwvZemXJhF4.mp4"
VLC media player 2.1.5 Rincewind (revision 2.1.4-49-gdab6cb5)
[0x1cd1118] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
Fontconfig warning: FcPattern object size does not accept value "0"
Fontconfig warning: FcPattern object size does not accept value "0"
Fontconfig warning: FcPattern object size does not accept value "0"
Fontconfig warning: FcPattern object size does not accept value "0"
Run Code Online (Sandbox Code Playgroud)
我发现这篇博客文章标题为:On ascii, youtube and let go演示了我在聊天室中讨论的方法,主要youtube-dl用作“后端”,它可以下载 YouTube 流,然后将其重定向到其他一些应用程序。
这篇文章显示它是通过以下方式完成的mplayer:
$ youtube-dl http://www.youtube.com/watch?v=OC83NA5tAGE -o - | \
mplayer -vo aa -monitorpixelaspect 0.5 -
Run Code Online (Sandbox Code Playgroud)
正在下载的视频youtube-dl通过上面的 STDOUT 重定向-o -。这里有一个效果演示。

通过安装附加库,可以进一步增强 ASCII 视频。

我发现了这个技巧,它允许xterm在 O'Reilly的文章中播放视频,标题为:在 ASCII 艺术中观看视频。
$ xterm -fn 5x7 -geometry 250x80 -e "mplayer -vo aa:driver=curses j.mp4
Run Code Online (Sandbox Code Playgroud)
以上结果xterm会打开一个窗口,在其中播放视频。

所以我想,为什么不把花生酱和巧克力像这样放在一起:
$ xterm -fn 5x7 -geometry 250x80 -e \
"youtube-dl http://www.youtube.com/watch?v=OC83NA5tAGE -o - | \
mplayer -vo aa:driver=curses -"
Run Code Online (Sandbox Code Playgroud)
这几乎有效!我不确定为什么视频无法在窗口中播放,但看起来应该可以。窗口出现并开始播放,但随后关闭。我看了几秒钟的视频,然后什么也没有。
也许上述内容会让您更接近最终解决方案,或者可能只需要对选项进行一些调整。
如果您已libcaca安装(彩色版本aalib)并将字体大小减小gnome-terminal到非常小的尺寸,例如 3,以下命令将直接在终端中显示更好看的 ASCII 视频:
$ CACA_DRIVER=ncurses mplayer -vo caca video.mp4
Run Code Online (Sandbox Code Playgroud)

终端的选择似乎对是否mplayer可以直接在终端内播放或是否打开单独的窗口有很大影响。缓存mplayer在能够直接在一个终端中播放方面也产生了巨大的差异。
使用此命令,我terminator至少可以在视频切出之前的前 1/4 中播放:
$ youtube-dl http://www.youtube.com/watch?v=OC83NA5tAGE -o - | \
mplayer -cache 32767 -vo aa:driver=curses -
Run Code Online (Sandbox Code Playgroud)
彩色版本使用此命令:
$ youtube-dl http://www.youtube.com/watch?v=OC83NA5tAGE -o - | \
CACA_DRIVER=ncurses mplayer -cache 64000 -vo caca -
Run Code Online (Sandbox Code Playgroud)
这些相同的命令也可以在gnome-terminal& 中播放xterm。

注:这是(从左至右)xterm,terminator,gnome-terminal,和terminology。
mik*_*erv 16
因此,在撰写本文时,使用术语 (顺便说 一下,这可能是终端仿真器中发生过的最好的事情)有以下作用:
ytplay() (
init() if [ "${#1}" -gt 0 ] && i=$? du= f=
then durl \! \" \# \$ \% \& \' \( \) \* \
\+ \, \/ \: \; \= \? \@ \[ \]
: >"${f:=${2:-/tmp/vid}.$(
durl "$1" 's/.*mime=[^/]*.\([^&]*\).*/\1/'
)}"
init() { loop; }
else ! echo 'NO LINK SPECIFIED!' >&3
fi
durl() if [ "${#du}" -eq 0 ]
then du=$(for c do printf 's/%%%X/\\%s/g;' "'$c" "$c"; done)
else curl -s "$1" | { shift
sed '/.*url_encoded_fmt_stream_map[^,]*url=/!d
s///;s/,.*//;s/\\u0026/\&/g;'"$du$*"; }
fi
loop() if [ "$((i=$i+1))" -le 5 ] &&
sleep "$(($i*2))"
then play || kill "$pid" || :
else ! echo 'ERROR RETRIEVING VIDEO!' >&3
fi
play() if [ -s "$f" ]
then printf '\033}bt%s\0' "$f"; exit
fi
while init "$@" || exit
do curl -s "$(durl "$1")" >"$f" & pid=$!
done 3>&2 2>/dev/null
)
Run Code Online (Sandbox Code Playgroud)
在terminology特定的位是then块play()-该printf \033}...线。terminology接受用于将媒体打印到屏幕的扩展终端转义 - 有点像提示颜色,但也有高清视频和基本上你想要的任何其他内容。
其余的是一些curl | sed脚本:
ytplay 'https://www.youtube.com/watch?v=${id}' 等等...curl "$yturl" | grep url_encoded_fmt_stream_map看到整个街区。grep上述操作,您将在以"引号分隔的...stream_map: "字段中找到该列表。%[[:hexdigit:]]\{2\}编码解析为工作链接。
/tmp/vid.${mime-type}但如果ytplay使用第二个参数调用,它会将其解释为目标下载文件名 - 同时仍根据 mime 类型附加扩展名。terminology的地方媒体现在终端转义,否则它只是放弃并给您留下一条错误消息在帽子。
\033}bt[LINK/FILE]\0用于全窗口播放。pn将它弹出到一个新窗口。还有其他用于几何限制游戏区域的方法 - 例如仅用于窗口的一部分。这仅经历了非常少的测试,但到目前为止对每个链接都没有失败,只有一个 - 而且因为我实际上对观看没有播放的链接并不感兴趣,所以我没有试图找出答案为什么。
虽然它对所有文件都有效,但不一定每个都播放——这是因为一开始我盲目地将.mp4扩展名附加到目标文件中,而没有检查它是否正确。有可能我之前没有研究过的也只有这个。无论如何,我改变了它来处理它。
正如我之前提到的,唯一的terminology特定位在最后一个函数中 -play()因此您可以轻松地更改它以对下载/下载的视频文件执行任何您想要的操作 - 例如将它与mplayer另一个终端中的 CACA 库一起使用,或者将它弹出到vlc窗口或其他任何东西中。但如果你喜欢自己,你会在terminology.
哦,最后,这通常非常快- 到目前为止,我的速度在每次尝试中都使带宽最大化,但terminology无论如何都不需要整个文件来开始播放。
它正在工作:

youtube上有这个教程:
https://www.youtube.com/watch?v=QCuq0_nY3Xk
根据该视频,以下内容应该有效:
mplayer -cookies -cookies-file /tmp/cook.txt $(youtube-dl -g --cookies /tmp/cook.txt "https://www.youtube.com/watch?v=QCuq0_nY3Xk")
Run Code Online (Sandbox Code Playgroud)
您可以为此创建一个简单的函数:
playtube () {
mplayer -cookies -cookies-file /tmp/cook.txt $(youtube-dl -g --cookies /tmp/cook.txt "$1")
}
Run Code Online (Sandbox Code Playgroud)