2016-03-18 20 views
12

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

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.

+2

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' –

+1

Bu tek liner mac üzerinde çalışmıyor. -bash: beklenmedik belirtecin yanında 'sözdizimi hatası' & ' –

+1

@JohnSmith, Mac'in varsayılan olarak eski (pre-4) bash'ı var. '| &' Ile '' 2> & 1 | 'arasında değiştirin. –

İlgili konular