====== Ubuntu - Sound - Fix mp3 files ====== Some of the more important issues that are found: * broken tags / headers / audio * duplicate tags / headers * incorrect placement of tags / headers (ID3V2, ID3V1, LAME, Xing, ...) * low quality audio * missing VBR header * missing track info / cover art * broken track info / cover art * missing normalization data * character encoding issues (for languages other than English) Things to fix and change: * Adding / fixing track info, including album cover * Correcting files that show incorrect song duration * Correcting files in which the player cannot seek correctly * Converting characters for non-English names * Adding composer name to the artist field, for players that don't handle the composer field * Renaming files based on their fields * Changing word case for track info mp3check --cut-junk-start --cut-junk-end --cut-tag-end --fix-headers input.mp3 ffmpeg -i oldfile.mp3 newfile.mp3 lame input.mp3 output.mp3 lame --decode input.mp3 - | lame -V0 - output.mp3 for f in *.mp3 ; do lame --decode "$f" - | lame -V1 - "${f%.mp3}_V1.mp3" ; done vbrfix -always -log input.mp3 output.mp3 vbrfix -always -makevbr -lameinfo imput.mp3 output.mp3 ---- find . -iname '*.mp3' -exec /home/peter/Downloads/mp3gain/mp3gain -r -c -m 4 {} \; for D in `find . -type d`; do for f in $D/*.mp3; do lame --decode "$f" - lame -V1 - "${f%.mp3}.mp3.mp3" ; done; done ffmpeg -i a.mp3 -c:a libfdk_aac a.m4a ffmpeg -i a.mp3 -c:a aac -b:a 192k a.m4a find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | vbrfix -always -makevbr -lameinfo - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; vbrfix -always -makevbr -lameinfo "$file" "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; ffmpeg -i "$file" -c:a aac -b:a 320k "${file%.mp3}.m4a"; done lame --vbr-new --preset standard --tt "${tt}" --ta "${ta}" --tl "${tl}" --ty "${ty}" --tn "${tn}" --tg "${tg}" --add-id3v2 a.mp3 a_a.mp3 find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame --vbr-new --preset standard --tt "${tt}" --ta "${ta}" --tl "${tl}" --ty "${ty}" --tn "${tn}" --tg "${tg}" --add-id3v2 - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; mp3check --cut-junk-start --cut-junk-end --cut-tag-end --fix-headers "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame --id3v1-only --id3v2-latin1 --add-id3v2 --cbr - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame --add-id3v2 --id3v1-only --id3v2-latin1 --cbr - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame --add-id3v2 --id3v1-only --cbr - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame --id3v1-only --cbr - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame --add-id3v2 --cbr - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame -V1 --id3v1-only --cbr - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame --cbr - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame --cbr -V1 - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame -V1 - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file"; done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; lame --decode "$file" - | lame -V1 - "${file%.mp3}_V1.mp3"; \mv "${file%.mp3}_V1.mp3" "$file" done find . -type f -name "*.mp3" -print0 | while IFS= read -r -d '' file; do echo "$file"; done for D in `find . -print0 -type d`; do echo "$D"; done for D in `find . -print0 -type d`; do echo $D; done for D in `find . -type d`; do echo $D; done for D in `find . -type d`; do echo '$D'; done for file in *.mp3; do lame -V 2 "$file" "${file%.*}".mp3; done for file in *.wav; do lame -V 2 "$file" "${file%.*}".mp3; done for D in `find . -type d`; do for f in $D/*.mp3; do lame --decode "$f" - lame -V1 - "${f%.mp3}.mp3.mp3" ; done; done for D in `find . -type d`; do for f in $D/*.mp3; do lame --decode "$f" -| lame -V1 - "${f%.mp3}.mp3.mp3" ; done; done for D in `find . -type d` | xargs; do for f in *.mp3; do echo "$D" ; done; done for D in `find . -type d`; do for f in *.mp3; do echo "$D" ; done; done for D in `find . -type d`; do for f in *.mp3; do echo "'$D'" ; done; done for D in `find . -type d`; do for f in *.mp3; do echo '"$D"' ; done; done for D in `find . -type d`; do for f in "$D"/*.mp3; do echo "$D" ; done; done for D in `find . -type d`; do for f in "$D"/*.mp3; do echo $D ; done; done for D in `find . -type d`; do for f in "$D"/*.mp3; do echo $f ; done; done for D in `find . -type d`; for f in "$D"/*.mp3; do echo "$f" ; done; done find . -iname '*.mp3' -exec echo {}; echo {} \; find . -iname '*.mp3' -exec echo {} \; find . -iname '*.mp3' -exec echo {} | lame -V 1 - v1.mp3 \; find . -iname '*.mp3' -exec echo {} - | lame -V 1 - v1.mp3 \; find . -iname '*.mp3' -exec echo {} - | lame -V1 - v1.mp3 \; find . -iname '*.mp3' -exec echo {} - | lame -V2 - v1.mp3 \; find . -iname '*.mp3' -exec echo {} - | lame -V2 v1.mp3 \; find . -iname '*.mp3' -exec echo {} v1.wav | lame -V2 v1.wav v1.mp3; \mv v1.mp3 {} \; find . -iname '*.mp3' -exec echo {} v1.wav | lame -V2 v1.wav v1.mp3; mv v1.mp3 {} \; find . -iname '*.mp3' -exec echo {} - | lame -V2 v1.mp3; mv v1.mp3 {} \; find . -iname '*.mp3' -exec echo {} - | lame -V2 - v1.mp3; mv v1.mp3 {} \; find . -iname '*.mp3' -exec echo {} - | lame -V2 - v1.mp3; \mv v1.mp3 {} \; find . -iname '*.mp3' -exec echo {} - | lame -V2 v1.mp3\; find . -iname '*.mp3' -exec echo {} - | lame -V2 - v1.mp3\; find . -iname '*.mp3' -exec lame --decode {} \; find . -iname '*.mp3' -exec echo {} \; find . -iname '*.mp3' -exec lame --decode {} - | lame -V1 - V1.mp3; \mv V1.mp3 {} \; find . -iname '*.mp3' -exec lame --decode {} - | lame -V1 - {}"_V1.mp3"; \mv {}"_V1.mp3" {} \; find . -iname '*.mp3' -exec echo {} \; for D in `find . -type d`; do echo "$D"; for f in "$D"/*.mp3; do echo "$f" ; done; done