Команда ffmpeg преобразует часть видеофайла в аудиофайл

Команда ffmpeg преобразует часть видеофайла в аудиофайл

У меня есть видеофайл (продолжительностью 1 час). Мне нужно преобразовать любую часть видеофайла (30 мин) в аудиофайл

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vcodec copy -acodec copy /opt/b.mp4

затем я использовал

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -acodec copy /opt/b.mp4

Но я все равно могу просматривать видео вместе со звуком. Мне нужны только аудиофайлы

решение1

Если вам нужно только аудио (надеюсь, я правильно понял), то вам вообще не нужен первый шаг. Если вы используете:

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vn -acodec copy /opt/b.mp3

он это сделаетпредоставилисходный аудиокодек был mp3. Если нет, вы можете принудительно перекодировать:

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vn -acodec libmp3lame ...other_parameters.. /opt/b.mp3

Будут other_parametersиметь битрейты и т.д.

решение2

Есть два основных метода получить только видео или аудио из файла, который содержит и то, и другое. По умолчаниювыбор потокаповедение в ffmpeg будет выбирать один поток для каждого типа потока. Обратите внимание, что входы могут содержать несколько типов потоков: видео, аудио, субтитры и данные. Некоторые входы могут даже содержать несколько потоков каждого из этих типов; например, два видеопотока.


-vnили-an

Эти параметры сообщают ffmpeg о необходимости пропускать видео ( -vn) или аудио ( -an).

Чтобы исключить видео и скопировать аудио:

ffmpeg -i input -vn -codec:a copy output.mka

Чтобы удалить звук и скопировать видео:

ffmpeg -i input -an -codec:v copy output.mkv
  • Эти примеры будутпотоковое копированиежелаемый поток. Это означает, что ffmpeg просто повторно его мультиплексирует вместо перекодирования. Это очень быстро, и поскольку это по сути "копирование и вставка", это не повлияет на качество.

  • Использование -vnand -anне будет исключать другие потоки, которые могут присутствовать, такие как потоки субтитров или данных, но форматы, содержащие только аудио, в любом случае будут их игнорировать.


-map

The-mapопция может показаться более сложной, но она более гибкая и полезная. Например, -vnговорит ffmpeg опустить только видеопоток(и), но с помощьюспецификатор потока -mapможно указать ffmpeg пропустить все, кроме нужного потока.

Чтобы скопировать только видео:

ffmpeg -i input -map 0:v -codec copy output.mkv

Чтобы скопировать только аудио:

ffmpeg -i input -map 0:a -codec copy output.mka
  • Это 0:vспецификатор потока, сообщающий ffmpeg, что нужно включать только 0видеопотоки из первого ввода v. Это можно расширить. Использование 0:v:0означает first input:video:first video streamи будет полезно, если ваш ввод содержит несколько видеопотоков, а вам нужен только первый. Обратитесь к выводу консоли ffmpeg, чтобы узнать порядок потоков во вводе.

  • Вы также можете использовать отрицательные сопоставления. Использование -map 0 -map -0:a:1сопоставит все потоки, кроме второго аудиопотока. -map 0сообщает ffmpeg о необходимости включить все потоки из ввода 0(первый ввод), а -map -0:a:1затем сообщает ffmpeg о необходимости игнорировать первый аудиопоток из первого ввода.

решение3

Первая часть правильная. Во второй части извлекаем аудио только для файла b.mp4.

ffmpeg -i b.mp4 -vn -acodec copy audio_b.mp3

Связанный контент