#!/usr/bin/env osh shopt -s strict:all; shopt --unset strict_errexit DEP="codemadness-frontends mpv youtube-dl" DEC="Listen or view youtube videos via mpv" DOC=" f_youtube allows you to search and playback either audio or video from youtube. It uses codemadness's youtube-cli tool to find results from youtube and allows you to either playback in the terminal the video (e.g. as low-fidelity ASCII) or allows you to just play the audio back. Set \$F_YOUTUBE_SEARCHQUERIES to be a space seperated list of tokens to customize the default search queries. " VAR=" F_YOUTUBE_SEARCHQUERIES='asmr cat fail news' " search() { youtube-cli "$@" | grep -Ev '^(Channelid|Atom feed|Channel title|Published|Viewcount|Userid):' | sed -E 's/^(URL|Duration):\s+/\t/g' | tr -d '\n' | sed 's/===/\n/g' | awk -F'\t' '{ print $3 " " $1 " " $2}' | nl } play() { local AV URL AV="$1" URL="$2" [ -p /tmp/fbp.fifo ] && { echo -e "\b\f\e"; echo "9 0 [ ] p" | tr " " "\n"; } > /tmp/fbp.fifo if [ "$AV" = "video" ]; then mpv --volume=10 --ytdl-format="[height<420]" --vo=tct --really-quiet --vo-tct-256=yes --profile=sw-fast "$URL" else mpv --volume=10 -v --no-video "$URL" fi } searchandpick() { local QUERY AV SEARCHRESULT SEARCHRESULTSIZE NUMBER AV="$1" QUERY="$2" SEARCHRESULT="$(search "$QUERY")" if test $? -eq 0; then # Pick a number SEARCHRESULTSIZE="$(echo "$SEARCHRESULT" | wc -l)" printf %b "-----\n${SEARCHRESULT}\n----\n" [ -p /tmp/fbp.fifo ] && { echo -e "\b\f\r"; seq "$SEARCHRESULTSIZE"; } > /tmp/fbp.fifo read -p "Pick number: " NUMBER # Play play "$AV" "$( echo -e "$SEARCHRESULT" | grep -E "^\s*${NUMBER}\s" | awk -F' ' '{print $NF}' )" fi } devicepine64pinephone() { amixer set "AIF1 DA0" "100%" > /dev/null amixer set "AIF1 Slot 0 Digital DAC" unmute > /dev/null amixer set "DAC" "100%" > /dev/null amixer set "DAC" unmute > /dev/null } main() { local AV QUERY env | grep -q "^$(basename "$0" | tr '[a-z]' '[A-Z]')=" || eval "$VAR" eval "$(grep deviceinfo_codename /etc/deviceinfo | cut -d= -f2 | tr -d \"- | xargs -ID echo deviceD)" OPTS="audio video" [ -p /tmp/fbp.fifo ] && { echo -e "\b\f\r"; echo "$OPTS" | tr " " "\n"; } > /tmp/fbp.fifo read -p "Output ($OPTS): " AV OPTS="asmr cat fail" [ -p /tmp/fbp.fifo ] && { echo -e "\b\f\r"; echo "$F_YOUTUBE_SEARCHQUERIES" | tr " " "\n"; } > /tmp/fbp.fifo read -p "Query ($F_YOUTUBE_SEARCHQUERIES): " QUERY searchandpick "$AV" "$QUERY" } if [ -n "$1" ]; then "$@"; else main; fi