Desktop-Eintrag zum Konvertieren von Audio- / Videodateien (Namensfrage)
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
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 %n
Schlü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
Exec
Feldcodes: ...% 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 %n
Schlüssel genauso wie der %f
Schlü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 Exec
Schlü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.
$0
oder$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.WAV
anstelle von lautetexample.wav
, führt dies zuexample.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