Guidelines for high quality lossy audio encoding: https://trac.ffmpeg.org/wiki/Encode/HighQualityAudio
===== Кодировщики =====
[[http://lamexp.sourceforge.net/|LameXP]] is a free multi-format audio file converter that supports a variety of output formats, including MP3, AAC/MP4, Ogg Vorbis, Opus as well as FLAC, and that can read a multitude of input formats. It also supports multi-threaded batch processing.
[[https://github.com/nu774/qaac/releases|Apple AAC encoder]] (QAAC) - CLI QuickTime AAC/ALAC encoder.
[[http://www.rarewares.org/index.php|Rarewares]] - all the latest media utilities.
===== Аудиоредакторы =====
[[http://www.wavosaur.com/|Wavosaur]] is a cool free sound editor, audio editor, wav editor software for editing, processing and recording sounds, wav and mp3 files. Wavosaur has all the features to edit audio (cut, copy, paste, etc.) produce music loops, analyze, record, batch convert.
[[http://www.audacityteam.org/|Audacity]] is free, open source, cross-platform audio software for multi-track recording and editing.
===== youtube-dl/yt-dlp =====
$url = Read-Host "Введите ссылку на музыкальный альбом или трек"
$music = Read-Host "Введите каталог для сохранения (по умолчанию - папка Музыка)"
$mp3 = Read-Host "Для перекодировки в mp3 нажмите 1 (по умолчанию - opus)"
if (!($music)) {$music = "~\Music"}
cd $music
if ($url -match "youtube" -and $mp3 -eq 1) {
& yt-dlp.exe '-o' '%(playlist_title)s/%(playlist_index)s %(title)s.%(ext)s' $url -f bestaudio -x --audio-format mp3 --audio-quality 0
}
elseif ($url -match "youtube" -and $mp3 -ne 1) {
& yt-dlp.exe '-o' '%(playlist_title)s/%(playlist_index)s %(title)s.%(ext)s' $url -f bestaudio --remux-video opus
}
else {
& yt-dlp.exe '-o' '%(playlist_title)s/%(playlist_index)s %(title)s.%(ext)s' $url -f bestaudio
}
$folder = dir $music |sort CreationTime |select -Last 1 -expand fullname
$folder |? extension -ne '.m3u' |select -expand name |Out-File "$folder\playlist.m3u" -Encoding UTF8
# youtube-dl docs:
# https://github.com/ytdl-org/youtube-dl/blob/master/README.md
# Скачать лучшее аудио из аудиоформатов (очищенная ссылка из буфера)
cd $env:userprofile\Music
& yt-dlp.exe ((Get-Clipboard) -replace '\&.*') -f bestaudio -S acodec
===== ffmpeg =====
cd "~\Downloads\Christmas Jazz"
# opus 128k
dir *.flac |% {& ffmpeg -i $_.fullname -b:a 128k "$($_.basename).opus"}
# opus речь для стриминга (VBR выключен, оптимизация для VOIP, битрейт 16к, частота 16к, моно)
dir *.wav |% {& ffmpeg -i $_.fullname -vbr off -application voip -b:a 16k -ac 1 -ar 16000 "$($_.basename).opus"}
# opus речь, нормализация, минимальный битрейт
cd ~\Music
ffmpeg.exe -i 'file.webm' -af speechnorm=e=12.5:r=0.0001:l=1 -ac 1 -b:a 20k 'file.opus'
# flac, макс. сжатие (есть значения до 12, но их использовать не рекомендуется)
$outDir = mkdir ".\out"
dir *.flac |% {& ffmpeg -i $_.fullname -compression_level 8 "$($outDir.fullname)\$($_.basename).flac" -y}
==== Вырезать тишину из файла ====
Вырезать тишину из речи для более компактного файла и сокращения хронометража (как делают на радио).
# stop_periods: To remove silence from the middle of a file, specify a stop_periods that is negative.
# stop_duration: Specify a duration of silence that must exist before audio is not copied any more. By specifying a higher duration, silence that is wanted can be left in the audio. Default value is 0.
# stop_threshold: This is the same as 'start_threshold' but for trimming silence from the end of audio. Can be specified in dB (in case "dB" is appended to the specified value) or amplitude ratio. Default value is 0.
& ffplay -i "D:\temp\how-to-live.webm" -af silenceremove=stop_periods=-1:stop_duration=0.1:stop_threshold=-25dB "D:\temp\how-to-live.mp3" -y
==== Скачать альбом с Яндекс-Музыки (археологическая ценность) ====
++++ Yandex-music-dl.ps1 |
# Скачать альбом с Яндекс-Музыки, положить его в папку с именем альбома в каталоге "Музыка" в профиле,
# назвать треки по типу 01 Artist - Track.mp3, сгенерить плейлист m3u, скачать картинку альбома.
# В случае с треком - положить его в каталог "Музыка".
# Если youtube-dl отсутствует или старше 3 недель - скачать новый с сайта.
$url = Read-Host "Введите ссылку на альбом или трек Яндекс.Музыки"
$page = curl $url
$status = ($page).StatusDescription
$alname = ($page |select -expand Images).alt
$alname = "$alname".trim(" ")
$ytdl = "$env:LOCALAPPDATA\youtube-dl.exe"
$ytdlexist = Test-Path "$ytdl"
$ytdlnew = (get-date) - (Get-ItemProperty "$ytdl" |select -expand LastWriteTime) |select -expand days
if ((Test-Path "$ytdl") -eq $False -or $ytdlnew -gt 21) {Write-Host -fore Yellow "youtube-dl отсутствует или ему больше 3 недель, скачиваю с сайта..."
curl https://yt-dl.org/downloads/latest/youtube-dl.exe -OutFile "$ytdl"}
if ($status -ne 'OK' -or $url -notmatch 'music.yandex.ru/album') {write-host -fore Red "Нерабочая или неправильная ссылка, выход";sleep 2}
elseif ($url -match 'track') {
$trackid = $url.Split('/') |select -last 1
$trackname = $page |select -expand Links |? href -match "$trackid" |select -expand InnerText -First 1
write-host -fore Yellow "Скачиваем $trackname, верно?"
$yes = Read-Host "Нажмите цифру 1, чтобы продолжить"
Switch ($yes) {
1 {write-host -fore Green "Начинаем скачивание $trackname в папку Музыка"
cd $env:USERPROFILE\Music
& "$ytdl" '-o' '%(artist)s - %(track)s.%(ext)s' $url
}
Default {write-host -fore Yellow "Отмена, выход";sleep 2}
}}
else {
write-host -fore Green "Скачиваем альбом $alname, верно?"
$yes = Read-Host "Нажмите цифру 1, чтобы продолжить"
Switch ($yes) {
1 {write-host -fore Green "Начинаем скачивание $alname в папку Музыка"
cd $env:USERPROFILE\Music
& "$ytdl" '-o' '%(playlist_title)s/%(playlist_index)s %(artist)s - %(track)s.%(ext)s' $url
$folder = dir |sort CreationTime |select -Last 1 -expand name
dir -file "$folder\*.mp3" |select -expand name |out-file "$folder\playlist.m3u" -Encoding UTF8
$pic = ($page |select -expand images).src |select -First 1
$pic = $pic.Replace("200x200","orig")
$pic = 'https:' + "$pic"
curl $pic -OutFile "$folder\cover.jpg"
}
Default {write-host -fore Yellow "Отмена, выход";sleep 2}
}}
++++
===== Rubberband - изменение темпа =====
# Замедлить в 2,5 раза, использовать более качественный алгоритм (-3)
rubberband.exe -t 2.5 -3 "..\file.wav" "..\file-2.5.wav"
Документация: https://breakfastquay.com/rubberband/usage.txt\\
Скачать: https://breakfastquay.com/rubberband/index.html
# В составе ffmpeg (если он скомпилирован с опцией --enable-librubberband)
& ffplay.exe '.\track.opus' -af rubberband=0.4
& ffmpeg.exe '.\track.opus' -af rubberband=0.4 '.\track-stretched.opus'
https://ffmpeg.org/ffmpeg-filters.html#rubberband
===== ffprobe =====
==== Подсчёт длительности всех файлов в папке ====
$durations = dir 'C:\Users\User\Downloads\audiofiles' |% {
(& ffprobe.exe $_.fullname -v quiet -show_entries format=duration)[1] -replace '.*='
}
New-TimeSpan -Seconds ($durations |measure -sum).sum
Days : 29
Hours : 2
Minutes : 34
Seconds : 19
Milliseconds : 0
Ticks : 25148590000000
TotalDays : 29,1071643518519
TotalHours : 698,571944444444
TotalMinutes : 41914,3166666667
TotalSeconds : 2514859
TotalMilliseconds : 2514859000
===== Прочее =====
[[https://www.xdlab.ru/|TagScanner]] - это мощный инструмент для организации и управления музыкальными архивами. Он умеет редактировать в пакетном режиме теги большинства современных аудио форматов, поддерживаются теги ID3v1 и ID3v2, Vorbis Comments, APEv2, WMA и MP4 (iTunes). Вы можете переименовывать файлы по информации из тэгов. Также программа позволяет сгенерировать тэг по имени файла/директории или произвести любые преобразования и замены текста в тэгах и именах файлов. Программа имеет широкие возможности для получения информации об альбоме и скачиванию обложек из онлайн баз, таких как freedb, Discogs или MusicBrainz. Вы можете создавать плейлисты в один клик, а также экспортировать вашу коллекцию в HTML, Excel или любой пользовательский формат. Программа в большинстве случаев значительно облегчает жизнь, когда требуется привести в порядок свой музыкальный архив.
[[http://bestpractice.sourceforge.net/|BestPractice]] - An open-source audio time-stretching tool for Windows.
[[https://www.nirsoft.net/utils/volumouse.html|Volumouse]] - Control the sound volume with a wheel mouse.\\
[[https://github.com/krlvm/TrayVolumeControl|TrayVolumeControl]] - This project implements ability to scroll the volume icon from tray to regulate volume level from Windows 11. It is also possible to middle click on the volume icon to toggle Mute mode. This should work on Windows 7 and higher.