1 votes

Entrée de bureau pour convertir les fichiers audio/vidéo (question de dénomination)

Ma question : J'aimerais créer une entrée de bureau dans (kde dolphins servicemenu) pour convertir des fichiers audio/vidéo.

Je l'ai essayé avec les résultats suivants :

[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

Fonctionne à merveille lorsqu'il est placé dans /usr/share/kservices5/ServiceMenus/.

MAIS : La commande mv renomme le fichier de sortie au nom de fichier original avec son extension de fichier (qui est wav mais devrait être mp3).

Comment puis-je modifier la commande de manière à renommer le fichier.wav en fichier.mp3 dans le champ Exec ?

0voto

Option 1 : ajouter le .mp3

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

Il en résultera, par exemple, la conversion de

my_file.wav

à

my_file.wav.mp3

ce qui n'est pas forcément souhaitable.

Fait amusant : il y avait autrefois le %n qui a donné le nom de la base comme ceci :

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

La spécification de FreeDesktop a listé ceci comme étant déprécié à partir de la version 1.0 :

Déprécié Exec codes des champs : ... %n (le nom de base d'un fichier) ...

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

Cela a peut-être fonctionné dans des versions plus anciennes de Dolphin, mais dans la version que j'ai utilisée (17.12.3), la fonction %n fait la même chose que la touche %f donc cela ne fonctionnera pas comme souhaité.

Option #2 : utiliser l'expansion des paramètres de bash

Pour avoir ça à la place :

my_file.mp3

nous devrons supprimer l'extension du fichier. Ceci peut être accompli en utilisant expansion des paramètres de bash :

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

Nous devons invoquer bash de manière explicite car la fonction Exec est passée par /bin/sh qui ne supporte pas cette syntaxe.

Avertissements

Ces deux options fonctionnent avec des noms de fichiers comportant des espaces. Cependant, elles ne fonctionneront pas comme prévu dans d'autres cas, tels que :

  • Si le nom de fichier MP3 existe déjà, l'opération échouera en silence.

  • Si le nom du fichier WAV contient une chaîne d'expansion de paramètres telle que $0 o $USER il échouera silencieusement.

  • Si le nom du fichier WAV contient une chaîne de substitution de commande telle que `date` o $(date) il échouera silencieusement.

  • Si le nom du fichier WAV est par exemple example.WAV au lieu de example.wav il en résultera example.WAV.mp3 .

Pour rendre ces problèmes plus traçables et plus faciles à déboguer, je recommanderais d'écrire un Shell Shell séparé et de l'invoquer directement ; il existe de nombreux exemples :

Autres commentaires

Par ailleurs, vous le savez peut-être déjà, mais le fichier du bureau peut être copié à l'adresse suivante

~/.local/share/kservices5/ServiceMenus/

au lieu de

/usr/share/kservices5/ServiceMenus/

ce qui est utile si vous voulez l'installer pour un seul utilisateur ou si vous n'avez pas les privilèges root.

Enfin, je recommande d'utiliser

MimeType=audio/x-wav

au lieu de

MimeType=audio/*

puisque cela ne fonctionne que sur les fichiers WAV.

Questions connexes :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X