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 |