Я хотел бы отключить видео для очень определенных разделов.

Например, для видео продолжительностью 3 минуты я хочу отключить звук 5-10 секунд и 33-36 секунд.

Сейчас,

Я знаю, как применить аудио фильтр.

ffmpeg -i input.mp4 -af "volume=enable='between(t,5,10)':volume=0, volume=enable='between(t,33,36)':volume=0" output.mp4

Но похоже, что ffmpeg пытается перекодировать все видео! Видео и аудио полностью перекодированы.

Мне нужно только приглушить определенные разделы, я хотел бы оставить все остальное таким же.

Есть ли быстрый способ запустить его?

Спасибо

1 ответ1

1

Здесь вам не хватает спецификации кодеков, которые вы хотите использовать для транскодирования аудио и видео потоков.

  • чтобы указать аудиокодек, используйте: -c: a
  • чтобы указать видеокодек, используйте: -c: v

Если вы хотите просто перемотать данные и не выполнять какое-либо транскодирование, вы можете использовать "copy" в качестве видео / аудио кодеков (то есть «-c:a copy», «-c:v copy»).

Однако невозможно "скопировать" видео или аудио потоки, когда ЛЮБЫЕ фильтры используются в этом потоке. Подумайте: если вы буквально делаете "копию" единиц и нулей, составляющих исходное аудио и видео, и создаете выходные данные с теми же единицами и нулями, вы ничего не можете изменить в данных. Фильтры изменяют фактические байты, составляющие данные, поэтому невозможно применить фильтр и одновременно "копировать" данные.

В вашем случае вы будете вынуждены перекодировать аудиопоток, потому что в этом потоке вы используете звуковой фильтр. Однако вы можете оставить видеопоток одним, используя аргумент "-c:v copy".

Для вашего аудиопотока, если вас интересует качество, вы можете указать несжатый аудиокодек, используя «-c:a pcm_s16le». Однако IIRC этот кодек не совместим с контейнером MP4.

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