staging.inyokaproject.org

KDE Servicemenü "pic_with_audio" Eine Audiodatei mit Bildhintergrund zu mp4 konvertieren

Status: Ungelöst | Ubuntu-Version: Kubuntu 21.04 (Hirsute Hippo)
Antworten |

trollsportverein

Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 2627

Die Idee kam mir wegen dieser Frage im Forum:

Da dachte ich mir ein KDE Servicemenü wäre doch ganz praktisch, was das dann aus dem KDE Dateimanager Dolphin heraus direkt bequem per Rechtsklick erledigen kann. Hier ist es nun.

Unter der Voraussetzung das KDE bereits installiert ist, wie etwa bei Kubuntu:

sudo apt-get install smtube ffmpeg ibnotify-bin

Sollte eines der Pakete bereits installiert sein, wird apt-get das melden und das Paket dann nicht noch einmal installieren.

Hier nun der Inhalt vom KDE Servicemenü "pic_with_audio":

Bitte weitergehen, neue erweiterte Version im weiteren Verlauf vom Thread.

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=image/bmp;image/jpeg;image/png;image/gif;image/webp;image/tiff;image/svg+xml;image/vnd.microsoft.icon;audio/mpeg;audio/mp4;video/mp4;audio/webm;video/webm;
Actions=pic_with_audio;
X-KDE-Submenu=Picture with Audio ==>
X-KDE-Submenu[de]=Bild mit Audio ==>
Icon=smtube

[Desktop Action pic_with_audio]
Icon=smtube
Name=Picture with Audo
Name[de]=Bild mit Audio
Exec=[ -f "`echo "%f" | grep -E " "`" ] && notify-send -i window-close.png "STOP! `echo "Dont use blanks in Filenames!"`" ; [ -f "`ls -1 output.mp4`" ] && notify-send -i window-close.png "STOP! `echo "output.mp4"` File exists!" ; [ ! -f "`echo "%f" | grep -E " "`" ] && [ ! -f "`ls output.mp4`" ] && `echo "%f" | xargs basename >> input_list.tmp` && ffmpeg -loop 1 -i `cat input_list.tmp | grep -Ei ".jpg|.jpeg|.png"` -i `cat input_list.tmp | grep -Ei ".mp3|.webm"` -filter:v "scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720":-1 -c:v libx264 -crf 28 -preset veryslow -tune stillimage -c:a copy -pix_fmt yuv420p -shortest output.mp4 && rm input_list.tmp && notify-send -i dialog-ok-apply.png "Ready! :-)" "Picture with Audio: `echo output.mp4` Ready!"

Das kommt dann in eine Datei

/home/USERNAME/.local/share/kservices5/ServiceMenus/pic_with_audio.desktop

Wobei USERNAME der eigene jeweilige Username sein muss. Anschließend noch im Terminal (KDE Konsole) laufen lassen:

kbuildsycoca5 --noincremental

Das liest nicht nur die *.desktop Dateien neu ein, es überprüft auch auf grobe Syntax Fehler.

Um zu funktionieren muss eine Bilddatei *.jpg oder *.jpeg oder *.png markiert sein, und eine Audiodatei *.mp3 oder *.webm, die Ausgabe ist immer output.mp4. STRG Taste drücken beim markieren, um die zwei benötigten Dateien herauszupicken. Es stoppt, wenn die output.mp4 Datei bereits vorhanden ist, um Unheil zu verhindern. Keine Leerzeichen in der Bild- und Audiodatei bitte.

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 2627

Erweiterte Version nun hier.

Dies kann auch ein *.bmp, *.webp, *.tiff oder *.svg Bilder in output.mp4 einbinden. Beim Audioformat bleibt es bei *.mp3 und *.webm.

Die Vorraussetzungen sind die gleichen wie bei der Version oben, und auch einbauen ins eigene System bleibt gleich.

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=image/bmp;image/jpeg;image/png;image/webp;image/tiff;image/svg+xml;audio/mpeg;audio/mp4;video/mp4;audio/webm;video/webm;
Actions=pic_with_audio;
X-KDE-Submenu=Picture with Audio ==>
X-KDE-Submenu[de]=Bild mit Audio ==>
Icon=smtube

[Desktop Action pic_with_audio]
Icon=smtube
Name=Picture with Audo
Name[de]=Bild mit Audio
Exec=[ -f "`echo "%f" | grep -E " "`" ] && notify-send -i window-close.png "STOP! `echo "Dont use blanks in Filenames!"`" ; [ -f "`ls -1 output.mp4`" ] && notify-send -i window-close.png "STOP! `echo "output.mp4"` File exists!" ; [ ! -f "`echo "%f" | grep -E " "`" ] && [ ! -f "`ls output.mp4`" ] && `echo "%f" | xargs basename >> input_list.tmp` && ffmpeg -loop 1 -i `cat input_list.tmp | grep -Ei ".jpg|.jpeg|.png|.bmp|.webp|.tiff|.svg"` -i `cat input_list.tmp | grep -Ei ".mp3|.webm"` -filter:v "scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720":-1 -c:v libx264 -crf 28 -preset veryslow -tune stillimage -c:a copy -pix_fmt yuv420p -shortest output.mp4 && rm input_list.tmp && notify-send -i dialog-ok-apply.png "Ready! :-)" "Picture with Audio: `echo output.mp4` Ready!"

marant-

Anmeldungsdatum:
13. September 2021

Beiträge: 363

Servus @trollsportverein,

mittlerweise habe ich kapituliert, hatte mal zumindest ausprobieren wollen.

Bin für eine Fehlerausgabe in eine Datei zu blöd, will nicht. War schon Drauf und Dran per *.sh zu testen und die Dateien zu übergeben. Mal sehen.

Die "Exec=.. " kann ja in Actions rein auch bei anderen Dateimanagern, wer testen mag.

PS. smtube nur wegen des Icon?

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 2627

marant- schrieb:

Servus @trollsportverein,

mittlerweise habe ich kapituliert, hatte mal zumindest ausprobieren wollen.

Bin für eine Fehlerausgabe in eine Datei zu blöd, will nicht. War schon Drauf und Dran per *.sh zu testen und die Dateien zu übergeben. Mal sehen.

Die "Exec=.. " kann ja in Actions rein auch bei anderen Dateimanagern, wer testen mag.

PS. smtube nur wegen des Icon?

Ja, das smtube Icon hat mir einfach bloß gut gefallen für dies Kontextmenü. Die Idee für das KDE Servicemenü kam mir ja auch beim Thread Mp3 zu Mp4 mit Bild konvertieren für YouTube. Scripte in Exec= Kommandos von *.desktop Dateien umsetzen ist schon manchmal ein bisschen trickreich. Hochkommas, Anführungszeichen und Backticks, das bekommt man mit der Zeit raus, was geht und was nicht. Kannst auch in das hier mal reinschauen: https://forum.ubuntuusers.de/topic/kde-servicemenue-pic-convert-bilder-umwandeln-/.

marant-

Anmeldungsdatum:
13. September 2021

Beiträge: 363

Kann es nun offenhalten.

Exec=gnome-terminal -x bash -c '[ -f "echo "%f" | grep -E " "" ] && notify-send -i window-close.png "STOP! echo "Dont use blanks in Filenames!"" ; [ -f "ls -1 output.mp4" ] && notify-send -i window-close.png "STOP! echo "output.mp4" File exists!" ; [ ! -f "echo "%f" | grep -E " "" ] && [ ! -f "ls output.mp4" ] && echo "%f" | xargs basename >> input_list.tmp && ffmpeg -loop 1 -i cat input_list.tmp | grep -Ei ".jpg|.jpeg|.png|.bmp|.webp|.tiff|.svg" -i cat input_list.tmp | grep -Ei ".mp3|.webm" -filter:v "scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720":-1 -c:v libx264 -crf 28 -preset veryslow -tune stillimage -c:a copy -pix_fmt yuv420p -shortest output.mp4 && rm input_list.tmp && notify-send -i dialog-ok-apply.png "Ready! ☺" "Picture with Audio: echo output.mp4 Ready!"; read x '

Bringt

ls: Zugriff auf 'output.mp4' nicht möglich: Datei oder Verzeichnis nicht gefunden ls: Zugriff auf 'output.mp4' nicht möglich: Datei oder Verzeichnis nicht gefunden

-i: No such file or directory

die output.mp4 könnte man auch mit Datum/Zeit versehen, dann braucht es auch keine Abfrage

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 2627

marant- schrieb:

Bringt

ls: Zugriff auf 'output.mp4' nicht möglich: Datei oder Verzeichnis nicht gefunden ls: Zugriff auf 'output.mp4' nicht möglich: Datei oder Verzeichnis nicht gefunden

-i: No such file or directory

In welches Verzeichnis springt denn die Shell? Das KDE Servicemenü bleibt in seinem Verzeichnis wo vom Mausbenutzer gestartet wird.

die output.mp4 könnte man auch mit Datum/Zeit versehen, dann braucht es auch keine Abfrage

Das wäre eine Idee, so könnte man es auch machen.

marant-

Anmeldungsdatum:
13. September 2021

Beiträge: 363

Bleibt wo die Dateien gewählt werden.

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 2627

marant- schrieb:

Bleibt wo die Dateien gewählt werden.

Merkwürdig. Dann sollte auch die Datei gefunden werden, falls die dort schon ist.

marant-

Anmeldungsdatum:
13. September 2021

Beiträge: 363

Gerade gesehen, input_list.tmp wird noch angelegt mit Inhalt Namen der Audio. 5 mal.

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 2627

marant- schrieb:

Gerade gesehen, input_list.tmp wird noch angelegt mit Inhalt Namen der Audio. 5 mal.

Das geht nicht gut. Bin auch schon am überlegen wie ich noch eine Sicherung in das KDE Servicemenü einbauen kann, damit Mecker gemacht wird, wenn zu viele Dateien markiert sind. Es darf ja nur eine Bilddatei und eine Audiodatei sein. Für das Auslesen aus der Liste hätte ich schon was. Aber dann packt grep sich einfach jeweils den ersten Treffer in der temporären Liste. Wäre schöner dem Nutzer die Rückmeldung zu geben, bevor überhaupt was in die temporäre Liste kommt, wenn zu viele Dateien markiert sind.

marant-

Anmeldungsdatum:
13. September 2021

Beiträge: 363

Inhalt ist immer die selbe mp3.

input_list.tmp - Der löscht Die nicht, weil keine output.mp4 erstellt wurde.

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 2627

Also mein KDE Servicemenü funktioniert bei mir auf dem Kubuntu KDE. So ein Gnome scheint dann doch etwas anders zu sein. Da ich Gnome auf meinem Desktop meide, kann ich auch nichts weiter dazu sagen. Was ist das da dann, Nautilus, Nemo? Da müssten sich dann mal Spezialisten dazu melden.

Das gemeine ist übrigens, dass auch bei KDE das Servicemenü für jede markierte Datei einen Prozess startet, daher auch die Murkserei mit der temporären Datei, die das dann alles aufsammelt, und dann muss die Bilddatei und die Audiodatei daraus herausgepickt werden.

marant-

Anmeldungsdatum:
13. September 2021

Beiträge: 363

Nix Gnome. ☺

Lubuntu / F.Manger: PCManFM, kann das aber auch Morgen mal mit Nemo probieren.

Vllt. wäre über eine *.sh zu gehen, nicht so verkehrt. Dann braucht es keine input_list.tmp.

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 2627

marant- schrieb:

Vllt. wäre über eine *.sh zu gehen, nicht so verkehrt. Dann braucht es keine input_list.tmp.

Ich mag auf meinem System nicht zu viele Shellscripte, die dann irgendwo noch vergessen herumliegen, wenn ich so ein KDE Servicemenü dann doch mal wieder entferne. Deswegen will ich das alles in die *.desktop Datei reinpacken. Räume ich die dann weg, bleiben nicht irgendwelche vergessenen Shellscripte zurück.

marant-

Anmeldungsdatum:
13. September 2021

Beiträge: 363

Nemo hier dito Problem. %f übergibt auch nur Einzeldatei.

Antworten |