Desktop-Eintrag zum Konvertieren von Audio- / Videodateien (Namensfrage)

Mar 03 2020

Meine Frage: Ich möchte einen Desktop-Eintrag in (kde dolphins servicemenu) erstellen, um Audio- / Videodateien zu konvertieren.

Ich habe es mit folgendem versucht:

[Desktop Entry]
Actions=Convertwav2Mp3
Icon=audio-x-flac
MimeType=audio/*
ServiceTypes=KonqPopupMenu/Plugin
Type=Service
X-KDE-Priority=TopLevel

[Desktop Action Convertwav2Mp3]
Exec=ffmpeg -i %f -codec:a libmp3lame -b:a 320k .out.mp3 && mv .out.mp3 %f
Icon=audio-x-flac
Name=Convertwav2Mp3

Funktioniert wie ein Zauber, wenn er in / usr / share / kservices5 / ServiceMenus / abgelegt wird.

ABER: Der Befehl mv benennt die Ausgabedatei in den ursprünglichen Dateinamen mit der Dateierweiterung um (die wav ist, aber mp3 sein sollte).

Wie kann ich den Befehl ändern, um ihn im Feld Exec von file.wav in file.mp3 umzubenennen?

Antworten

NathanielM.Beaver Jul 14 2020 at 23:02

Option 1: Fügen Sie die MP3-Datei hinzu

Exec=ffmpeg -i %f -codec:a libmp3lame -b:a 320k %f.mp3

Dies führt zB zu einer Konvertierung

my_file.wav

zu

my_file.wav.mp3

was möglicherweise nicht wünschenswert ist.

Unterhaltsame Tatsache: Früher gab es den %nSchlüssel, der den Basisnamen wie folgt gab:

Exec=ffmpeg -i %f -codec:a libmp3lame -b:a 320k %n.mp3

Die FreeDesktop-Spezifikation hat dies als veraltet ab Version 1.0 aufgeführt:

Veraltete ExecFeldcodes: ...% n (der Basisname einer Datei) ...

https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.0.html

Dies hat möglicherweise in älteren Versionen von Dolphin funktioniert, aber in der von mir verwendeten Version (17.12.3) funktioniert der %nSchlüssel genauso wie der %fSchlüssel, sodass dies nicht wie gewünscht funktioniert.

Option 2: Verwenden Sie die Bash-Parametererweiterung

Um dies stattdessen zu erhalten:

my_file.mp3

Wir müssen die Dateierweiterung entfernen. Dies kann mithilfe der Bash-Parametererweiterung erreicht werden :

Exec=bash -c 'wavfile='\''%f'\''; mp3file="${wavfile%.wav}.mp3"; ffmpeg -i '\''%f'\'' -codec:a libmp3lame -b:a 320k "$mp3file"'

Wir müssen bash explizit aufrufen, da der ExecSchlüssel übergeben wird /bin/sh, was diese Syntax nicht unterstützt.

Vorsichtsmaßnahmen

Beide Optionen funktionieren mit Dateinamen mit Leerzeichen. In anderen Fällen funktionieren sie jedoch nicht wie erwartet, z. B.:

  • Wenn der MP3-Dateiname bereits vorhanden ist, schlägt er stillschweigend fehl.

  • Wenn der WAV-Dateiname eine Parametererweiterungszeichenfolge enthält, z. B. $0oder $USER, schlägt dies stillschweigend fehl.

  • Wenn der WAV-Dateiname eine Befehlsersetzungszeichenfolge enthält, z. B. `date`oder $(date)schlägt dies stillschweigend fehl.

  • Wenn der WAV-Dateiname zB example.WAVanstelle von lautet example.wav, führt dies zu example.WAV.mp3.

Um diese Probleme leichter zu beheben und zu debuggen, würde ich empfehlen, ein separates Shell-Skript zu schreiben und es direkt aufzurufen. Es gibt viele Beispiele:

  • Wie konvertiere ich eine m4a Sounddatei in MP3?

  • Wie kann ich Audio von ogg in mp3 konvertieren?

  • Bulk / Batch MP3-Dateien über die Kommandozeile in ogg konvertieren?

  • MP4 in mp3 konvertieren

  • mit ffmpeg einen Ordner mit MP4s in MP3s konvertieren?

Weitere Kommentare

Abgesehen davon wissen Sie dies vielleicht bereits, aber die Desktop-Datei kann in kopiert werden

~/.local/share/kservices5/ServiceMenus/

Anstatt von

/usr/share/kservices5/ServiceMenus/

Dies ist nützlich, wenn Sie es für einen einzelnen Benutzer installieren möchten oder keine Root-Rechte haben.

Schließlich würde ich empfehlen, zu verwenden

MimeType=audio/x-wav

Anstatt von

MimeType=audio/*

da dies nur bei WAV-Dateien funktioniert.

Verwandte Fragen:

  • Doppelte Dateierweiterung mit FFmpeg