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