Chuyển đổi thư viện các bản nhạc WMA sang MP3?


28

Tôi biết có các tùy chọn như Sound Converter để thực hiện chúng một bản nhạc hoặc thư mục cùng một lúc, nhưng có công cụ nào sẽ thu thập dữ liệu theo cách đệ quy thông qua các thư mục con của thư mục và chuyển đổi tất cả WMA sang MP3 không?

Về cơ bản, tôi muốn thả lỏng ~ / Âm nhạc của mình và để nó tự làm mà không cần tôi phải tự cung cấp cho nó một thư mục con.


Lưu ý, nếu bất kỳ tệp WMA nào có DRM trên chúng, không có ứng dụng Linux nào có thể giải mã chúng.
Broam

Câu trả lời:


17

MPlayer có khả năng đã được cài đặt. Cũng chắc chắn rằng bạn có què:

sudo apt-get install mplayer lame

Sau đó, có hai cách để làm điều đó, một phiên bản dễ đọc và một kịch bản ngắn và bẩn để làm điều đó:

Tất cả các wma nên có trong thư mục hiện tại của bạn. Tạo một tệp có tên wmamp3 trong thư mục chính của bạn (~ /) có chứa:

#!/bin/bash

current_directory=$( pwd )

#remove spaces
for i in *.wma; do mv "$i" `echo $i | tr ' ' '_'`; done

#remove uppercase
for i in *.[Ww][Mm][Aa]; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done

#Rip with Mplayer / encode with LAME
for i in *.wma ; do mplayer -vo null -vc dummy -af resample=44100 -ao pcm -ao pcm:waveheader $i && lame -m s audiodump.wav -o $i; done

#convert file names
for i in *.wma; do mv "$i" "`basename "$i" .wma`.mp3"; done

#cleanup
rm audiodump.wav

chmod +x ~/wmamp3 để làm cho nó thực thi

sudo cp ~/wmamp3 /usr/bin để bật nó ở đâu đó hữu ích trên con đường của bạn

Nhập "wmamp3" để chạy chuyển đổi của bạn.


Phiên bản ngắn và bẩn (thực hiện chính xác như trên):

for i in *.wma ; do mplayer -vo null -vc dummy -af resample=44100 -ao pcm -ao pcm:waveheader "$i" && lame -m j -h --vbr-new -b 160 audiodump.wav -o "`basename "$i" .wma`.mp3"; done; rm -f audiodump.wav

Cảm ơn, nhưng tôi cần một thư mục đi qua các thư mục theo cách đệ quy, vì chúng được trải rộng qua nhiều thư mục con của ~ / Music.
Mike Crittenden

Bạn có thể dễ dàng mở rộng tập lệnh để thực hiện tìm kiếm tệp đệ quy - tôi có thể làm lại tập lệnh đầu tiên đó bằng cách sử dụng find, dẫn đầu ra cho trình phát.
Rory Alsop

Câu trả lời này không hiệu quả với tôi vào năm 2013. Tuy nhiên, câu trả lời này hoạt động: askubfox.com/a/55469/36661
MountainX

1
Phiên bản nhanh và bẩn vẫn hoạt động vào năm 2016 (vào ngày 14.04) nếu bạn thay thế -ao pcm -waveheaderbằng -ao pcm:waveheader.
m00am

1
Giải pháp kịch bản tốt. Hoạt động không có sửa đổi vào tháng 9 năm 2019 trên xubfox 19.04.
Balu

40

Cài đặt Soundconverter Cài đặt soundconverter

và chạy Soundconvertertừ launcher hoặc terminal

nhập mô tả hình ảnh ở đây

Việc chuyển đổi mặc định là .oggthay đổi điều này để mp3đi edit-> preferencesdưới loại kết quả. Formatsang MP3 như sau:

nhập mô tả hình ảnh ở đây

Nhấp vào thêm thư mục và sau đó chọn thư mục nhạc của bạn. Bạn có thể chọn thư mục đầu ra trên cấu hình tùy chọn ở trên trước khi bạn nhấp vào chuyển đổi.

Hy vọng điều này sẽ được thực hiện bằng hai lần nhấp :)


2
Đây chắc chắn là điểm đơn giản và nhấp chuột. +1 từ tôi :-)
Rory Alsop

Vấn đề với giải pháp này là SoundConverter hoạt động cực kỳ chậm hoặc chỉ đóng băng hoàn toàn khi hơn một vài trăm bài hát được thêm vào cùng lúc và thư viện của tôi có khoảng 5k.
Mike Crittenden

5k? wooo đó là rất nhiều;) dù sao nó phụ thuộc vào hiệu suất máy tính của bạn. có thể bạn phải tách những tập tin đó cá nhân tôi đã chuyển đổi một vài trăm bài hát mà không bị đóng băng :)
Achu

13

Mplayer và què phải được cài đặt trước:

sudo apt-get install mplayer lame

Sau đó tạo tập lệnh ( trang tham chiếu ) và thực thi nó:

#!/bin/bash
# By Marko Haapala
# converts wma to mp3 recursively. does not delete any static files, so 
# cleanup and renaming is needed afterwards. 
#
# requirements:
# lame    - http://lame.sourceforge.net/download.php
# mplayer - apt-get install mplayer or http://www.mplayerhq.hu/design7/dload.html


current_directory=$(pwd)
wma_files=$(find "${current_directory}" -type f -iname "*.wma")
# Need to change IFS or files with filenames containing spaces will not
# be handled correctly by for loop
IFS=$'\n' 
for wma_file in ${wma_files}; do 
    mplayer -vo null -vc dummy -af resample=44100 \
    -ao pcm -ao pcm:waveheader "${wma_file}" && lame -m s \
    audiodump.wav -o "${wma_file}".mp3
    rm audiodump.wav
done

Có vẻ như nó làm chính xác những gì bạn muốn. Hãy nhớ rằng bạn có thể muốn nghịch ngợm với những lá cờ què để đảm bảo bạn có được mức chất lượng mong muốn.


3
Điều này vẫn hoạt động tốt trong năm 2013
MountainX

@David Futhcher, đề cập đến tham khảo là thói quen tốt đẹp :-), cảm ơn bạn!
AjayKumarBasuthkar

2

Cài đặt Bộ chuyển đổi âm thanh Perl (pacpl): sudo apt-get install pacpl

Lệnh này sẽ chuyển đổi tất cả các tệp wma trong một thư mục đã cho thành các tệp mp3 (giữ nguyên bản gốc):

pacpl -r -to mp3 -only wma <directory name>

Nếu bạn cảm thấy rủi ro, bạn có thể thêm --deletetùy chọn để xóa bản gốc:

pacpl -r --delete -to mp3 -only wma <directory name>tôi


2

Tôi biết điều này hơi cũ nhưng tôi đã sửa đổi kịch bản được hiển thị bởi David Futcher. Những thay đổi là:

  • Sử dụng /tmpthay vì thư mục hiện tại cho tệp wav tạm thời (điều này đã tăng tốc độ lớn khi tôi sử dụng tệp này để chuyển đổi tệp trên thẻ nhớ USB).

  • Xóa các tệp wma sau khi chúng được chuyển đổi (hy vọng thành công).

Đây là:

#!/bin/bash
# By Marko Haapala
# converts wma to mp3 recursively. does not delete any static files, so
# cleanup and renaming is needed afterwards.
#
# Modified by V10lator
# to delete the wma files and to use /tmp for temporary files
#
# requirements:
# lame    - http://lame.sourceforge.net/download.php
# mplayer - apt-get install mplayer or http://www.mplayerhq.hu/design7/dload.html


current_directory=$(pwd)
tmp_file=$(mktemp -t -u --suffix=.wav)
wma_files=$(find "${current_directory}" -type f -iname "*.wma")
# Need to change IFS or files with filenames containing spaces will not
# be handled correctly by for loop
IFS=$'\n' 
for wma_file in ${wma_files}; do 
    mplayer -vo null -vc dummy -af resample=44100 \
    -ao pcm -ao pcm:waveheader -ao pcm:file="${tmp_file}" \
    "${wma_file}" && lame -m s "${tmp_file}" \
    -o "${wma_file}".mp3 && rm "${wma_file}"
    rm "${tmp_file}"
done

hai dòng cuối cùng có thể được hợp nhất :-) -o "${wma_file}".mp3 && rm "${wma_file}" "${tmp_file}" điều này sẽ giúp tăng tốc độ xử lý một cách nhanh chóng vì một lệnh thực thi khác cho rm không có.
AjayKumarBasuthkar

1

Đối với những người đang tìm kiếm một phiên bản GUI có thể chọn một số loại tệp nhất định: công cụ KDE soundKonverter https://github.com/HessiJames/soundkonverter hỏi những loại tệp nào sẽ được thêm vào hàng đợi hội thoại.

Giải pháp tốt nhất cho bộ sưu tập Audiobook khổng lồ của tôi chứa các tệp mp3 / ogg / wma.


1

Đây là phiên bản kịch bản Marko Haapala của tôi, sử dụng ffmpeg:

current_directory=$(pwd)
wma_files=$(find "${current_directory}" -type f -iname "*.wma")
# Need to change IFS or files with filenames containing spaces will not
# be handled correctly by for loop
# Also, it must be run as root to correctly handle spaces on Ubuntu 16
IFS=$'\n'
for wma_file in ${wma_files}; do
 ffmpeg -i "${wma_file}" -q:a 0 "${wma_file}".mp3
 #uncomment rm below to delete original wma's
 #rm "${wma_file}"
done

Tôi thích ffmpeg hơn, vì nó không thay đổi tốc độ mẫu và nó không cần tệp tạm thời trung gian


0

Soundcoverter hiển thị lỗi gì đó về mô-đun Windows Media và Python 2.7

Avconv hoạt động tốt: avconv -i ./song.wma song.mp3


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.