Entri desktop untuk mengonversi file audio / video (pertanyaan penamaan)
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
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.WAVbukanexample.wav, itu akan menghasilkanexample.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