Ffmpeg для извлечения аудио из видео

Я попробовал следующую команду для извлечения звука из видео:
ffmpeg -i Sample.avi -vn -ar 44100 -ac 2 -ab 192k -f mp3 Sample.mp3

но я получаю вывод как

libavutil     50.15. 1 / 50.15. 1
libavcodec    52.72. 2 / 52.72. 2
libavformat   52.64. 2 / 52.64. 2
libavdevice   52. 2. 0 / 52. 2. 0
libavfilter    1.19. 0 /  1.19. 0
libswscale     0.11. 0 /  0.11. 0
libpostproc   51. 2. 0 / 51. 2. 0
SamplE.avi: Invalid data found when processing input

Может ли кто-нибудь помочь, пожалуйста?

Ответ 1

Чтобы извлечь аудиопоток без повторного кодирования:

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
  • -vn нет видео.
  • -acodec copy говорит, что тот же аудиопоток, который уже есть.

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

Ответ 2

Для кодирования высококачественного MP3 из лучшего AVI- файла -q: a для переменной скорости передачи:

ffmpeg -i sample.avi -q:a 0 -map a sample.mp3

Если вы хотите извлечь часть аудио из видео, используйте параметр -ss, чтобы указать начальную временную метку, а параметр -t указывать длительность кодирования, например, от 3 минут до 5 секунд в течение 45 секунд:

ffmpeg -i sample.avi -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a sample.mp3
  • Временные метки должны быть в формате HH: MM: SS.xxx или в секундах.

  • Если вы не укажете опцию -t, она будет идти до конца.

Ответ 3

Командная строка верна и работает с допустимым видеофайлом. Я бы удостоверился, что вы установили правильную библиотеку для работы с mp3, установите lame o probe с другим аудиокодеком.

Обычно

ffmpeg -formats

или

ffmpeg -codecs

предоставит достаточную информацию, чтобы вы знали больше.

Ответ 4

ffmpeg -i sample.avi предоставит вам информацию о формате аудио/видео для вашего файла. Убедитесь, что у вас есть соответствующие библиотеки, настроенные для синтаксического анализа входных потоков. Также убедитесь, что файл не поврежден.

Ответ 5

Чтобы кодировать mp3-аудио, ffmpeg.org показывает следующий пример:

ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3

Я извлек аудио из видео, просто заменив input.wav на видеофайлы. 2 означает 190 кб/с. Вы можете увидеть другие уровни качества по моей ссылке выше.

Ответ 6

Просто догадаться:

-ab 192

должен быть

-ab 192k

Похоже, это может быть проблемой, но, возможно, ffmpeg достаточно умен, чтобы исправить это.

Ответ 7

Если аудио, заключенное в avi, не является mp3-форматом, вам может потребоваться указать -acodec mp3 в качестве дополнительного параметра. Или независимо от вашего mp3-кодека (в Linux-системах его, вероятно, -acodec libmp3lame). Вы также можете получить тот же эффект, платформо-агностик, указав -f mp3 "форсировать" формат в mp3, хотя не все версии ffmpeg все еще поддерживают этот переключатель. Ваш пробег может варьироваться.

Ответ 8

Используйте -b:a вместо -ab, поскольку -ab устарел сейчас. Убедитесь, что ваш путь к исходному файлу верен.

Чтобы извлечь аудио из видео, я использовал команду ниже и ее работу отлично.

String[] complexCommand = {"-y", "-i", inputFileAbsolutePath, "-vn", "-ar", "44100", "-ac", "2", "-b:a", "256k", "-f", "mp3", outputFileAbsolutePath};

Здесь

-y

Перезаписать выходные файлы без запроса.

-i

ffmpeg читает с произвольного количества входных "файлов", указанных опцией -i

-vn

Отключить запись видео

-ar

устанавливает частоту дискретизации для аудиопотоков, если кодируется

-ac

Установите количество аудиоканалов.

-b: а

Установите битрейт аудио

-f

Формат

Отметьте this для моего полного проекта ffmpeg андроида на github.

Ответ 9

Чтобы извлечь без преобразования, я использую запись в контекстном меню - как пользовательское действие менеджера файлов в Linux - для запуска следующего (после проверки того, какой тип аудио содержит видео, например, для видео, содержащего звук ogg):

bash -c 'ffmpeg -i "$0" -map 0:a -c:a copy "${0%%.*}".ogg' %f 

который основан на команде ffmpeg ffmpeg -i INPUT -map 0:a -c:a copy OUTPUT.

Я использовал -map 0:1 в этом без проблем, но, как сказано в комментарии от @LordNeckbeard, "Stream 0:1 не всегда будет звуковым. Использование -map 0:a вместо -map 0:1 избежит двусмысленности ".

Ответ 10

Вот что я только что использовал:

ffmpeg -i my.mkv -map 0:3 -vn -b:a 320k my.mp3

Варианты объяснения:

  • my.mkv - исходный видеофайл, вы можете использовать и другие форматы
  • -map 0:3 означает, что я хочу третий поток из видеофайла. Поместите туда N - видеофайлы часто имеют несколько аудиопотоков; Вы можете опустить его или использовать -map 0:a чтобы взять аудиопоток по умолчанию. Запустите ffprobe my.mkv чтобы увидеть, какие потоки есть в видеофайле.
  • my.mp3 является целевым именем файла аудио, и ffmpeg выясняет, что я хочу MP3 от его расширения. В моем случае исходный аудиопоток - AC3 DTS, и просто копирование было не тем, что я хотел
  • 320k - желаемый целевой битрейт
  • -vn означает, что я не хочу видео в целевом файле

Ответ 11

Вот что я только что использовал:

ffmpeg -i input.mkv -ss 01:06:57 -to 01:21:07 -c:v copy -c:a copy output.mp4

Ссылка: https://www.arj.no/2018/05/18/trimvideo/

Ответ 12

Для людей, которые ищут более простой способ извлечения аудио из видеофайла при сохранении исходных параметров видеофайла, вы можете использовать:

ffmpeg -i <video_file_name.extension> <audio_file_name.extension>

Например, запуск:

ffmpeg -i screencap.mov screencap.mp3

извлекает mp3 аудиофайл из видео файла mov.