Если ты тоже, как и я, любишь возиться с аудио файликами, слушать, записывать, конвертировать и т.д., то эта статья для тебя.  Здесь я расскажу, как можно легко выполнять различные действия с аудио из командной строки, причём делать это одинаково удобно и эффективно и на Линуксах, и на Винде.  Для этого мы будем использовать программу fmedia.  Она кросс-платформенная и портативная, быстрая и не требует ничего лишнего - в общем, в самый раз для тех людей, кто одержим идеей разумной минималистичности и экономии ресурсов. В чём в принципе бонус интерфейса командной строки перед графическим? Во-первых, все процессы легко автоматизируются.  Мы можем создать скриптик, который одним махом сконвертирует все аудио файлы в директории, или выведет список всех мета тэгов, или выполнит любую другую задачу с большим количеством файлов. Во-вторых, любую команду можно исполнять на удалённой машине, подключённой по SSH, например. К тому же, такие программы, как правило, гораздо менее требовательны к ресурсам компьютера, а это очень важно когда у нас есть только лишь старенький ноутбук.  Или когда мы слушаем музыку на ноуте, работающем на батарее, и требуется продлить его время работы.  Например, я на своём ноуте с Федорой могу хоть целый день слушать музыку на батарее через fmedia - реально надолго хватает заряда, главное - погасить экран. Нет никаких ограничений на максимальное количество файлов в активном плэйлисте.  Можно играть плэйлист с тысячей трэков, можно с миллионом - на скорость работы это никак не влияет. К слову, у fmedia всё таки есть графический интерфейс, но он опциональный, т.е. ты всегда сам решаешь, использовать графический интерфейс или же только командную строку. Содержание: Устанавливаем программу Правила работы в терминале Записываем аудио  Записываем с другим форматом звука Записываем с другого устройства Записываем то, что сейчас воспроизводится на Винде Записываем и останавливаем запись автоматически Записываем в stdout Записываем через асинхронный процесс Автоматические имена выходных файлов Записываем Интернет-радио поток Записываем Интернет-радио трэки Воспроизводим аудио  Воспроизводим через другое устройство Конвертируем аудио файлы  Конвертируем с параметрами звука Конвертируем с параметрами кодека Конвертируем и задаём тэги Делим один большой файл на маленькие Дополнительные функции Итоги Заходим на официальный сайт fmedia и скачиваем архив с программой для Винды или Линукса.  Распаковываем архив в любую директорию на диске или на флэшке, и fmedia готов к работе.  Дополнительно ничего скачивать и устанавливать больше не надо - это очень удобно. Eсть вариант и сбилдить fmedia самостоятельно.  Для этого надо зайти на ГитХаб страницу проекта, почитать Ридми файл и повторить соответствующие шаги для сборки проекта мэйкфайлом. Вообще, это не обязательно, но чтобы нам максимально удобно было вызывать бинарник fmedia, мы можем зарегистрировать его в системе.  Запускаем cmd.exe и выполняем такую команду: Естественно, вместо D:\ у тебя здесь будет директория, куда ты только что распаковал архив.  Эта команда делает 2 вещи: Добавляет путь D:\fmedia в %PATH%. Создаёт ярлык на рабочем столе к fmedia-gui.exe (это GUI к fmedia, но про него мы здесь говорить не будем). Отлично, теперь мы можем из любой директории в консоли просто выполнять команды через fmedia. На Линуксе команда --install не работает, поэтому мы можем вручную создать ссылку на бинарник: Это если мы распаковали архив в ~/bin.  Результат тот же, что и на Винде: теперь мы можем выполнять команды в консоли через fmedia. Обычно ничего настраивать не надо - всё и так должно работать.  По умолчанию на Винде используется WASAPI аудио подсистема, а на Линуксе - PulseAudio и ALSA.  Все настройки лежат в файле fmedia.conf, fmedia его читает при запуске, поэтому если ты меняешь конфиг, то надо перезапустить fmedia.  Все поддерживаемые аргументы командной строки можно посмотреть, если запустить fmedia -h. Имей в виду, что у fmedia немало настроек и параметров командной строки.  Всего очень много различных вариантов использования, рассказать про которые не хватит времени и места.  Я в этой статье привожу лишь самое полезное на мой взгляд. Все приведённые в статье команды почти идентичны и на Линуксе и на Винде, но с одной лишь оговоркой.  Терминалы на этих ОС всё же разные, поэтому если мы хотим использовать пробелы в командах или специальные символы, мы должны помнить что: На Линуксе (в sh или bash) надо использовать одинарные кавычки (''), например: А на Винде (в cmd.exe) - двойные кавычки (""), например: В этой статье я привожу все команды с одинарными кавычками, т.к. я обычно на Линуксе работаю. Обычно записывать звук через fmedia очень легко, нужно лишь указать ключик --record и имя выходного файла: Тут мы начинаем записывать со звукового устройства по умолчанию в файл rec.flac в формате FLAC.  Чтобы писать в другой формат файла, просто задай желаемое расширение: .wav, .flac, .m4a, .mp3, .ogg, .opus.  Например, вот как нужно записывать в AAC-LC в MP4 контейнер: Для того, чтобы остановить запись, нажимаем клавишу s (что соответствует команде Stop) или Ctrl+C. Пример запуска: Если никаких параметров не указано, по умолчанию мы используем формат звука int16/44100Hz/stereo (так указано в конфиге - мы можем это изменить, при необходимости).  Вот как мы можем задать другой формат: Здесь мы пишем звук в формате int24/48000Hz/mono в .wav файл. Если у нас несколько устройств звукозаписи, то вот как мы можем записывать именно с того устройства, с которого хотим.  Первое - получаем список всех доступных устройств: Далее, выбираем номер нужного нам устройства из секции Capture:, например #2, и пишем звук с него: На Винде у WASAPI есть крутая возможность вести запись "изнутри" (Loopback режим).  Т.е. то, что любая другая программа на Винде на данный момент играет через колонки - мы это можем считать и записать в файл.  Удобно для записи звука из браузера, или из игры, или из чего угодно.  Активируется эта фича через ключ --dev-loopback: Здесь мы записываем из устройства по умолчанию.  Если вдруг хотим использовать другое устройство, опять вначале листим все устройства: И выбираем нужное устройство из секции Playback/Loopback:.  Например, используем устройство #2: Вообще, WASAPI не выдаёт пользовательским программам никаких данных в Loopback режиме, если никто в системе ничего не воспроизводит.  Но fmedia автоматически заполняет это пространство тишиной. А вот более сложный пример, тут мы записываем одновременно 2 разных файла, один поток - из микрофона, второй - из браузера, используя устройство записи #1 и устройство воспроизведения #2: Что такое $counter - это переменная для автоматического именования файлов.  Суть в том что fmedia создаст 2 файла - rec-1.wav и rec-2.wav. Когда мы хотим писать звук в файл строго определённое количество времени, мы используем параметр --until.  Например, пишем 60 секунд, затем останавливаемся автоматически: До истечения этого времени тоже можно нажать s, чтобы прервать запись раньше, но это теперь не обязательно. Бывает полезно использовать fmedia для записи аудио, а затем сразу передавать записанные данные в другую программу.  Для этого есть возможность записи в stdout поток.  Активируем эту фичу, передавая -o @stdout.wav параметр.  Например, записываем в .wav файл из stdout потока: Или передаём данные напрямую в другой процесс: Есть возможность управлять запущенным процессом записи асинхронно, т.е. из другого терминала.  Работает это следующим образом.  Вначале запускается основной fmedia процесс, который начинает записывать звук.  Он создаёт системный канал (pipe), из которого он может принимать команды от других процессов.  Затем, в любой момент мы можем послать команду остановки записи, запустив новый процесс fmedia.  После принятия этой команды, первый процесс завершит запись и закроется. Приказываем fmedia записывать звук и слушать команды от других процессов через: В любой момент из другого терминала мы можем остановить звукозапись: Почему нельзя просто взять и убить первый процесс fmedia, который записывает в файл?  У большинства аудио файлов есть мета информация, например количество сэмплов аудио (т.е. длительность аудио).  Если процесс взять и убить, то мы не дадим возможности fmedia правильно сохранить эту мета информацию, из-за чего файлы могут оказаться нечитабельными из обычных программ-плееров. Чтобы не придумывать и не писать каждый раз имена для выходных файлов, просто будем именовать их автоматически, по текущему системному времени: Обычно Интернет-радио используют протокол ICY, внутри которого гоняют обычный MPEG1 Layer3.  Запишем этот поток себе в файл без декодирования (без потери качества): Здесь ключ --stream-copy говорит о том, что мы НЕ хотим конвертировать аудио, а просто скидывать MP3-фреймы как есть.  Мы сможем сохранить понравившуюся песню, или нам нужно на время отлучиться от компа, а онлайн трансляция очень важная - мы её сохраним и позже послушаем. То же самое, но одновременно воспроизводить радио поток через колонки: Т.е. мы будем слушать радио, но в то же время сохранять все фреймы в файл. В протоколе ICY предусмотрена простенькая возможность прокидывать мета информацию о названии трэка и исполнителя.  Некоторые сервера устанавливают мета данные, а мы можем использовать эту информацию для автоматического дробления потока на файлы с правильными именами.  Эта команда будет создавать по одному файлу на каждый трэк, именуя это так: Время. Исполнитель - Название.mp3: А вот так мы можем записывать не каждый трэк, а только те, которые нам понравились: Пока играет трэк, мы можем нажать Shift+t комбинацию, и этот трэк сохранится на диске. Я не юрист, но вроде бы обычно трансляции не разрешают слушателям сохранять поток и использовать его как захочется.  Весь мир свихнулся на авторских правах, роялти и всякой другой современной капиталистической дряни...  Поэтому, если сохраняешь поток с радио, то слушать можно только самому дома и нигде не транслировать. Слушать музыку через fmedia очень просто.  Указываем входные файлы, которые мы хотим играть, один за другим.  Например, воспроизводим отдельные файлики, или группы файлов: На текущий момент поддерживаются следующие контейнеры и кодеки: .mp3, .ogg (Vorbis/Opus), .opus, .mp4/.m4a/.mov (AAC/ALAC/MPEG), .mka/.mkv/.webm (AAC/ALAC/MPEG/Vorbis/Opus/PCM), .caf (AAC/ALAC/PCM), .avi (AAC/MPEG/PCM), .aac, .mpc, .flac, .ape, .wv, .wav.  А также плейлисты: .m3u, .pls, .cue. Воспроизводим все файлы внутри директории: Воспроизводим Интернет-радио: Воспроизводим аудио из stdin потока: Пример использования: Если хотим, чтобы игралось не через устройство по умолчанию, а через другое устройство, то аналогично со звукозаписью, вначале получаем список устройств: Затем указываем номер устройства, через которое хотим воспроизводить, например устройство #2: Конвертация выглядит достаточно просто: на вход подаём список файлов, которые хотим конвертировать.  По желанию, указываем настройки для аудио кодека.  По умолчанию, используются настройки кодеков из fmedia.conf.  И наконец, указываем выходной аудио формат для новых файлов.  Например, конвертируем WAVE в MP3: Можем не писать имя выходного файла, а генерировать его автоматически: $filename - автоматически использовать имя (без расширения) входного файла. Сконвертируем все WAVE файлы в текущей директории в OGG Vorbis: То же самое, но кладём выходные файлы внутрь новой директории: Сконвертируем все файлы из списка внутри Music.m3u8: $filepath - автоматически подставлять полный путь до входного файла. Конвертируем в WAVE, используя int16 формат сэмпла (вместо float32, который использует Vorbis декодер): Конвертируем в int16/48000Hz/stereo: Учти, что не все конфигурации конвертации поддерживаются, например не работает конвертация с форматом сэмпла int24 вместе с конвертацией sample rate.  Тут проблема в том, что библиотека libsoxr, использующаяся для конвертации сэмпл рэйта, int24 не поддерживает, а fmedia не умеет это ограничение обходить. Можно увеличить громкость на +6 dB, если запись слишком тихая: Или уменьшить громкость на -6 dB: Можно применить динамический фильтр, уравнивающий громкость по алгоритму Гаусса: Кстати, у этого фильтра немало настроек - задать их можно в fmedia.conf.  И кстати, автор этого фильтра (Dynamic Audio Normalizer) вроде бы тоже немец, как и величайший математик Карл Гаусс. Почти у каждого кодека есть параметры, которые мы можем задавать через командную строку. Так для Vorbis задаём качество VBR 7 (что примерно соответствует 200kbit/s): Так для Opus задаём качество VBR 256kbit/sec: Так для MPEG Layer3 задаём качество CBR 256kbit/sec: Так для MPEG Layer3 задаём качество VBR q=2: Так для AAC-LC задаём качество VBR q=5 (что примерно соответствует 210kbit/s): fmedia использует официальные опен-сорс аудио энкодеры, это библиотеки libfdk-aac, libFLAC, libmp3lame, libopus, libvorbisenc.  Так что скорость конвертации полностью зависит от них. Можно конвертировать и заодно изменить мета тэги, например зададим тэги "Исполнитель" и "Название": Остальные тэги при этом сохранятся.  А вот как сделать так, чтобы все оригинальные тэги стереть: Т.е. мы тут добавили clear; в начало команды --meta. Отрежем начальные 35 секунд у файла, сохранив всё остальное: Сохраним первые 01:35, удалив всё остальное: Вырежем кусок от 00:35 до 01:35: Чтобы разделить один большой файл (например, альбом) на трэки, воспользуемся .cue файлом: Если нужно сохранить только выборочные трэки, то делаем например так: Т.е. через запятую с параметром --track указываем какие трэки хотим сконвертировать.  Кстати, у fmedia есть и настройка, чтобы контролировать прегапы в трэках в .cue файлах, это ключ --cue-gaps.  По умолчанию прегапы добавляются в конец предыдущих трэков. Можно поделить файл на равномерные по длительности куски, например делим большой файл на файлики по минуте каждый: Для некоторых кодеков есть возможность вырезать куски аудио без потери качества, например для .mp3, .ogg и .m4a.  Для этого добавляем ключ --stream-copy к команде, например: Просто распечатать мета информацию из файла (например длительность, битрейт и название кодека): То же, но ещё распечатать все мета тэги: Иногда бывает полезно проанализировать все сэмплы в файле.  Делаем это с ключом --pcm-peaks: Пример использования: Можно сгенерировать чексумму аудио данных - это бывает полезно, чтобы убедиться в оригинальном качестве после конвертации: Ну и в качестве бонуса, вот как можно быстро сгенерировать M3U плэйлист из директории: Теперь ты знаешь как минимум ещё один способ как сделать что-то полезное с аудио контентом.  Понятно, что какие-то из приведённых здесь советов легко заменяются скриптами и командами для великого ffmpeg, но лично для меня fmedia во многом удобнее.  (ffmpeg очень силён, когда дело касается видео файлов, но эта статья именно про аудио).  В целом, под любую команду можно создать какой-нибудь алиас, чтобы ещё проще было запускать конвертацию или запись из командной строки.  Например, для bash на Линуксах можно добавить в ~/.bashrc: А для Винды можно скрипт файл создать, например rec.cmd: Но ты это наверняка уже и так понимаешь, так что на этом я заканчиваю эту статью.  Надеюсь, хоть что-то да было тебе полезно.  Developer