Запись на рабочем столе для преобразования аудио / видео файлов (вопрос о названии)
Мой вопрос: я хотел бы создать запись на рабочем столе в (kde dolphins servicemenu) для преобразования аудио / видео файлов.
Я пробовал это со следующим:
[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
Работает как шарм, когда помещается в / usr / share / kservices5 / ServiceMenus /.
НО: команда mv переименовывает выходной файл в исходное имя файла с его расширением (которое является wav, но должно быть mp3).
Как я могу изменить команду, чтобы переименовать ее из file.wav в file.mp3 в поле Exec?
Ответы
Вариант №1: добавить .mp3
Exec=ffmpeg -i %f -codec:a libmp3lame -b:a 320k %f.mp3
Это приведет, например, к преобразованию
my_file.wav
к
my_file.wav.mp3
что может быть нежелательно.
Интересный факт: раньше был %nключ, который давал базовое имя вот так:
Exec=ffmpeg -i %f -codec:a libmp3lame -b:a 320k %n.mp3
В спецификации FreeDesktop это указано как устаревшее с версии 1.0:
Устаревшие
Execкоды полей: ...% n (базовое имя файла) ...
https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.0.html
Возможно, это сработало в более старых версиях Dolphin, но в версии, которую я использовал (17.12.3), %nключ работает так же, как и %fключ, поэтому это не будет работать должным образом.
Вариант 2: используйте расширение параметра bash
Чтобы получить это вместо этого:
my_file.mp3
нам нужно будет удалить расширение файла. Это можно сделать с помощью расширения параметра bash :
Exec=bash -c 'wavfile='\''%f'\''; mp3file="${wavfile%.wav}.mp3"; ffmpeg -i '\''%f'\'' -codec:a libmp3lame -b:a 320k "$mp3file"'
Мы должны вызвать bash явно, потому что Execключ передается /bin/sh, что не поддерживает этот синтаксис.
Предостережения
Обе эти опции будут работать с именами файлов, в которых есть пробелы. Однако в других случаях они не будут работать должным образом, например:
- Если имя файла MP3 уже существует, произойдет ошибка. 
- Если имя файла WAV содержит строку расширения параметра, такую как - $0или,- $USERона автоматически завершится ошибкой.
- Если имя файла WAV содержит строку подстановки команд, такую как - `date`или,- $(date)она автоматически завершится ошибкой.
- Если имя файла WAV, например, - example.WAVвместо- example.wav, это приведет к- example.WAV.mp3.
Чтобы облегчить решение этих проблем и облегчить их отладку, я бы рекомендовал написать отдельный сценарий оболочки и вызывать его напрямую; есть много примеров:
- Как преобразовать звуковой файл m4a в mp3? 
- Как я могу конвертировать аудио из ogg в mp3? 
- массовое / пакетное преобразование файлов mp3 в ogg через командную строку? 
- Конвертация mp4 в mp3 
- конвертировать папку mp4 в mp3 с помощью ffmpeg? 
Дальнейшие комментарии
Кстати, вы, возможно, уже знаете это, но файл рабочего стола можно скопировать в
~/.local/share/kservices5/ServiceMenus/
вместо
/usr/share/kservices5/ServiceMenus/
что полезно, если вы хотите установить его для одного пользователя или не имеете привилегий root.
Наконец, я бы рекомендовал использовать
MimeType=audio/x-wav
вместо
MimeType=audio/*
поскольку это работает только с файлами WAV.
Связанные вопросы:
- Двойное расширение файла с FFmpeg