Подтвердить что ты не робот

Как разделить видео или аудио с помощью бесшумных частей

Мне нужно автоматически разделить видео речи словами, поэтому каждое слово является отдельным видеофайлом. Знаете ли вы какие-либо способы сделать это?

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

4b9b3361

Ответ 1

Вы можете сначала использовать ffmpeg для обнаружения интервалов молчания, например,

ffmpeg -i "input.mov" -af silencedetect=noise=-30dB:d=0.5 -f null - 2> vol.txt

Это приведет к выводу консоли с показаниями, которые выглядят следующим образом:

[silencedetect @ 00000000004b02c0] silence_start: -0.0306667
[silencedetect @ 00000000004b02c0] silence_end: 1.42767 | silence_duration: 1.45833
[silencedetect @ 00000000004b02c0] silence_start: 2.21583
[silencedetect @ 00000000004b02c0] silence_end: 2.7585 | silence_duration: 0.542667
[silencedetect @ 00000000004b02c0] silence_start: 3.1315
[silencedetect @ 00000000004b02c0] silence_end: 5.21833 | silence_duration: 2.08683
[silencedetect @ 00000000004b02c0] silence_start: 5.3895
[silencedetect @ 00000000004b02c0] silence_end: 7.84883 | silence_duration: 2.45933
[silencedetect @ 00000000004b02c0] silence_start: 8.05117
[silencedetect @ 00000000004b02c0] silence_end: 10.0953 | silence_duration: 2.04417
[silencedetect @ 00000000004b02c0] silence_start: 10.4798
[silencedetect @ 00000000004b02c0] silence_end: 12.4387 | silence_duration: 1.95883
[silencedetect @ 00000000004b02c0] silence_start: 12.6837
[silencedetect @ 00000000004b02c0] silence_end: 14.5572 | silence_duration: 1.8735
[silencedetect @ 00000000004b02c0] silence_start: 14.9843
[silencedetect @ 00000000004b02c0] silence_end: 16.5165 | silence_duration: 1.53217

Затем вы создаете команды для разделения от каждого конца молчания до следующего запуска молчания. Вы, вероятно, захотите добавить несколько ручек, скажем, 250 мс, поэтому

ffmpeg -ss <silence_end - 0.25> -t <next_silence_start - silence_end + 0.25> -i input.mov word-N.mov

(Я пропустил задание параметров аудио/видео)

Вы захотите написать script, чтобы очистить журнал консоли и создать структурированный (возможно, CSV) файл с временными кодами - по одной паре в каждой строке: silence_end и next silence_start. А затем еще один script для генерации команд с каждой парой чисел.

Ответ 2

Извиняюсь за возрождение этой старой темы. Сценарий работает отлично, но я хотел бы оставить 5 секунд тишины до и после каждого обрезанного видео. Не могу понять, как это сделать, изменив этот скрипт. Благодарю.