Посмотрите видео YouTube в терминале

Этот код Perl может помочь:

@files = grep {-f} glob "*"; #List files in the current directory   
%files;  
for(@files)  
{  
  chomp (my $size = \`du -h \"$_\"`);  
  $size=~ s/\s+.*//;  #Remove the file name from the output of du  
  $files{$size}++;  #  Add an entry to the hash  
}  
print "Size,Count\n"; # Print a header  
print "${\_},$files{$_}\n" for(keys %files); # Print info in CSV format  

Отметьте следующее:

  • Этот код не пытается отсортировать файлы по размеру (этому, вероятно, была бы нужна подпрограмма отдельно),
  • Я использую du вместо -s оператор Perl, чтобы иметь человекочитаемый вывод.
  • Если Вы хотите перечислить содержание каталога кроме текущего, замены glob "*" glob "$ARGV[0]/*" и предоставьте название своего необходимого каталога как параметр командной строки.
  • Если Вы хотите перечислить содержание нескольких каталогов в пакетном задании, можно сохранить этот код как list_dir.pl и имейте обертку удара, которая делает что-то вроде этого:

    list_dir.pl dir1 > dir1_list.csv  
    list_dir.pl dir2 > dir2_list.csv
    
  • С другой стороны, код может быть далее изменен, чтобы принять несколько каталогов как аргументы и разветвить процесс для каждого каталога, который он ищет.

Я предполагаю, что Вы хотите файлы в текущем каталоге только один уровень глубоко (никакая рекурсия).

107
22.07.2018, 05:29
4 ответа

Вы можете Скачать видео и / или только аудио, а затем посмотреть / прослушивать их, используя 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)
...
...

Для загрузки видео вы просто даете ему 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

вы можете использовать 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"

Хорошо, но я хочу посмотреть эти видео, так как они будут переданы и в ASCII

Я нашел этот статью в блоге под названием: на ASCII, YouTube и отпуске , который демонстрирует метод Что я обсуждал в чате, в основном с использованием YouTube-DL как «Backend», который может выполнить загрузку потока YouTube, а затем перенаправляя его в какое-то другое приложение.

Эта статья показывает, что это делается с MPlayer :

$ youtube-dl http://www.youtube.com/watch?v=OC83NA5tAGE -o - | \
    mplayer -vo aa -monitorpixelaspect 0.5 - 

Видео, загруженное YouTube-DL , перенаправляется через stdout выше, - Отказ Здесь есть демонстрация эффекта .

ss#1

При установке дополнительных библиотек видео можно дополнительно улучшить видео ASCII.

ss#2

Хорошо, но я хочу видео в моем фактическом терминале?

Я нашел этот трюк, который позволяет видео в xterm в спуске О'Рейли под названием: Смотреть видео в Ascii Art .

$ xterm -fn 5x7 -geometry 250x80 -e "mplayer -vo aa:driver=curses j.mp4

Вышеуказанные результаты в открываются окна , где открываются видео.

ss#3

Так что я подумал, почему бы не поставить арахисовое масло и шоколад вместе, как это:

$ xterm -fn 5x7 -geometry 250x80 -e \
    "youtube-dl http://www.youtube.com/watch?v=OC83NA5tAGE -o - | \
    mplayer -vo aa:driver=curses -"

Это почти работает! Я не уверен, почему видео не может играть в окне, но казалось бы, что он должен быть в состоянии. Окно подводится и начинает играть, но затем закрывается. Я вижу видео на короткое время несколько секунд, а потом ничего.

Возможно, вышеупомянутое будет ближе к вашему окончательному решению, или, возможно, просто нужно немного настроить на опции.

Дополнительные библиотеки

Если у вас установлено LibCACA (окрашенная версия AALIB ), и вы уменьшаете размер шрифта в Thnome-Terminal Что-то действительно маленькое, как сказать, 3, следующая команда будет отображаться намного лучше выглядеть видео ASCII непосредственно внутри терминала:

$ CACA_DRIVER=ncurses mplayer -vo caca video.mp4

ss#4

клеммы

кажутся, что выбор терминала может иметь большое значение относительно того, является ли MPlayer может играть непосредственно внутри терминала или открывает ли он отдельное окно. Кэширование тоже на Mplayer создала резкую разницу в том, чтобы иметь возможность играть непосредственно на терминалах.

Используя эту команду, я смог играть в Terminator , по крайней мере, для первого 1/4 видео, прежде чем он вырезать:

$ youtube-dl http://www.youtube.com/watch?v=OC83NA5tAGE -o - | \
    mplayer -cache 32767 -vo aa:driver=curses -

Цветная версия использовала эту команду:

$ youtube-dl http://www.youtube.com/watch?v=OC83NA5tAGE -o - | \
    CACA_DRIVER=ncurses mplayer -cache 64000 -vo caca -

эти Такие же команды могут играть в Gnome-Terminal & Xterm .

ss montage

Примечание: Это (слева направо) Xterm , , , Gnome-Terminal , а терминология .

131
27.01.2020, 19:29

Есть урок для этого на 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")

Вы можете создать простую функцию для этой цели:

playtube () {
mplayer -cookies -cookies-file /tmp/cook.txt $(youtube-dl -g --cookies /tmp/cook.txt "$1")
}
6
27.01.2020, 19:29

Итак, с Терминологией (кстати, вероятно, самым лучшим, что когда-либо случалось с эмулятором терминала) на момент написания , следующие работы:

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
)

Специфический бит терминологии - это блок , затем в play () - строка printf \ 033} ... . Терминология допускает расширенные escape-символы терминала для вывода носителя на экран - вроде цветов подсказок, но также видео высокого разрешения и, в основном, всего, что вы хотите.

Остальное немного curl | sed скрипт, который:

  1. Принимает обычную ссылку на YouTube в качестве первого аргумента ...
    • ytplay 'https://www.youtube.com/watch?v = $ {id} ' и так далее ...
  2. Извлекает HTML и находит соответствующий код javascript для альтернативных потоков загрузки ...
    • do curl "$ yturl" | grep url_encoded_fmt_stream_map , чтобы увидеть весь блок.
  3. Из этого блока он выбирает первый предложенный альтернативный поток.
    • предлагается много - если вы выполнили grep выше, вы найдете список в поле " разделенные кавычками ... stream_map:" поле.
    • Хотя сначала я думал, что буду получать только mp4, все больше и больше я получаю и веб-файлы. Итак, я отредактировал его для потока и назначил расширение файла по типу mime.
    • пока - будь то webm или mp4 - первый альтернативный поток имеет самое высокое качество, предлагаемое для видео - обычно 720p .mp4 - это то, что я ищу в любом случае, поэтому нет здесь логика для выбора других.Однако в моем последнем редактировании были добавлены некоторые модульные / явные тесты, чтобы сделать это возможным. См. this для perl-скрипта, на который я ссылался при первоначальном написании функции.
  4. Анализирует кодировку % [[: hexdigit:]] \ {2 \} на рабочие ссылки.
    • См. this для моей рабочей ссылки.
  5. Пытается загрузить файл до 5 раз с небольшой задержкой.
    • По умолчанию это / tmp / vid. $ {Mime-type } , но если ytplay вызывается со вторым аргументом, он интерпретирует это как целевое имя файла для загрузки, при этом добавляя расширение в соответствии с типом mime.
  6. Если размер целевого объекта загрузки больше нуля после любой из его попыток, он позволяет продолжить загрузку в фоновом режиме и печатает терминологию поместить мультимедиа в фоновый режим сейчас выход из терминала, иначе он просто сдается и выдает сообщение об ошибке, написанное заглавными буквами.
    • \ 033} bt [LINK / FILE] \ 0 для полноэкранного режима играть. pn выводит его в новое окно. Есть и другие для геометрического ограничения игровой области - например, только для части окна.

Он прошел лишь немного больше, чем очень минимальное тестирование, но до сих пор работал для каждой ссылки без сбоев, кроме одной - и потому что мне не было интересно смотреть на ту, которая не работала play Я не пытался выяснить, почему.

Хотя это сработало для всех из них, не обязательно воспроизводить каждый - и это потому, что сначала я слепо добавлял .mp4 к целевому файлу, не проверяя его правильность. Возможно, то, что я раньше не рассматривал, тоже было только этим. В любом случае, я изменил его, чтобы справиться с этим.

Как я упоминал ранее, единственный специфический бит терминологии находится в самой последней функции - play () - и поэтому вы можете легко изменить это, чтобы делать все, что захотите, с помощью загрузка / скачивание видеофайла - например, использование его с библиотеками CACA mplayer в другом терминале, или вывод его в окно vlc или что-то еще. Но если вы любите себя, вы посмотрите это в высоком разрешении в терминологии .

И, наконец, это обычно очень быстро - мои скорости увеличивали мою пропускную способность до сих пор при каждой попытке, но терминология не требует всего файла все равно начать играть в нее.

Вот это работает:

terminology rocks

14
27.01.2020, 19:29

Изhttps://github.com/mps-youtube/mps-youtube

sudo docker run --device /dev/snd -it --rm --name mpsyt rothgar/mpsyt
1
27.01.2020, 19:29

Теги

Похожие вопросы