У меня есть видео файл (продолжительность 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

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

3 ответа3

2

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

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 будет иметь битрейт и т.д.

1

Есть два основных способа получить только видео или аудио из файла, который содержит оба. По умолчанию поведение выбора потока в 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 просто перекодирует его вместо перекодирования. Это очень быстро, и поскольку это, по сути, "копирование и вставка", это не повлияет на качество.

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


-map

Опция -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 игнорировать первый аудиопоток с первого входа.

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .