Как создать спектрограмму многих звуковых файлов эффективно с Носками?

Различие находится главным образом в лицензии программного обеспечения, для многих это - важная вещь. Лицензия использовала для Linux и большей части программного обеспечения, которое работает на Linux, дает пользователю больше свободы. В то время как Windows очень ограничивается Microsoft и создал в функциях, которые пользователи не хотят или нуждаются.

Для получения дополнительной информации о свободе см.: http://www.fsf.org/

Windows 7 Google грешит для нахождения больше о том, что не так хорошо об окнах 7. (свяжите предел),

Проблема для геймеров состоит в том, что много игр сделаны работать на Windows только. Можно заставить их иногда работать в Linux, но с небольшим количеством работы (с вином). Также большинство этих этих игр не имеет этой бесплатной лицензии.

Вы видите мой ответ о выполнении 'игр Windows' в Linux в: http://www.linux.com/learn/answers/view/706-windows-games-on-linux (я - Aron),

Лицензия, используемая для Linux и большей части программного обеспечения Linux также, требует, чтобы программное обеспечение было открытым исходным кодом, таким образом, нет никаких секретов о том, что делает программное обеспечение или как это работает. Это, не требуется, чтобы быть бесплатным, но большую часть времени это.

Linux также распределяет программное обеспечение в репозиториях программного обеспечения, и это - основная функция, чтобы избежать, чтобы пользовательская загрузка руководства и установила вредоносное программное обеспечение от случайных сайтов онлайн. Также иметь 20 000 + программы, легкие доступный, является потрясающим.

4
04.05.2015, 00:19
3 ответа

Вы можете приложить команду в цикле:

for file in *.flac
do
    outfile="${file%.*}.png"
    sox "$file" -n spectrogram "$outfile"
done

, что и для именования файлов, страница SOX (1) Предлагаю, что вы можете явно назвать свой выходной файл в командной строке, чтобы вы могли использовать это в цикле.

Первая строка в цикле использует изменение параметра PASH , чтобы разделить расширение .flac из имени файла и добавить расширение .png .

4
27.01.2020, 20:49

Спасибо Джозефу за его ответ. Возможно, это работало во время его сообщения, но мне пришлось добавить -o сразу после spectrogram, чтобы sox принял команду.

for file in *.flac;do
    outfile="${file%.*}.png"
    sox "$file" -n spectrogram -o "$outfile"
done

Я буду складывать их все в отдельную папку для архивирования. It works!

Можно даже пойти немного дальше, добавив название файла над спектрограммой внутри изображения и сделав его немного шире, чтобы было видно больше деталей. Изображение по умолчанию немного маловато для меня.

for file in *.flac;do
    outfile="${file%.*}.png"
    title_in_pic="${file%.*}"
    sox "$file" -n spectrogram -t "$title_in_pic" -o "$outfile" -x 2000
done
5
27.01.2020, 20:49

вот мое решение "получить спектрограмму" для....

  • обрабатывать больше кодеков, таких как aac, opus
  • обрабатывать больше и контейнеры, такие как mp4, mkv, avi, m4a
  • нормализовать высоту спектрограммы до 24 кГц
  • построить только один канал = моно
  • нормализовать громкость
  • сохранить расширение входного файла для выходного файла
#!/bin/bash

# aspec.sh
# get spectrograms of audio streams
#
# usage: aspec.sh a.mp3 b.m4a c.mp4 d.mkv....
#
# dependencies: sox, ffmpeg
# license: public domain, warranty: none
# version: 2019-05-17 by milahu

ff_args="" # ffmpeg arguments
sx_args="" # sox arguments

ff_args+=" -loglevel error"

ff_astream=0 # only use first audio stream
ff_args+=" -map 0:a:${ff_astream}?"

ff_args+=" -ac 1" # use only one audio channel
sx_args+=" channels 1"

sx_args+=" gain -n -3" # normalize volume to -3dB

# set sampling rate
# only analyze frequencies below f_max = rate / 2
# also normalize spectrogram height to f_max
#sx_args+=" rate 6k"  # only show f <  3kHz "where the human auditory system is most sensitive"
sx_args+=" rate 48k" # only show f < 24kHz

# use wav as temporary format, if sox cant read file
ff_args+=" -c:a pcm_s16le -f wav"
sx_type="wav"

# process files from "argv"
for i in "$@"
do
    echo "$i"
    o="$i.sg.png" # output file
    t=$(basename "$i") # title above spectrogram
    c="spectrogram by SoX, the Sound eXchange tool" # comment below spectrogram

    # try to read original format
    echo analyze
    sox "$i" -n \
        $sx_args \
        spectrogram -o "$o" -c "$c" -t "$t" \
        2>&1 | grep -v "no handler for detected file type"

    if (( ${PIPESTATUS[0]} != 0 ))
    then
        # sox failed. convert audio and retry
        echo convert

        # get duration of stream or container
        # spectrogram filter has no "ignore length" option
        # and without a "duration prediction" will only read 8 seconds
        d=$(ffprobe "$i" -v error -of compact=s=_ \
            -select_streams "0:a:${ff_astream}?" \
            -show_entries stream=duration:format=duration \
            | sort | grep -v =N/A \
            | tail -n 1 | cut -d= -f2)
        # 'tail -n 1' --> prefer stream duration
        # 'head -n 1' --> prefer container duration

        if [[ -z "$d" ]]
        then
            echo -e "skip. duration not found FIXME\n"
            continue
        fi

        # bash "process substitution" magic
        sox \
            --type "$sx_type" \
            --ignore-length \
            <( ffmpeg -i "$i" $ff_args - ) \
            --null \
            $sx_args \
            spectrogram -d "$d" -o "$o" -c "$c" -t "$t"
    fi

    echo -e "done\n$o\n"
done
1
27.01.2020, 20:49

Теги

Похожие вопросы