Entri desktop untuk mengonversi file audio / video (pertanyaan penamaan)

Mar 03 2020

Pertanyaan saya: Saya ingin membuat entri desktop di (kde dolphins servicemenu) untuk mengonversi file audio / video.

Saya sudah mencobanya dengan follwing:

[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

Berfungsi seperti pesona saat dimasukkan ke / usr / share / kservices5 / ServiceMenus /.

TAPI: Perintah mv mengganti nama file output ke nama file asli dengan ekstensi file (yang wav tetapi harus mp3).

Bagaimana cara mengubah perintah untuk mengganti namanya dari file.wav ke file.mp3 dalam kolom Exec?

Jawaban

NathanielM.Beaver Jul 14 2020 at 23:02

Opsi # 1: tambahkan .mp3

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

Ini akan menghasilkan misalnya konversi

my_file.wav

untuk

my_file.wav.mp3

yang mungkin tidak diinginkan.

Fakta menyenangkan: dulu ada %nkunci yang memberi nama dasar seperti ini:

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

Spesifikasi FreeDesktop telah mencantumkan ini sebagai usang dari versi 1.0:

ExecKode bidang yang tidak digunakan lagi : ...% n (nama dasar file) ...

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

Ini mungkin berhasil di versi lama Dolphin, tetapi di versi yang saya gunakan (17.12.3), %nkuncinya %fberfungsi sama dengan kuncinya, jadi ini tidak akan berfungsi seperti yang diinginkan.

Opsi # 2: Gunakan ekspansi parameter bash

Untuk mendapatkan ini sebagai gantinya:

my_file.mp3

kita perlu menghapus ekstensi file. Ini dapat dilakukan dengan menggunakan ekspansi parameter bash :

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

Kita harus memanggil bash secara eksplisit karena Execkuncinya dilewati /bin/sh, yang tidak mendukung sintaks ini.

Peringatan

Kedua opsi ini akan berfungsi dengan nama file yang memiliki spasi. Namun, mereka tidak akan berfungsi seperti yang diharapkan dalam kasus lain, seperti:

  • Jika nama file MP3 sudah ada, itu akan gagal secara diam-diam.

  • Jika nama file WAV berisi string ekspansi parameter seperti $0atau $USERakan gagal secara diam-diam.

  • Jika nama file WAV berisi string substitusi perintah seperti `date`atau $(date)akan gagal secara diam-diam.

  • Jika nama file WAV adalah misalnya, example.WAVbukan example.wav, itu akan menghasilkan example.WAV.mp3.

Untuk membuat masalah ini lebih mudah diatur dan lebih mudah untuk di-debug, saya akan merekomendasikan menulis skrip shell terpisah dan menjalankannya secara langsung; ada banyak contoh:

  • Bagaimana cara mengubah file suara m4a ke mp3?

  • Bagaimana cara mengonversi audio dari ogg ke mp3?

  • massal / batch mengkonversi file mp3 ke ogg melalui baris perintah?

  • Mengonversi mp4 ke mp3

  • mengonversi folder mp4 ke mp3 dengan ffmpeg?

Komentar lebih lanjut

Selain itu, Anda mungkin sudah mengetahui ini, tetapi file desktop dapat disalin ke

~/.local/share/kservices5/ServiceMenus/

dari pada

/usr/share/kservices5/ServiceMenus/

yang berguna jika Anda ingin menginstalnya untuk satu pengguna atau tidak memiliki hak akses root.

Akhirnya, saya akan merekomendasikan penggunaan

MimeType=audio/x-wav

dari pada

MimeType=audio/*

karena ini hanya berfungsi pada file WAV.

Pertanyaan-pertanyaan Terkait:

  • Ekstensi file ganda dengan FFmpeg