ffmpeg audio

В этой статье приведены примеры работы с 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 или Вы не нашли ответа на свой вопрос по данной теме, то задавайте эти вопросы в комментариях под этой статьей - постараюсь на них ответить максимально быстро.

8 отзывов на “ffmpeg audio

    1. AnyKey

      Автор записи

      Насколько я знаю - можно.
      Но сам для этой цели использую утилиту sox

      sox input.wav output.wav pitch shift
  1. Игорь

    Добрый день.
    Как перекодировать только аудиодорожку не трогая видеоряд из чего-то иного в mp3?
    Ну и как перекодить видео другим кодеком не трогая аудио?
    Спасибо.

    1. 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

  2. Алексей

    Хочу узнать, можно ли таким образом разделить файл ac3 из фильма на отдельные составляющие его потоки. Звук 6-канальный. Известны ли вам подобные примеры?

    1. AnyKey

      Автор записи

      Пишут, что вот так:

      ffmpeg -i INPUT.MKV
             -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR];
                              [FL]aformat=channel_layouts=mono[FL];
                              [FR]aformat=channel_layouts=mono[FR];
                              [FC]aformat=channel_layouts=mono[FC];
                              [LFE]aformat=channel_layouts=mono[LFE];
                              [BL]aformat=channel_layouts=mono[BL];
                              [BR]aformat=channel_layouts=mono[BR]"
             -map 0:v -map '[FL]' -map '[FR]' -map '[FC]' -map '[LFE]' -map '[BL]' -map '[BR]'
             -vcodec copy -acodec aac -movflags faststart OUTPUT.MP4

      Но сам я не пробовал такое делать, поэтому за результат не ручаюсь.

  3. Алексей

    Добрый день. У меня возникла проблема, при обрезании аудио в формате flac. При обрезке аудио следующей командой: - i file.flac -acodec -ss 0 -t 35 output_file.flac
    файл обрезается, однако, его длительность указывается полной, как будто файл не обрезан. С форматом mp3 всё работает как положено. Может быть Вы сможете мне помочь.

    1. AnyKey

      Автор записи

      Добрый день, Алексей.
      Сначала необходимо конвертировать flac в wav, как указано в статье выше, затем из wav вырезать необходимый фрагмент.

Добавить комментарий для Алексей Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *