Запись на рабочем столе для преобразования аудио / видео файлов (вопрос о названии)

Mar 03 2020

Мой вопрос: я хотел бы создать запись на рабочем столе в (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?

Ответы

NathanielM.Beaver Jul 14 2020 at 23:02

Вариант №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