web-dev-qa-db-ja.com

カバーアートを保持したまま、.mp4および.m4aファイルを.mp3ファイルに自動的に変換するにはどうすればよいですか?

.mp4および.m4aオーディオファイルがいくつかあり、それらを.mp3ファイルに変換します。 EasyTAGを手動で操作することなく、結果の.mp3ファイルにソースファイルに含まれるカバーアートを含めたいと思います。これどうやってするの?

6
Flimm

これを自動的に行うスクリプトを作成しました。次のように、各.m4aまたはmp4ファイルに対してスクリプトを実行するだけで、同じディレクトリに.mp3ファイルが生成されます。

convert-mp4-to-mp3.sh *.mp4 *.m4a

これらの依存関係をインストールする必要があります。

Sudo apt-get install realpath libav-tools atomicparsley eyed3

スクリプトは次のとおりです。このコンテンツをコピーして貼り付け、convert-mp4-to-mp3.shという名前のファイルに保存します。

#!/bin/bash

set -e

for filename in "$@" ; do
    if [[ "$filename" == -* ]] ; then
        printf "Filename %s must not begin with a dash\n" "$filename" 1>&2
        continue
    fi
    printf "Converting %s\n" "$filename"
    filename=$(realpath "$filename")
    directory=$(mktemp -d)
    cwd=$(pwd)
    output="$(basename "$filename" | sed 's/\.[^.]*$//').mp3"
    cd "$directory"
    avconv -i "$filename" "$output"
    ln -s "$filename" "$(basename "$filename")"
    AtomicParsley "$(basename "$filename")" --extractPix || true
    shopt -s nullglob
    for imagefilename in *.jpg *.png *.JPG *.PNG ; do
        eyeD3 --add-image="$imagefilename":FRONT_COVER "$output" 
        break
    done
    shopt -u nullglob
    mv "$output" "$(dirname "$filename")"
    cd "$cwd"
    rm -r "$directory"
done
6
Flimm