Hallo,
ich poste hier ein Skript, mit welchem man mp3-Dateien in AAC Dateien mittels des Nero AAC Encoders übertragen kann. Ich habe einen alten iPod mit 4GB Speicher, auf dem ich insbesondere Hörbücher höre. Mit mp3 ist das Ding schnell voll. Der Nero AAC Encoder ist nach einigen (eigenen) Tests derjenige Encoder, der selbst bei sehr geringen Bitraten akzeptable Hörqualität liefert, zumindest für gesprochenen Text.
Das Skript konvertiert erst die Dateien mittels ffmpeg, liest dann das Cover und die Tags aus, mappt diese auf die MP4 Covers. Das Mapping ist nicht vollständig, sollte aber die gängigsten Tags umfassen. Der Parameter, um die Qualität anzupassen ist in Zeile 4 "-q 0.22". 0.22 liefert bei mir vernünftige Qualität bei weniger als 60kb/s.
Das Skript benötigt zum laufen
NeroAacEnc und NeroAacTag (von der Nero Website)
ffmpeg eyeD3 id3v2 mp4v2-utils aus den Ubuntu Paketquellen
Das Skript mag kein Paradestück für Bash-Programmierung sein und hat bestimmt noch Optimierungspotenzial, aber vielleicht hilft es jemandem.
Beste Grüße,
linuxnomo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | #!/bin/bash # Benötigt eyeD3 id3v2 mp4v2-utils # alternative Tools: id3ed id3tool mp3info NEROAACQUALITY="-q 0.22" IMG_DIR="/tmp/mp3toaac_img_tmp" x=$1 FileName=${x%.*} ffmpeg -i "$1" -y -c:a pcm_s16le -f wav /tmp/recode.wav && neroAacEnc $NEROAACQUALITY -if /tmp/recode.wav -of "$FileName.mp4" mkdir -p $IMG_DIR eyeD3 --write-images=$IMG_DIR "$1" 1> /dev/null 2> /tmp/Error_mp3toaac.sh CoverResult="$(</tmp/Error_mp3toaac.sh)" CoverFilename=${CoverResult%...*} CoverFilename=${CoverFilename#*Writing\ } ID3TAG="$(id3v2 -R "$1")" AACTAGS="" for i in $(id3v2 -R "$1"|tr -t " " "~.-~.-") do TAG=$(echo $i|tr -t "~.-~.-" " ") TAGID=$TAG TAGID=${TAGID%%:*} TAGVALUE=$TAG TAGVALUE=${TAGVALUE#*: } case $TAGID in COMM) neroAacTag -meta:comment="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; COM) neroAacTag -meta:comment="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; POPM) neroAacTag -meta:rating="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TALB) neroAacTag -meta:album="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TAL) neroAacTag -meta:album="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TBPM) neroAacTag -meta:tempo="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TBP) neroAacTag -meta:tempo="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TCOM) neroAacTag -meta:composer="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TCM) neroAacTag -meta:composer="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TCON) neroAacTag -meta:genre="${TAGVALUE%(*}" "$FileName.mp4" 2>/dev/null GENREID="${TAGVALUE#*(}" GENREID="${GENREID%)*}" mp4tags -genreid "$GENREID" "$FileName.mp4" ;; TCO) neroAacTag -meta:genre="${TAGVALUE%(*}" "$FileName.mp4" 2>/dev/null GENREID="${TAGVALUE#*(}" GENREID="${GENREID%)*}" mp4tags -genreid "$GENREID" "$FileName.mp4" ;; TCOP) neroAacTag -meta:copyright="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TCR) neroAacTag -meta:copyright="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TIT1) neroAacTag -meta-user:contentgroup="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TT1) neroAacTag -meta-user:contentgroup="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TIT2) neroAacTag -meta:title="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TT2) neroAacTag -meta:title="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TIT3) neroAacTag -meta-user:description="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TT3) neroAacTag -meta-user:description="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TMCL) neroAacTag -meta:credits="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TMOO) neroAacTag -meta:mood="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TPE1) neroAacTag -meta:artist="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TP1) neroAacTag -meta:artist="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TPE2) neroAacTag -meta-user:'album artist'="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TP2) neroAacTag -meta-user:'album artist'="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TPOS) neroAacTag -meta:disc="${TAGVALUE%/*}" "$FileName.mp4" 2>/dev/null if [[ $TAGVALUE == *"/"* ]] then neroAacTag -meta:totaldiscs="${TAGVALUE#*/}" "$FileName.mp4" 2>/dev/null mp4tags -disks "${TAGVALUE#*/}" "$FileName.mp4" fi ;; TPA) neroAacTag -meta:disc="${TAGVALUE%/*}" "$FileName.mp4" 2>/dev/null if [[ $TAGVALUE == *"/"* ]] then neroAacTag -meta:totaldiscs="${TAGVALUE#*/}" "$FileName.mp4" 2>/dev/null mp4tags -disks "${TAGVALUE#*/}" "$FileName.mp4" fi ;; TPUB) neroAacTag -meta:label="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TPB) neroAacTag -meta:label="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TRCK) neroAacTag -meta:track="${TAGVALUE%/*}" "$FileName.mp4" 2>/dev/null if [[ $TAGVALUE == *"/"* ]] then neroAacTag -meta:totaltracks="${TAGVALUE#*/}" "$FileName.mp4" 2>/dev/null mp4tags -tracks "${TAGVALUE#*/}" "$FileName.mp4" fi ;; TRK) neroAacTag -meta:track="${TAGVALUE%/*}" "$FileName.mp4" 2>/dev/null if [[ $TAGVALUE == *"/"* ]] then neroAacTag -meta:totaltracks="${TAGVALUE#*/}" "$FileName.mp4" 2>/dev/null mp4tags -tracks "${TAGVALUE#*/}" "$FileName.mp4" fi ;; TSO2) neroAacTag -meta-user:sortband="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TSOA) neroAacTag -meta-user:sortalbum="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TSOC) neroAacTag -meta-user:sortwriter="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TSOP) neroAacTag -meta-user:sortartist="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TSOT) neroAacTag -meta-user:sorttitle="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TSRC) neroAacTag -meta:isrc="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TRC) neroAacTag -meta:isrc="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TYER) neroAacTag -meta:year="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TYE) neroAacTag -meta:year="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; USLT) neroAacTag -meta:lyrics="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; TXT) neroAacTag -meta:lyrics="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; WOAS) neroAacTag -meta:url="$TAGVALUE" "$FileName.mp4" 2>/dev/null;; esac done if [ -f "$CoverFilename" ] then echo "Es gibt ein Cover unter $CoverFilename " neroAacTag -add-cover:front:"$CoverFilename" "$FileName.mp4" 2>/dev/null else echo "Kein Cover" fi mp4info "$FileName.mp4" |
Moderiert von XM-Franz:
Da keine Supportfrage erkennbar ist, in ein geeigneteres Unterforum verschoben.