From f08ede350a489f8b5b8afa95de027b434eefe9a0 Mon Sep 17 00:00:00 2001 From: Sergey Kiselev Date: Tue, 23 Apr 2024 15:51:58 +0500 Subject: [PATCH] Added yt-dlp-gui - a GUI-wrapper writen on Perl for yt-dlp for playing videos in external mediaplayer --- README.md | 25 ++++++- images/yt-dlp-gui.png | Bin 0 -> 24945 bytes yt-dlp-gui | 163 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 images/yt-dlp-gui.png create mode 100755 yt-dlp-gui diff --git a/README.md b/README.md index 0ba79c1..c99002c 100644 --- a/README.md +++ b/README.md @@ -39,12 +39,33 @@ __ytdl-gui__ ![](images/ytdl-gui.png) -GUI-обёртка над `www/yt-dlp` для воспроизведения видео с [RuTube](https://rutube.ru) и других видеохостингов с помощью [mpv](https://mpv.io/). +GUI-обёртка над `www/yt-dlp` для воспроизведения видео с +[RuTube](https://rutube.ru) и других видеохостингов с помощью +[mpv](https://mpv.io/). Для работы скрипта требуются следующие утилиты: - `yt-dlp` (`www/yt-dlp`); - `yad` (`x11/yad`); -- `mpv` (`multimedia/mpv`) +- `mpv` (`multimedia/mpv`). + +--- + +__yt-dlp-gui__ +![](images/yt-dlp-gui.png) + +GUI-обёртка над `www/yt-dlp` для воспроизведения видео с +[RuTube](https://rutube.ru) и других видеохостингов с помощью +[mpv](https://mpv.io/). + +В отличии от `ytdl-gui` написан на [Perl](https://www.perl.org/) и +[Gtk3](https://docs.gtk.org/gtk3/). + +Для работы скрипта требуются следующие компоненты: +- `perl5` (`lang/perl5.38`); +- `p5-Gtk3` (`x11-toolkits/p5-Gtk3`); +- `p5-Glib` (`devel/p5-Glib`); +- `yt-dlp` (`www/yt-dlp`); +- `mpv` (`multimedia/mpv`). --- diff --git a/images/yt-dlp-gui.png b/images/yt-dlp-gui.png new file mode 100644 index 0000000000000000000000000000000000000000..ca939d90e5930601e85376749083c1af2c6768cf GIT binary patch literal 24945 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 HhQ9v`-_E&# literal 0 HcmV?d00001 diff --git a/yt-dlp-gui b/yt-dlp-gui new file mode 100755 index 0000000..9cbe465 --- /dev/null +++ b/yt-dlp-gui @@ -0,0 +1,163 @@ +#!/usr/local/bin/perl + +use strict; +use warnings; + +use utf8; +use open qw/:std :encoding(utf8)/; +binmode(STDOUT, ":utf8"); + +use Gtk3 '-init'; +use Glib "TRUE", "FALSE"; + +my $wnd = Gtk3::Window::new(); +my @labels = undef; +my %chks = ( + ontop => { o => 1, opt => ' --ontop', lbl => 'On-Top', chk => undef }, + border => { o => 2, opt => ' --no-border', lbl => 'Without borders', chk => undef }, + alldesk => { o => 3, opt => ' --on-all-workspaces', lbl => 'On all workspaces', chk => undef} +); +my $txt_URL = Gtk3::Entry->new(); +my $txt_Title = Gtk3::Entry->new(); +my $cb_Resolution = Gtk3::ComboBoxText->new(); +my $cb_Scale = Gtk3::ComboBoxText->new(); +my $btn_Get = Gtk3::Button->new_from_icon_name("gtk-find", 4); + +_ui(); + +Gtk3::main(); + +sub _ui { + my $vbox = Gtk3::VBox::new(); + my $grid = Gtk3::Grid->new(); + my $grid_btn = Gtk3::Grid->new(); + my $grid_opt = Gtk3::Grid->new(); + my $grid_header = Gtk3::Grid->new(); + + my $btn_Cancel = Gtk3::Button->new_from_stock("gtk-cancel"); + my $btn_Ok = Gtk3::Button->new_from_stock("gtk-ok"); + + my $img = Gtk3::Image->new_from_icon_name("youtube", 6); + $img->set_halign("start"); + + $wnd->set_title("yt-dlp GUI"); + $wnd->set_default_size(480, 240); + $wnd->set_icon_name("youtube"); + $wnd->set_position("center"); + $wnd->set_border_width(20); + $wnd->set_resizable(FALSE); + $wnd->signal_connect( destroy => sub { Gtk3->main_quit } ); + + $grid->set_column_spacing(10); + $grid->set_row_spacing(10); + $grid->set_hexpand(TRUE); + + $grid_btn->set_column_spacing(10); + $grid_btn->set_row_spacing(10); + $grid_btn->set_halign("end"); + $grid_btn->set_valign("end"); + + $grid_opt->set_column_spacing(10); + $grid_opt->set_row_spacing(10); + $grid_opt->set_hexpand(TRUE); + + $grid_header->set_column_spacing(10); + $grid_header->set_row_spacing(0); + $grid_header->set_hexpand(TRUE); + + foreach ( "Video URL:", "Title:", "Resolution:", "Scale:" ) { + push(@labels, Gtk3::Label->new($_)); + $labels[$#labels]->set_halign("start"); + $grid->attach($labels[$#labels], 0, $#labels, 1, 1); + } + + my @k = ( sort { $chks{$a}{o} <=> $chks{$b}{o} } keys %chks ); + while ( my ($i, $k) = each @k ) { + $chks{$k}{chk} = Gtk3::CheckButton->new_with_label($chks{$k}{lbl}); + $grid_opt->attach($chks{$k}{chk}, 0, $i, 1, 1); + } + + foreach ( "x0.5", "x1", "x2" ) { + $cb_Scale->append_text( $_ ); + } + $cb_Scale->set_active(1); + + $txt_URL->set_halign("fill"); + $txt_URL->set_hexpand(TRUE); + $txt_Title->set_halign("fill"); + $txt_Title->set_hexpand(TRUE); + $cb_Resolution->set_halign("start"); + $cb_Resolution->set_hexpand(FALSE); + $cb_Scale->set_halign("start"); + $cb_Scale->set_hexpand(FALSE); + + $btn_Get->signal_connect( clicked => \&_get_info ); + $btn_Cancel->signal_connect( clicked => sub { $wnd->destroy } ); + $btn_Ok->signal_connect( clicked => \&_play ); + + $grid_header->attach($img, 0, 1, 1, 1); + $grid_header->attach(Gtk3::Label->new("Please enter video URL"), 1, 1, 1, 1); + + $grid->attach($txt_URL, 1, 1, 2, 1); + $grid->attach($btn_Get, 3, 1, 1, 1); + $grid->attach($txt_Title, 1, 2, 3, 1); + $grid->attach($cb_Resolution, 1, 3, 1, 1); + $grid->attach($cb_Scale, 1, 4, 1, 1); + $grid->attach($grid_opt, 2, 3, 1, 4); + + $grid_btn->attach($btn_Ok, 0, 1, 1, 1); + $grid_btn->attach($btn_Cancel, 1, 1, 1, 1); + + $vbox->add($grid_header); + $vbox->add($grid); + $vbox->add($grid_btn); + + $wnd->add($vbox); + + $wnd->show_all; +} + +sub _get_info { + my $url = $txt_URL->get_text(); + my @out = qx{yt-dlp --no-warnings --quiet --list-formats "$url" | grep -v "audio" | awk '\$2=="mp4" {print \$3}' | uniq | awk -F'x' '{print \$2"p"}'}; + my $title = qx{yt-dlp --no-warnings --quiet --get-title "$url"}; + + foreach ( @out ) { + $_ =~ s/[\r\n]+$//; + $cb_Resolution->append_text( $_ ); + } + + $cb_Resolution->set_active(0); + + $txt_Title->set_text($title); +} + +sub _play { + my $res = $cb_Resolution->get_active_text(); + $res =~ s/p$//; + my $scale = $cb_Scale->get_active_text(); + $scale =~ s/^x//; + + my $opts = "--no-terminal"; + + my @k = ( sort { $chks{$a}{o} <=> $chks{$b}{o} } keys %chks ); + while ( my ($i, $k) = each @k ) { + if ( $chks{$k}{chk}->get_active ) { + $opts .= $chks{$k}{opt}; + } + } + + $opts .= " --window-scale=" . $scale; + + $opts .= " --ytdl-format=\"bv*[height<=$res]+ba/b[height<=$res] / wv*+ba/w\""; + + my $url = "\"" . $txt_URL->get_text() . "\""; + + my $cmd = "mpv $opts $url"; + + { exec ($cmd) }; print STDERR "Couldn't exec mpv: $!"; + + $wnd->destroy(); + + exit 0; +}