定番MP3エンコーダのLAMEでWAVフォーマットからMP3へ圧縮する際に、ファイルを1つずつしか処理できなかったので、スクリプトを作って複数ファイルを処理していく。



LAMEインストール環境設定


とりあえずパッケージの更新後、インストール

アップデート:
sudo apt-get update
sudo apt-get upgrade
LAMEのインストール:
sudo apt-get install lame
インストール確認:
lame --version



コマンドライン上で音を再生する設定



wavフォーマットや、圧縮変換後のmp3フォーマットのファイルをコマンドライン上で再生して確認できるようにする。

アップデート:
sudo apt-get update
sudo apt-get upgrade


wavファイル


waveファイルを再生するために、”aplay”を使う。

以下のインストール
sudo apt install alsa-base
sudo apt-get install alsa-utils

ここまでで、aplayで再生できるはずだが、WSLでは以下のようなエラーが出た。
ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1334:(snd_func_refer) error evaluating name
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5701:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:831: audio open error: No such file or directory
なので

PulseAudioの明示的インストール
sudo apt-get install pulseaudio
aplayのインストール確認
aplay --version
使い方:
aplay {file_path}
使用例:aplay ./music.wav


mp3ファイル


mp3フォーマットのファイルを再生するために"mpg321"を使う。名前の通りMpeg規格のMP3を再生できるプレーヤー

インストール:
sudo apt-get install mpg321
インストール確認:
mpg321 --version
使い方:
mpg321 {file_path}
使用例:mpg321 ./music.mp3



エンコード/デコード方法



細かなオプションについては以下など参考:


ファイル単体処理


基本記述:
lame {オプション} {入力ファイル} {出力ファイル}

エンコード例:
lame -b 320 music.wav music.mp3
ビットレート320でエンコードしています。ファイルサイズを見るとこれでもそこそこ小さくなっているはず。

デコード例:
lame --decode music.mp3 music.wav
mp3変換は非可逆圧縮なので完全に元に戻ることはありません。

複数ファイルの処理


スクリプトで複数回コマンドを実行する

ツリー構造:
lame_test_dir
├── script.sh
└── wave
    └── toujyo.wav

Shellスクリプト:
#!/bin/sh

cd "$(dirname "$0")"

for BPS in 128 192 256 320; do
    if [ ! -d ./mp3_"${BPS}" ]; then
        # ディレクトリが存在しない場合
        mkdir ./mp3_"${BPS}"
    else
        # ディレクトリが存在する場合
        if [ -n "$(ls -A ./mp3_"${BPS}")" ]; then
            echo ""
        fi
    fi
    # エンコード
    find ./wave/ -name *.wav | sed 's/.\/wave\///' | sed 's/.wav//' | while read file; do
    lame -b "${BPS}" ./wave/"$file".wav ./mp3_"${BPS}"/"$file".mp3
done
done

実行後ツリー:
lame_test_dir
├── mp3_128
│   └── toujyo.mp3
├── mp3_192
│   └── toujyo.mp3
├── mp3_256
│   └── toujyo.mp3
├── mp3_320
│   └── toujyo.mp3
├── script.sh
└── wave
    └── toujyo.wav




参考:
https://zenn.dev/cat2151/scraps/53076d45431d49
https://weblinuxmemo.hatenadiary.org/entry/20090914/p2


このエントリーをはてなブックマークに追加
コメントを閉じる

コメント

コメントフォーム
記事の評価
  • リセット
  • リセット