В этой статье приведены примеры работы с audio в командной строке при помощи ffmpeg, shnsplit, mp3gain и других подобных утилит.
Предлагаю рассмотреть данную тему на примерах из жизни.
Вырезать понравившуюся мелодию из видео.
Шаг 1: смотрим, в каком формате хранится аудиодорожка в видео
ffmpeg -i 'video.mp4' 2>&1 | grep Audio | sed 's/Audio: \(.*\), start/\1/g'
Видим строку типа
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 281 kb/s (default)
которая говорит о том, что видео хранится в формате aac.
Иногда бывает, что в файле несколько аудиодорожек, тогда в выводе увидим что-то типа
Stream #0:1(rus): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Stream #0:2(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Шаг 2: вырезаем аудиодорожку в отдельный файл.
Если хотим вырезать дорожку без перекодирования
ffmpeg -i video.mp4 -vn -acodec copy audio.aac
Если в видео несколько аудиодорожек и мы хотим вырезать вторую, то слегка меняем вышеприведенную команду
ffmpeg -i video.mp4 -map 0:2 -vn -acodec copy audio.aac
Если хотим вырезать дорожку и сразу перекодировать ее в mp3
ffmpeg -i video.mp4 -vn -ar 44100 -ac 2 -ab 192K -f mp3 audio.mp3
Шаг 3: определяем продолжительность понравившейся мелодии и время ее начала.
Это можно сделать при помощи любого аудио- или видеоплейера. Не забудьте записать эти значения.
Шаг 4: непосредственно вырезание нужного отрезка без перекодирования.
ffmpeg -i audio.aac -ss 00:02:54 -t 300 -acodec copy output.aac
Эта команда вырежет участок длинной 300 секунд, начиная со второй минуты 54-ой секунды. Для любителей большой точности к секундам можно добавить тысячные доли секунды в формате 00:02:54.472.
Разделить flac на треки
Шаг 1: устанавливаем пакеты shntool и flac
Шаг 2: нарезаем flac на треки
shnsplit -f "abba.cue" -o flac -t "%n %t" "abba.flac"
Конвертируем flac в mp3
Если хотим конвертировать с постоянным битрейтом, то используем ключ -b:a и после него указываем необходимый битрейт. В данном примере 320 Кбит/сек.
ffmpeg -i "abba.flac" -b:a 320k "abba.mp3"
Если хотим конвертировать с переменным битрейтом, то используем ключ -q:a и после него указываем цифру от 0 до 9, где 0 - самое высокое качество (битрейт около 256 Кбит/сек), а 9 - самое низкое (битрейт около 64 Кбит/сек)
ffmpeg -i "abba.flac" -q:a 0 "abba.mp3"
Если хотим переконвертировать все flac в директории в mp3
for a in ./*.flac; do < /dev/null ffmpeg -i "$a" -q:a 0 "${a[@]/%flac/mp3}"; done
Конвертируем flac в wav
А тут еще проще - никаких ключей и параметров.
ffmpeg -i "abba.flac" "abba.wav"
Конвертируем mp3 в wav
ffmpeg -i "abba.mp3" "abba.wav"
Удалить тэги id3 из файла mp3
Посмотреть тэги id3 в файле sample.mp3
id3info sample.mp3
Удалить все тэги id3 из файла sample.mp3
id3convert -s sample.mp3
P.S. Если у Вас возникли какие-либо вопросы по работе с audio в ffmpeg или Вы не нашли ответа на свой вопрос по данной теме, то задавайте эти вопросы в комментариях под этой статьей - постараюсь на них ответить максимально быстро.
toyly_s
Здравствуйте. Кто нибудь знает как удалить вокал в песнях (точнее сделать минус песни) с помощью ffmpeg или другой утилитой , искал в инетах ничего интересного не нашёл.
AnyKey
Автор записиНасколько мне известно, в ffmpeg нет такой функции. Но вроде бы данная функция есть в Audacity.
Также есть онлайн-сервисы для решения данной проблемы.
Дмитрий
Доброго времени, можно ли как то изменить частоту звука
AnyKey
Автор записиНасколько я знаю - можно.
Но сам для этой цели использую утилиту sox
Игорь
Добрый день.
Как перекодировать только аудиодорожку не трогая видеоряд из чего-то иного в mp3?
Ну и как перекодить видео другим кодеком не трогая аудио?
Спасибо.
AnyKey
Автор записиПерекодировать только аудиодорожку не трогая видеоряд:
1) вырезаем аудиодорожку и перекодируем ее в необходимый формат, как написано в этой статье
2) удаляем из видеофайла аудиорожку - https://any-key.net/ffmpeg-video/#remove-audio
3) добавляем новую аудиодорожку в видеофайл - https://any-key.net/ffmpeg-video/#add-audio
Перекодировать видео не трогая аудиоряд:
1) вырезаем аудиодорожку без перекодировки, как написано в этой статье
2) пережимаем видео с удалением аудиодорожки - https://any-key.net/ffmpeg-video/
3) добавляем прежнюю аудиодорожку в новый видеофайл - https://any-key.net/ffmpeg-video/#add-audio
Алексей
Хочу узнать, можно ли таким образом разделить файл ac3 из фильма на отдельные составляющие его потоки. Звук 6-канальный. Известны ли вам подобные примеры?
AnyKey
Автор записиПишут, что вот так:
Но сам я не пробовал такое делать, поэтому за результат не ручаюсь.
Алексей
Добрый день. У меня возникла проблема, при обрезании аудио в формате flac. При обрезке аудио следующей командой: - i file.flac -acodec -ss 0 -t 35 output_file.flac
файл обрезается, однако, его длительность указывается полной, как будто файл не обрезан. С форматом mp3 всё работает как положено. Может быть Вы сможете мне помочь.
AnyKey
Автор записиДобрый день, Алексей.
Сначала необходимо конвертировать flac в wav, как указано в статье выше, затем из wav вырезать необходимый фрагмент.