10秒程度のmp3ファイルで、中心となる音がひとつ位しかない音声で、それ以外の部分が雑音のような音声ファイルが多数あります。

この音声ファイルの中で比較的音が小さい領域を削除して、時間的に短くしたいと思います。
削除するパターンは先頭からの何秒、または終端からの何秒、またはその両方、の3パターンだけとします。

このような編集を、出来ればコマンドだけで自動的に行う良い方法を提案してください。
自動的に行う理由はもちろんファイルが多数あるからです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2018/11/04 07:24:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pyopyopyo No.2

回答回数377ベストアンサー獲得回数98

ポイント100pt

soxというコマンドがおすすめです

例えばこんな感じです

$ sox input.wav output.wav silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse

入力ファイルは input.wav
出力ファイルは output.wav

マニュアルは https://linux.die.net/man/1/sox

日本語解説は例えば https://qiita.com/moutend/items/50df1706db53cc07f105 がすぐ見つかりますが,typo(書き間違え)が多いのでご注意ください


たくさんのファイルを一括で変換するなら bash と組み合わせて

mkdir -p output/
for  x  in input/*.wav; do
    y=`basename $x`
    sox $x  output/$y.wav silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse
done

という感じでしょうか

これで inputというディレクトリ以下にある *.wav なファイルをかたっぱしから処理して
変換後のファイルを output/ というディレクトリの下へ保存します

他1件のコメントを見る
id:pyopyopyo

出張中で返事が遅くなりました.ごめんなさい

すでに解決済みかもしれませんが,念のため補足させていただきます.

私の手元のPCで確認しましたが
上記のsoxコマンドでちゃんと時間的に短いwavファイルが生成できます

soxのsilenceオプションは無音区間を検出して,その区間を削除する命令です.
説明が不十分でしたが

$ sox input.wav output.wav silence 1 0.1 0.1% 

で先ず先頭から無音区間を検出して,それを削除
次に

$ reverse

で音声データを前後反転させて

silence 1 0.1 0.1% 

の部分で再度先頭から無音区間の検出と削除をすることで,末尾の無音区間を削除
最後に

$ reverse

で再度前後を入れ替える

という処理になっています


うまくいかない場合は silence のパラメータを調整してください.

例えば0.1%の部分が無音区間を決定する音量の閾値になって
この閾値より小さな音は無音とみなす仕組みになっています.
小さな音,ノイズや周囲音が含まれている場合は,とりあえずこの値を少し大きくするとうまくいくかもしれません.

パラメータの具体的な意味は,sox のマニュアルを確認してください.

またsoxコマンドの挙動がうまく把握できない場合は
audacity などを使って input.wav と output.wav を開いて
波形データを見ながら,音声ファイルの長さや,音量などをかくにんすると良いと思います.

以上,補足情報でした.

2018/11/04 21:48:34
id:TAK_TAK

はい、解決しました。

2018/11/04 22:48:19

その他の回答1件)

id:Asayuri No.1

回答回数309ベストアンサー獲得回数65

 
http://audacity-mp3.xyz/katto-ketugou-huyou/
 
https://storyinvention.com/audacity-noise/
 
https://storyinvention.com/audacity-pitch/
  
フリーソフトAudacityで ノイズ除去 カットできるとのことです
 
参考になさってください
 
 
 

id:TAK_TAK

自動的に行う方法と明記しているはずです

2018/11/02 08:56:01
id:pyopyopyo No.2

回答回数377ベストアンサー獲得回数98ここでベストアンサー

ポイント100pt

soxというコマンドがおすすめです

例えばこんな感じです

$ sox input.wav output.wav silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse

入力ファイルは input.wav
出力ファイルは output.wav

マニュアルは https://linux.die.net/man/1/sox

日本語解説は例えば https://qiita.com/moutend/items/50df1706db53cc07f105 がすぐ見つかりますが,typo(書き間違え)が多いのでご注意ください


たくさんのファイルを一括で変換するなら bash と組み合わせて

mkdir -p output/
for  x  in input/*.wav; do
    y=`basename $x`
    sox $x  output/$y.wav silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse
done

という感じでしょうか

これで inputというディレクトリ以下にある *.wav なファイルをかたっぱしから処理して
変換後のファイルを output/ というディレクトリの下へ保存します

他1件のコメントを見る
id:pyopyopyo

出張中で返事が遅くなりました.ごめんなさい

すでに解決済みかもしれませんが,念のため補足させていただきます.

私の手元のPCで確認しましたが
上記のsoxコマンドでちゃんと時間的に短いwavファイルが生成できます

soxのsilenceオプションは無音区間を検出して,その区間を削除する命令です.
説明が不十分でしたが

$ sox input.wav output.wav silence 1 0.1 0.1% 

で先ず先頭から無音区間を検出して,それを削除
次に

$ reverse

で音声データを前後反転させて

silence 1 0.1 0.1% 

の部分で再度先頭から無音区間の検出と削除をすることで,末尾の無音区間を削除
最後に

$ reverse

で再度前後を入れ替える

という処理になっています


うまくいかない場合は silence のパラメータを調整してください.

例えば0.1%の部分が無音区間を決定する音量の閾値になって
この閾値より小さな音は無音とみなす仕組みになっています.
小さな音,ノイズや周囲音が含まれている場合は,とりあえずこの値を少し大きくするとうまくいくかもしれません.

パラメータの具体的な意味は,sox のマニュアルを確認してください.

またsoxコマンドの挙動がうまく把握できない場合は
audacity などを使って input.wav と output.wav を開いて
波形データを見ながら,音声ファイルの長さや,音量などをかくにんすると良いと思います.

以上,補足情報でした.

2018/11/04 21:48:34
id:TAK_TAK

はい、解決しました。

2018/11/04 22:48:19
  • id:psne
    業務用途でも利用できるソフトには、バッチ処理という機能を持つものがあります。
    Adobe Audition CCでは、必要な処理を含めたテンプレートを作成してフォルダー内のファイルに対して一括処理を行う事ができます。

    GoldWaveでも同じように処理コマンドを組み合わせてバッチ処理を行う事ができます。

    Audition CC
    https://helpx.adobe.com/jp/audition/using/automating-common-tasks-cs6.html

    GoldWave
    https://www.goldwave.com/

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません