选项 1:附加 .mp3

选项 1:附加 .mp3

我的问题:我想在(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)。

我如何在 Exec 字段中更改命令以将其从 file.wav 重命名为 file.mp3?

答案1

选项 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它将默认失败。

  • `date`如果 WAV 文件名包含诸如或的命令替换字符串,$(date)它将默认失败。

  • 如果 WAV 文件名是 而不是example.WAVexample.wav则结果为example.WAV.mp3

为了使这些问题更易于处理和调试,我建议编写一个单独的 shell 脚本并直接调用它;有很多例子:

进一步评论

另外,你可能已经知道这一点,但桌面文件可以复制到

~/.local/share/kservices5/ServiceMenus/

代替

/usr/share/kservices5/ServiceMenus/

如果您想为单个用户安装它或者没有 root 权限,这很有用。

最后,我建议使用

MimeType=audio/x-wav

代替

MimeType=audio/*

因为这只适用于 WAV 文件。

相关问题:

相关内容