Entrée de bureau pour convertir des fichiers audio / vidéo (question de nom)

Mar 03 2020

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

Je l'ai essayé avec le suivant:

[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 comme un charme lorsqu'il est placé dans / usr / share / kservices5 / ServiceMenus /.

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

Comment puis-je changer la commande pour la renommer de file.wav en file.mp3 dans le champ Exec?

Réponses

NathanielM.Beaver Jul 14 2020 at 23:02

Option n ° 1: ajoutez le .mp3

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

Cela entraînera par exemple la conversion

my_file.wav

à

my_file.wav.mp3

ce qui peut ne pas être souhaitable.

Fait amusant: il y avait autrefois la %nclé qui donnait le nom de base comme ceci:

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

La spécification FreeDesktop a répertorié ceci comme obsolète à partir de la version 1.0:

ExecCodes de champ obsolètes : ...% n (le nom de base d'un fichier) ...

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

Cela peut avoir fonctionné dans les anciennes versions de Dolphin, mais dans la version que j'ai utilisée (17.12.3), la %nclé fait la même chose que la %fclé, donc cela ne fonctionnera pas comme vous le souhaitez.

Option n ° 2: utiliser l'expansion des paramètres bash

Pour obtenir ceci à la place:

my_file.mp3

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

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

Nous devons invoquer explicitement bash car la Execclé est passée /bin/sh, ce qui ne prend pas en charge cette syntaxe.

Mises en garde

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

  • Si le nom de fichier MP3 existe déjà, il échouera silencieusement.

  • Si le nom de fichier WAV contient une chaîne d'extension de paramètres telle que $0ou, $USERil échouera silencieusement.

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

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

Pour rendre ces problèmes plus faciles à résoudre et à déboguer, je recommanderais d'écrire un script shell séparé et de l'invoquer directement; il existe de nombreux exemples:

  • Comment convertir un fichier son m4a en mp3?

  • Comment puis-je convertir l'audio d'ogg en mp3?

  • convertir en vrac / par lots des fichiers mp3 en ogg via la ligne de commande?

  • Conversion de mp4 en mp3

  • convertir un dossier de mp4 en mp3 avec ffmpeg?

D'autres commentaires

En passant, vous le savez peut-être déjà, mais le fichier de bureau peut être copié sur

~/.local/share/kservices5/ServiceMenus/

au lieu de

/usr/share/kservices5/ServiceMenus/

ce qui est utile si vous souhaitez l'installer pour un seul utilisateur ou ne disposez pas des privilèges root.

Enfin, je recommanderais d'utiliser

MimeType=audio/x-wav

au lieu de

MimeType=audio/*

puisque cela ne fonctionne que sur les fichiers WAV.

Questions connexes:

  • Extension de fichier double avec FFmpeg