diff --git a/encode_all b/encode_all new file mode 100755 index 0000000..0a141aa --- /dev/null +++ b/encode_all @@ -0,0 +1,55 @@ +#!/bin/bash +# encode_all encodes the whole library into specified format +# +. env_parallel.bash + +src_library="${HOME}/flac" +output_dir="${HOME}/opus" + +function encode() { + file="$1" + + # file is full original path + filename + src_dir="$(dirname "$file")" + file_name="$(basename "$file")" + final_dir="$(sed "s_${HOME}/flac_${HOME}/opus_" <<< "$src_dir")" + final_opus="$(sed -e 's/\.flac$/.opus/' -e "s_${HOME}/flac_${HOME}/opus_" <<< "$file")" + unset tags + unset dest_dir + + declare -A tags + while read -r line; do + tag_type="$(cut -d= -f1 <<< "$line")" + tag_type="${tag_type^^}" + tag_val="$(cut -d= -f2- <<< "$line")" + tags["$tag_type"]="$tag_val" + done < <(metaflac --list --block-type=VORBIS_COMMENT "$file" | grep 'comment\[' | cut -d: -f2- | sed 's/^ //') + album="$(basename "$final_dir")" + if [[ "$file_name" =~ ^D[0-9]+ ]]; then + disk="$(cut -d\ -f1 <<< "$file_name")" + tags[DISK]="${disk#D}" + fi + declare -a tag_ensure + tag_ensure=( TRACKNUMBER TITLE DATE ALBUM ARTIST ) + for tag_type in "${tag_ensure[@]}"; do + if [[ -z "${tags[$tag_type]}" ]]; then + tags[$tag_type]="missing $tag_type" + fi + done + + [[ -d "$final_dir" ]] || mkdir -p "$final_dir" + if [[ -n "${tags[DISK]}" ]]; then + opusenc \ + --title "${tags[TITLE]}" --artist "${tags[ARTIST]}" \ + --album "${tags[ALBUM]}" --tracknumber "${tags[TRACKNUMBER]}" \ + --date "${tags[DATE]}" --comment "DISK=${tags[DISK]}" "$file" "$final_opus" + else + opusenc \ + --title "${tags[TITLE]}" --artist "${tags[ARTIST]}" \ + --album "${tags[ALBUM]}" --tracknumber "${tags[TRACKNUMBER]}" \ + --date "${tags[DATE]}" "$file" "$final_opus" + fi + +} + +time find "$src_library" -type f -name '*.flac' -print0 | env_parallel -P 0 -0 --bar encode {} diff --git a/split_tracks b/split_tracks index 0333b00..85913ec 100755 --- a/split_tracks +++ b/split_tracks @@ -90,16 +90,19 @@ find "$src_library" -type f -name '*.flac' | while read file; do declare -A tags echo tag time while read -r line; do - echo line: $line tag_type="$(cut -d= -f1 <<< "$line")" + tag_type="${tag_type^^}" tag_val="$(cut -d= -f2- <<< "$line")" - tags[$tag_type]="${tag_val^^}" + tags["$tag_type"]="$tag_val" done < <(metaflac --list --block-type=VORBIS_COMMENT "$file" | grep 'comment\[' | cut -d: -f2- | sed 's/^ //') - - - declare -a ensure - ensure=( TRACKNUMBER TITLE DATE ALBUM ARTIST ) - for tag_type in "${ensure[@]}"; do + album="$(basename "$final_dir")" + if [[ "$file_name" =~ ^D[0-9]+ ]]; then + disk="$(cut -d\ -f1 <<< "$file_name")" + tags[DISK]="${disk#D}" + fi + declare -a tag_ensure + tag_ensure=( TRACKNUMBER TITLE DATE ALBUM ARTIST ) + for tag_type in "${tag_ensure[@]}"; do if [[ -z "${tags[$tag_type]}" ]]; then tags[$tag_type]="missing $tag_type" fi