Mục nhập trên màn hình để chuyển đổi tệp âm thanh / video (câu hỏi đặt tên)

Mar 03 2020

Câu hỏi của tôi: Tôi muốn tạo một mục trên máy tính để bàn trong (kde dolphins servicemenu) để chuyển đổi các tệp âm thanh / video.

Tôi đã thử nó với 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

Hoạt động như một sự quyến rũ khi được đưa vào / usr / share / kservices5 / ServiceMenus /.

NHƯNG: Lệnh mv đổi tên tệp đầu ra thành tên tệp gốc với phần mở rộng tệp của nó (là wav nhưng phải là mp3).

Làm cách nào để thay đổi lệnh đổi tên nó từ file.wav thành file.mp3 trong trường Exec?

Trả lời

NathanielM.Beaver Jul 14 2020 at 23:02

Tùy chọn # 1: nối .mp3

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

Điều này sẽ dẫn đến việc chuyển đổi ví dụ

my_file.wav

đến

my_file.wav.mp3

mà có thể không được mong muốn.

Sự thật thú vị: đã từng có %nchìa khóa đặt tên cơ sở như thế này:

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

Thông số FreeDesktop đã liệt kê điều này là không được dùng nữa từ phiên bản 1.0:

ExecMã trường không dùng nữa : ...% n (tên cơ sở của tệp) ...

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

Điều này có thể đã hoạt động trong các phiên bản cũ hơn của Dolphin, nhưng trong phiên bản tôi đã sử dụng (17.12.3), %nphím này hoạt động giống như %fphím, vì vậy điều này sẽ không hoạt động như mong muốn.

Tùy chọn # 2: sử dụng mở rộng thông số bash

Để có được điều này thay thế:

my_file.mp3

chúng tôi sẽ cần xóa phần mở rộng tệp. Điều này có thể được thực hiện bằng cách sử dụng mở rộng tham số bash :

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

Chúng ta phải gọi bash một cách rõ ràng vì Execkhóa được truyền qua /bin/sh, không hỗ trợ cú pháp này.

Cảnh báo

Cả hai tùy chọn này sẽ hoạt động với tên tệp có khoảng trắng. Tuy nhiên, chúng sẽ không hoạt động như mong đợi trong các trường hợp khác, chẳng hạn như:

  • Nếu tên tệp MP3 đã tồn tại, nó sẽ âm thầm bị lỗi.

  • Nếu tên tệp WAV chứa một chuỗi mở rộng tham số chẳng hạn như $0hoặc $USERnó sẽ âm thầm bị lỗi.

  • Nếu tên tệp WAV chứa một chuỗi thay thế lệnh chẳng hạn như `date`hoặc $(date)nó sẽ âm thầm không thành công.

  • Nếu tên tệp WAV là ví dụ example.WAVthay vì example.wav, nó sẽ dẫn đến example.WAV.mp3.

Để làm cho những vấn đề này dễ hiểu hơn và dễ gỡ lỗi hơn, tôi khuyên bạn nên viết một tập lệnh shell riêng và gọi nó trực tiếp; có rất nhiều ví dụ:

  • Làm thế nào để chuyển đổi tệp âm thanh m4a sang mp3?

  • Làm cách nào để chuyển đổi âm thanh từ ogg sang mp3?

  • chuyển đổi hàng loạt / hàng loạt các tệp mp3 sang ogg thông qua dòng lệnh?

  • Chuyển đổi mp4 sang mp3

  • chuyển đổi một thư mục của mp4 thành mp3 với ffmpeg?

Nhận xét thêm

Ngoài ra, bạn có thể đã biết điều này, nhưng tệp máy tính để bàn có thể được sao chép vào

~/.local/share/kservices5/ServiceMenus/

thay vì

/usr/share/kservices5/ServiceMenus/

điều này rất hữu ích nếu bạn muốn cài đặt nó cho một người dùng duy nhất hoặc không có đặc quyền root.

Cuối cùng, tôi khuyên bạn nên sử dụng

MimeType=audio/x-wav

thay vì

MimeType=audio/*

vì điều này chỉ hoạt động trên các tệp WAV.

Câu hỏi liên quan:

  • Phần mở rộng tệp kép với FFmpeg