Skip to content

Downloading and converting audio from mixcloud

Нужно скачать и сконвертировать музыку с миксклауда, чтобы слушать её в магнитоле.

При помощи http://clouddownload.co.uk, или аналогичного сервиса - получаем ссылку на аудиофайл (можно хоть в браузерной консоли девелопера получить урл). Качаем его, он в формате M4A.

Конвертим m4a в mp3:

#!/bin/bash
mkdir -p ../tmp

for f in *.m4a
do 
        ffmpeg -i "$f" -vcodec copy -acodec libmp3lame -ab 256k ../tmp/"${f%.m4a}.mp3"
done

Но у меня простецкая китайская магнитола, которая не умеет перематывать треки. А пока она не сломалась - новую я покупать не собираюсь :-)

Для того чтобы с этим как-то жить, при том что миксы которые мне нужны - имеют длительность около часа, - можно нарезать сконвертированные mp3'шки на части вот таким скриптом, взятым вот тут и немного доработанным:

#!/bin/bash

if [ -z "$1" -o -z "$2" ]
  then
    echo "Usage: ${0##*/} [src] [name] [part size in minutes]"
    exit 0
fi

big="$1"
name="$2"
size="$3"

path="../converted"

if [ -z ${size} ]
then
        size="5"
fi

mkdir -p "${path}/${name}"
duration_stamp=$(ffmpeg -i "$big" 2>&1 | grep Duration | sed 's/^.*Duration: *\([^ ,]*\),.*/\1/g')
title=$(ffmpeg -i "$big" 2>&1  | grep "title *:" | sed 's/^.*title *: *\(.*\)/\1/g')
# get minutes as a raw integer number (rounded up)
prefix=$(basename "$big" .mp3)
echo $duration_stamp
mins=$(echo "$duration_stamp" | sed 's/\([0-9]*\):\([0-9]*\):\([0-9]*\)\.\([0-9]*\)/\1*60+\2+\3\/60+\4\/60\/100/g' | bc -l | python -c "import math; print int(math.ceil(float(raw_input())))")
ss="0"
count="1"
total_count=$(echo "$mins/${size}+1" | bc)
while [ "$ss" -lt "$mins" ]
do
  zcount=$(printf "%05d" $count)
  ss_hours=$(echo "$ss/60" | bc)
  ss_mins=$(echo "$ss%60" | bc)
  ss_stamp=$(printf "%02d:%02d:00" $ss_hours $ss_mins)
  ffmpeg -i "$big" -acodec copy -t 00:${size}:00 -ss $ss_stamp -metadata track="$count/$total_count" -metadata title="$title $zcount" "${path}/${name}/${prefix}-${zcount}.mp3" 
  ss=$[$ss+${size}]
  count=$[$count+1]
done

 

Leave a Reply

Your email address will not be published. Required fields are marked *

π