ubuntuusers.de

GUI(perYAD) Pfade an Player

Status: Gelöst | Ubuntu-Version: Lubuntu 22.04 (Jammy Jellyfish)
Antworten |

Marantkurz

Anmeldungsdatum:
7. September 2023

Beiträge: 760

Ziel war Script/Oberfläche welche mit allen Arten der Zufütterung von Pfaden an Player(der ausgewählt wird) klarkommt. Also Mulimedia Player/ Bildbetrachter(Diashow). s.Anhang

Quellen sind Netz- und lokale Pfade per Zwischenablage oder "öffnen mit" per Dateimanager oder per Konsole oder per Addon des Brosers. Leerzeichen dürfen vorhanden sein. UTF-8 wird unterstützt.

Erstellt werden 2 *.m3u, eine momentane, eine die alle darüber aufgerufenen Pfade archiviert. Kommt eine App mit *.m3u nicht klar, wie etwa hier im Bsp. "gwenview" erfolgt Übergabe aus *.txt.

Kurz zu YAD. Oberfläche ist per YAD, Installation von YAD ist minimalistisch. Sollte Jemand das per Zenity machen wollen, dann kann das gern Hier rein.

"wmctrl" sollte installiert sein. Unter Wayland entsprechend das Äquivalent, aber nicht unbedingt nötig.

m3u sind ohne Kopf, also ohne "#EXTM3U", Falls notwendig könnte das noch rein. Player kommen aber auch so damit klar. "Playlist über yt-dlp" holt wenn unterstützt die Namen. "per yt.dlp" macht möglich, daß Player die Probleme mit Netzstreams haben, diesen spielen können. Momentan nur für den einen jeweiligen Pfad. "adr roh" übergibt den Pfad ohne Filterung an Player.

Bis auf Kleinigkeiten läuft das. Was mir noch fehlt ist die Codierung zu UTF-8. Momentan habe ich nur -Leerzeichen zu %20- drin.

Zugegeben, das wurde umfassender als ich dachte, ist keine programmiertechnische Meisterleistung, aber es läuft. Hilfe/ Veränderung ist willkommen. Da ich das Script reduziert habe ist es möglich, dass das eine oder andere nicht läuft. Will nicht alles testen. Also bitte wer mag, Das mitteilen.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#!/bin/bash
#exec 2>> ~/player_m3u.log
#echo "$(date)" >> ~/player_m3u.log

ortdiesesscriptes=
m3uort=$HOME/player-alle-letzter-link.m3u
test -f $m3uort || touch $m3uort
m3uortdir=$HOME/player-alle-letzter-link-dir.m3u
txtort=$HOME/player-alle-letzter-link.txt
test -f $txtort || touch $txtort
sammlung=$HOME/player-alle-link-sammlung.m3u
test -f $sammlung || touch $sammlung
if ! [ -x "$(command -v yad)" ]; then 
	notify-send -a "" "YAD fehlt !"
	echo "YAD fehlt !"
	exit
fi

############## funktion ################

m3u-u-txt-erzeugen-f() {
echo "$adr" > $m3uort
cp $m3uort ~/player-alle-letzter-link2.txt
sed -i 's, ,%20,g' ~/player-alle-letzter-link2.txt
tr '\n' ' ' < ~/player-alle-letzter-link2.txt > $txtort
sed -i 's/^ *//;s/ *$//' $txtort
rm ~/player-alle-letzter-link2.txt
read adrtxt < txtort
}
umbruch-zu-leerzeichen-f() {
adr=$(echo "$adr" | tr '\n' ' ')
}
utf8-decode-f() {
if [ "$(echo "$adr" | grep "%")" ]; then
	adr=$(echo "$adr" | perl -pe 's/\%(\w\w)/chr hex $1/ge')
fi
}
testobdir-f() {
if [ -d "$adr" ]; then
	ls -d $adr/* > $m3uortdir && notify-send "Dir OK"
fi
}
scr-f() {
notify-send -a '' -i dialog-information 'SimpleScreenRecorder. Unter scr-f selbst zuweisen.'
}
dateien-f() {
wmctrl -c :ACTIVE:;
notify-send -a "" "reiche ich noch nach.."
$ortdiesesscriptes
}
neue-dateien-f() {
DIR=~/
INPUTORDNER=$(yad --center \
	--width=650 \
	--form \
	--title="Verzeichnis wählen:" \
	--text="Verzeichnis wählen für $1": \
	--field=:LBL "" \
	--field=Pfad:DIR "$DIR" \
	--separator='')
if [ ! "$INPUTORDNER" ]; then
	exit
fi
echo "$(ls -d -t $INPUTORDNER/*.*)" > $m3uort
player=$(yad --width=350 --center --separator="" --form --field="Player:CBE" "mpv\!celluloid\!vlc\!kodi\!smplayer\!audacious\!ffplay\!gwenview")
$player $m3uort;exit
}
letzter-link-laden-f() {
wmctrl -c :ACTIVE:;app=$(yad --width=350 --form --separator="" --center --field="Player:CBE" "mpv\!celluloid\!vlc\!kodi\!smplayer\!audacious\!ffplay\!gwenview");$app  $HOME/player-alle-letzter-link.m3u;exit
}
catfish-f() {
INPUTORDNER=~/
GTK_THEME="Clearlooks" catfish "$INPUTORDNER"
sleep 0.5
wmctrl -c :ACTIVE:;$ortdiesesscriptes
}

#################### start #####################

if [ "$1" ]; then
	adr="$@"
	adr=$(echo "$adr" | printf '%s\n' "$@") 	#umbruch aus leerzeichen
	utf8-decode-f
else
	adr=$(xsel -b)
fi
adrroh=$adr

adr=$(echo "$adr" | sed 's,file://,,g') 		#file entfernen
echo "$adr" | xsel -i -b
adrkurz=$(echo "$adr" | cut -c -200)
adrkurz=$(echo "$adrkurz" | head -n 4)

echo "$adr" >> $sammlung
notify-send -a "" "$adr"

export -f scr-f dateien-f letzter-link-laden-f catfish-f neue-dateien-f
auswahl=$(yad --width=600 --text-align=center --title="$adrkurz" --text="$adrkurz" --center --separator=" " --form \
--field="Player:CBE" "mpv\!celluloid\!vlc\!kodi\!smplayer\!audacious\!ffplay\!gwenview\!sammel" \
--field="Playlist über yt-dlp mit Auswahl der VideoAnzahl ?:CHK" \
--field="mpv, celluloid voriges Fenster schliessen ?:CHK" \
--field="per yt-dlp ?:CHK" \
--field="adr roh ?:CHK" \
--field=":LBL" \
--button="letzte.m3u":"bash -c 'letzter-link-laden-f'" \
--button="neue Dateien":"bash -c 'neue-dateien-f'" \
--button="Dateien laden":"bash -c 'dateien-f'" \
--button="Catfish":"bash -c 'catfish-f'" \
--button="SCR":"bash -c 'scr-f'" \
--button="gtk-close":1 \
--button=gtk-ok:0)

if [ ! "$auswahl" ]; then exit;fi
player=$(echo "$auswahl" | awk {'print $1'})
if [[ "$adr" != "$m3uort" ]] && [[ "$player" != "sammel" ]]; then
	echo "$adr" > $m3uort
	m3u-u-txt-erzeugen-f
	testobdir-f
fi

############## player #################

if [ "$player" == "mpv" ]; then player="mpv --hwdec=auto --no-border --force-window=immediate --window-maximized=yes"; fi
if [ "$player" == "vlc" ]; then player="vlc --play-and-exit"; fi
if [ "$player" == "gwenview2" ]; then
	if [ -d "$adr" ]; then
		m3uort="$adr"
		notify-send "nix"
	else
		umbruch-zu-leerzeichen-f
		notify-send "$adr"
		gwenview -s $adr
		exit
	fi
	player="gwenview -s"
fi
if [ "$player" == "gwenview" ]; then
	gwenview -s $adrtxt
	exit
fi

if [ "$player" == "sammel" ]; then
	if [[ "$adr" != "$m3uort" ]]; then
		echo "$adr" >> $m3uort && notify-send -a "" -i dialog-information "OK!" "$adr"
	fi
	exit
fi
if [ "$player" == "smplayer" ]; then
	if [ -d "$adr" ]; then
		m3uort="$adr"
	fi
fi

########################################

#kill voriger player
if [ "$(echo "$auswahl" | awk {'print $3'})" == "TRUE" ]; then
	read mpvpid < ~/.cache/pid
	kill $mpvpid
	pkill celluloid
	sleep 2
fi
#per yt-dlp
if [ "$(echo "$auswahl" | awk {'print $4'})" == "TRUE" ]; then
	$player "$(yt-dlp -g -f "best/bv[height<=?1200]+ba" $adr)" || notify-send -a "" -i dialog-warning "yt-dlp Fehler"
	exit
fi
#anzahl videos
if [ "$(echo "$auswahl" | awk {'print $2'})" == "TRUE" ]; then
	anzahl_videos=$(yad --title="Anzahl Videos" --center --separator="" --form --field="Anzahl letzter Videos:NUM" "10")
	yt-dlp --get-title --get-url --flat-playlist --playlist-end $anzahl_videos $adr > $m3uort
	sed -i -r 's/^([^http])/#EXTINF:0,&/' $m3uort
	$player $m3uort
	exit
fi
#adrroh
if [ "$(echo "$auswahl" | awk {'print $5'})" == "TRUE" ]; then
	m3uort=$@
fi

if [ "$player" == "celluloid" ]; then GTK_THEME="Fluent-dark" $player $m3uort;exit;fi
$player $m3uort
Bilder

Marantkurz

(Themenstarter)

Anmeldungsdatum:
7. September 2023

Beiträge: 760

Start kann über Tastenkombination erfolgen.(liest dann Pfad aus Zwischenablage)

Oder per (FF) Addon. F. Chrome ebenfalls vorh.

Oder für Dateimanager per Markieren+Dateipfad kopieren oder desktop Datei. (in ~/.local/share/applications) plazieren. <Dateipfad> ersetzen Name momentan: Player 2

[Desktop Entry]
Name=Player 2
GenericName=
Comment=player2
Icon=media-playback-start
Type=Application
Exec=<Dateipfad> %U
Categories=AudioVideo;Audio;Player;Video;TV
MimeType=inode/directory;application/ogg;application/x-ogg;application/mxf;application/sdp;application/smil;application/x-smil;application/streamingmedia;application/x-streamingmedia;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/aac;audio/x-aac;audio/vnd.dolby.heaac.1;audio/vnd.dolby.heaac.2;audio/aiff;audio/x-aiff;audio/m4a;audio/x-m4a;application/x-extension-m4a;audio/mp1;audio/x-mp1;audio/mp2;audio/x-mp2;audio/mp3;audio/x-mp3;audio/mpeg;audio/mpeg2;audio/mpeg3;audio/mpegurl;audio/x-mpegurl;audio/mpg;audio/x-mpg;audio/rn-mpeg;audio/musepack;audio/x-musepack;audio/ogg;audio/scpls;audio/x-scpls;audio/vnd.rn-realaudio;audio/wav;audio/x-pn-wav;audio/x-pn-windows-pcm;audio/x-realaudio;audio/x-pn-realaudio;audio/x-ms-wma;audio/x-pls;audio/x-wav;video/mpeg;video/x-mpeg2;video/x-mpeg3;video/mp4v-es;video/x-m4v;video/mp4;application/x-extension-mp4;video/divx;video/vnd.divx;video/msvideo;video/x-msvideo;video/ogg;video/quicktime;video/vnd.rn-realvideo;video/x-ms-afs;video/x-ms-asf;audio/x-ms-asf;application/vnd.ms-asf;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvxvideo;video/x-avi;video/avi;video/x-flic;video/fli;video/x-flc;video/flv;video/x-flv;video/x-theora;video/x-theora+ogg;video/x-matroska;video/mkv;audio/x-matroska;application/x-matroska;video/webm;audio/webm;audio/vorbis;audio/x-vorbis;audio/x-vorbis+ogg;video/x-ogm;video/x-ogm+ogg;application/x-ogm;application/x-ogm-audio;application/x-ogm-video;application/x-shorten;audio/x-shorten;audio/x-ape;audio/x-wavpack;audio/x-tta;audio/AMR;audio/ac3;audio/eac3;audio/amr-wb;video/mp2t;audio/flac;audio/mp4;application/x-mpegurl;video/vnd.mpegurl;application/vnd.apple.mpegurl;audio/x-pn-au;video/3gp;video/3gpp;video/3gpp2;audio/3gpp;audio/3gpp2;video/dv;audio/dv;audio/opus;audio/vnd.dts;audio/vnd.dts.hd;audio/x-adpcm;application/x-cue;audio/m3u;x-content/video-dvd;x-content/video-vcd;x-content/video-svcd
X-KDE-Protocols=ftp,http,https,mms,rtmp,rtsp,sftp,smb
NoDisplay=false
Terminal=false
Hidden=false
StartupNotify=false

Oder: sollte bereits mpv laufen und anderer Player soll das spielen, dann in die input.conf von mpv:

F8 run sh -c "echo ${pid} > ~/.cache/pid;<dateipfad> '${path}'"

Aufruf über F8, <dateipfad> ersetzen. Es ist auch möglich mpv damit zu beenden, aber im Script gibt es ebenfalls die Möglichkeit.

Marantkurz

(Themenstarter)

Anmeldungsdatum:
7. September 2023

Beiträge: 760

Vervollständigt. u.A.: Buttons funktionieren jetzt. Player kann in GUI geändert eingegeben, auch Optionen können mitgegeben werden.

<eigener_pfad_des_scriptes> mehrmals ersetzen. Da xsel und wmctrl(diese installieren) verwendet werden, eher nicht für Wayland geeignet, aber das ließe sich ja auch umstricken. Den Pfad der 3 Dateien (oben) so stehen lassen. Das Startscript,(also dessen Pfad ersetzt werden soll), wollte sich partout nicht lösen, weder per '*.sh &' oder nohup. 🙄

geä. 8.11.23

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#!/bin/bash
#exec 2 >> ~/player.log
#echo "$(date)" >> ~/player.log

m3uort=$HOME/player-alle-letzter-link.m3u
m3uortdir=$HOME/player-alle-letzter-link-dir.m3u
txtort=$HOME/player-alle-letzter-link.txt

############## funktion ################

m3u-u-txt-erzeugen-f() {
echo "$adr" > $m3uort
cp $m3uort ~/player-alle-letzter-link2.txt
sed -i 's, ,%20,g' ~/player-alle-letzter-link2.txt
tr '\n' ' ' < ~/player-alle-letzter-link2.txt > ~/player-alle-letzter-link.txt
sed -i 's/^ *//;s/ *$//' ~/player-alle-letzter-link.txt
rm ~/player-alle-letzter-link2.txt
read adrtxt < ~/player-alle-letzter-link.txt
}
umbruch-zu-leerzeichen-f() {
adr=$(echo "$adr" | tr '\n' ' ')
}
utf8-decode-f() {
if [ "$(echo "$adr" | grep "%")" ]; then
	adr=$(echo "$adr" | perl -pe 's/\%(\w\w)/chr hex $1/ge')
fi
}
testobdir-f() {
if [ -d "$adr" ]; then
	ls -d $adr/* > $HOME/player-alle-letzter-link-dir.m3u && notify-send -a "" "Dir OK"
fi
}
scr-f() {
wmctrl -c :ACTIVE:
notify-send -a '' -t 4000 'Simplescreenrecorder erscheint in Taskleiste' 'Start mit eigener Tastenkombination';simplescreenrecorder --start-hidden --logfile
#& will nicht..
}
dateien-f() {
dateien=$(yad --title="Dateien wählen, schreibt in Zwischenablage und läd neu" --text="Dateien wählen, schreibt in Zwischenablage und läd neu" --text-align=center --center --width=900 --height=600 --separator="\n" --multiple --file-selection --file-filter='*.m3u *.m3u8 *.mp3 *.wav *.flac *.ogg *.webm *.aac *.mp4 *.mov *.flv *.avi *.mkv *.mpg *.mpeg *.m4v *.vob *.wma *.wmv' --file-filter='*.jpg *.jpeg *.webp *.gif *.png *.tiff *.bmp' \
--file-filter='Alle Dateien| *.*');ret=$?
if [ "$ret" -ne 0 ]; then exit;fi
echo "$dateien" | xsel -i -b
sleep 0.5
wmctrl -c :ACTIVE:
#darunter ersetzen
<eigener_pfad_des_scriptes>
}
neue-dateien-f() {
DIR=~/
INPUTORDNER=$(yad --center \
--width=650 \
--form \
--title="neueste Dateien spielen - Verzeichnis wählen:" \
--text="neueste Dateien spielen - Verzeichnis wählen:" \
--field=:LBL "" \
--field=Pfad:DIR "$DIR" \
--separator='');ret=$?;if [ "$ret" -ne 0 ]; then exit;fi
echo "$(ls -d -t $INPUTORDNER/*.*)" | xsel -i -b
sleep 0.5
wmctrl -c :ACTIVE:
#darunter ersetzen
<eigener_pfad_des_scriptes>
}
letzter-link-laden-f() {
cat $HOME/player-alle-letzter-link.m3u | xsel --clipboard
sleep 0.5
wmctrl -c :ACTIVE:
#darunter ersetzen
<eigener_pfad_des_scriptes>
}
catfish-f() {
INPUTORDNER=~/
catfish "$INPUTORDNER"
sleep 0.5
wmctrl -c :ACTIVE:
#darunter ersetzen
<eigener_pfad_des_scriptes>
}

#################### start #####################

if [ "$1" ]; then
	adr="$@"
	adr=$(echo "$adr" | printf '%s\n' "$@") 	#umbruch aus leerzeichen
	utf8-decode-f
else
	adr=$(xsel -b)
	adrroh=$adr
fi

notify-send -a "" "$adr"

adr=$(echo "$adr" | sed 's,file://,,g') 		#file entfernen
echo "$adr" | xsel -i -b
adrkurz=$(echo "$adr" | cut -c -200)
adrkurz=$(echo "$adrkurz" | head -n 4)

export -f scr-f dateien-f letzter-link-laden-f catfish-f neue-dateien-f
auswahl=$(yad --width=600 --text-align=center --title="$adrkurz" --text="$adrkurz" --center --separator="," --form \
--field="Player:CBE" "mpv\!celluloid\!vlc\!kodi\!smplayer\!audacious\!ffplay\!gwenview\!sammel" \
--field="Playlist über yt-dlp mit Auswahl der VideoAnzahl ?:CHK" \
--field="mpv, celluloid voriges Fenster schliessen ?:CHK" \
--field="per yt-dlp ?:CHK" \
--field="adr roh ?:CHK" \
--field=":LBL" \
--button="letzte.m3u":"bash -c 'letzter-link-laden-f'" \
--button="neue Dateien":"bash -c 'neue-dateien-f'" \
--button="Dateien laden":"bash -c 'dateien-f'" \
--button="Catfish":"bash -c 'catfish-f'" \
--button="SCR":"bash -c 'scr-f'" \
--button="gtk-close":1 \
--button=gtk-ok:0)
ret=$?
if [ "$ret" -ne 0 ]; then exit;fi

#notify-send "$ret" "$auswahl"

player=$(echo "$auswahl" | awk -F "," {'print $1'})
if [[ "$adr" != "$m3uort" ]] && [[ "$player" != "sammel" ]]; then
	echo "$adr" > $m3uort
	m3u-u-txt-erzeugen-f
	testobdir-f
fi

############## Player #################

if [ "$player" == "mpv" ]; then player="mpv --hwdec=auto --no-border --force-window=immediate --window-maximized=yes --image-display-duration=5"; fi
if [ "$player" == "vlc" ]; then player="vlc --play-and-exit"; fi

if [ "$player" == "gwenview" ]; then
	gwenview -s $adrtxt
	exit
fi

if [ "$player" == "sammel" ]; then
	if [[ "$adr" != "$m3uort" ]]; then
		echo "$adr" >> $m3uort && notify-send -a "" "OK! Zu letzte.m3u zugefügt." "$adr"
	fi
	exit
fi
if [ "$player" == "smplayer" ]; then
	if [ -d "$adr" ]; then
		m3uort="$adr"
	fi
fi

########################################

#kill voriger player
if [ "$(echo "$auswahl" | awk -F "," {'print $3'})" == "TRUE" ]; then
	read mpvpid < $HOME/.cache/pid
	kill $mpvpid
	pkill celluloid
	sleep 2
fi
#per yt-dlp
if [ "$(echo "$auswahl" | awk -F "," {'print $4'})" == "TRUE" ]; then
	$player "$(yt-dlp -g -f "best/bv[height<=?1200]+ba" $adr)" &> /dev/null
	exit
fi
#anzahl videos
if [ "$(echo "$auswahl" | awk -F "," {'print $2'})" == "TRUE" ]; then
	anzahl_videos=$(yad --title="Anzahl Videos" --center --separator="" --form --field="Anzahl letzter Videos:NUM" "10");ret=$?;if [ "$ret" -ne 0 ]; then anzahl_videos=10;fi
	yt-dlp --get-title --get-url --flat-playlist --playlist-end $anzahl_videos $adr > $m3uort
	sed -i -r 's/^([^http])/#EXTINF:0,&/' $m3uort
	$player $m3uort &> /dev/null
	exit
fi
#adrroh
if [ "$(echo "$auswahl" | awk -F "," {'print $5'})" == "TRUE" ]; then
	if [ "$1" ]; then
		m3uort=$@
	else
		m3uort=$adrroh
	fi
fi

if [ "$player" == "celluloid" ]; then GTK_THEME="Fluent-dark" $player $m3uort &> /dev/null;exit;fi
$player $m3uort &> /dev/null
Antworten |