Bir konuşmanın videosunu kelimelerle otomatik olarak bölmem gerekiyor, bu nedenle her sözcük ayrı bir video dosyasıdır. Bunu yapmanın herhangi bir yolunu biliyor musun? Planım sessiz parçaları tespit etmek ve bunları sözcük ayırıcıları olarak kullanmaktı. Ama bunu yapmak için herhangi bir araç bulamadım ve ffmpeg'in bunun için uygun bir araç olmadığını düşünüyorum.Sessiz parçalar ile video veya ses bölme
12
A
cevap
8
Önce Bu şuna benzer okumalar ile konsol çıktısını üretecek bu
ffmpeg -i "input.mov" -af silencedetect=noise=-30dB:d=0.5 -f null - 2> vol.txt
gibi, sessizlik aralıklarını tespit etmek için ffmpeg kullanabilirsiniz: Daha sonra ayrılmaya komutları oluşturmak
[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
her bir sessizlik bir sonraki sessizlik başlangıcına dönüşür. Muhtemelen bu yüzden
ffmpeg -ss <silence_end - 0.25> -t <next_silence_start - silence_end + 0.25> -i input.mov word-N.mov
Sen konsol günlüğünü kazımak için bir senaryo yazmak isteyeceksiniz
(I ses/video parametrelerini belirterek atlandı gelmiş), 250 ms, diyelim ki, bazı kolları eklemek isteyeceksiniz ve zaman kodlarıyla yapılandırılmış (belki CSV) bir dosya oluştur - her satırdaki bir çift: silence_end ve bir sonraki silence_start. Ve sonra her sayı çiftiyle komutları üretmek için başka bir betik.
Oneliner olarak: "ffmpeg -i input.mkv -filter_complex" [0: a] silencedetect = n = -90dB: d = 0,3 [outa] "-map [outa] -f s16le -y/dev/null | & F = '- aq 70 -v uyarı' perl -ne 'INIT {$ ss = 0; $ Se = 0; } if (/ silence_start: (\ S +) /) {$ ss = 1 $; $ TO + = 1 'dir; printf "ffmpeg -nostdin -i input.mkv -ss% f -t% f $ ENV {F} -y% 03d.mkv \ n", $ se, ($ ss- $ se), $ ctr; } if (/ silence_end: (\ S +) /) {$ se = $ 1; } END {printf "ffmpeg -nostdin -i input.mkv -ss% f $ ENV {F} -y% 03d.mkv \ n", $ se, $ ctr + 1; } '| bash -x' –
Bu tek liner mac üzerinde çalışmıyor. -bash: beklenmedik belirtecin yanında 'sözdizimi hatası' & ' –
@JohnSmith, Mac'in varsayılan olarak eski (pre-4) bash'ı var. '| &' Ile '' 2> & 1 | 'arasında değiştirin. –