web-dev-qa-db-ja.com

無音部分でビデオまたはオーディオを分割する方法

スピーチのビデオを単語ごとに自動的に分割する必要があるので、すべての単語は個別のビデオファイルです。これを行う方法を知っていますか?

私の計画は、無音部分を検出し、単語の区切りとして使用することでした。しかし、これを行うためのツールが見つかりませんでした。ffmpegはそのための適切なツールではないようです。

24
TermiT

このように、最初に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ミリ秒のハンドルを追加すると、オーディオの持続時間が250ミリ秒* 2長くなります。

ffmpeg -ss <silence_end - 0.25> -t <next_silence_start - silence_end + 2 * 0.25> -i input.mov Word-N.mov

(私はオーディオ/ビデオパラメーターの指定をスキップしました)

コンソールログをスクレイピングして、タイムコードを含む構造化された(おそらくCSV)ファイルを生成するスクリプトを作成する必要があります-各行に1ペア:silence_endと次のsilence_start。そして、数値の各ペアでコマンドを生成する別のスクリプト。

31
Gyan