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
.