質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

ファイルを分割すると大量のごみファイルが出る

Brot
Brot

総合スコア23

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0リアクション

0クリップ

252閲覧

投稿2022/09/14 02:16

編集2022/09/14 05:01

前提

音声wavファイルを分割した後、Speech Recognitionで文字起こしをするというものを作っています。

対象ファイルは5分2秒。それを240秒で分割するので、できるファイルは2つだけのはずなんですが、ファイルが100個できます。そのうち中に何も入っていない(長さが0秒)ファイルが98個です。
その何も入っていないファイルが原因なのか処理が停止してしまいます。
出力結果を見てみるとTotal timeが24347秒となっており、実際の数字と違うのですが、なぜこんな数字になっているんでしょうか?
ファイルの問題なのかと思いファイルを変えたりしてみましたが同様の問題が起こります。

検索したりしても望む答えを得られなかったので、教えてほしいです。
よろしくお願いいたします。

参考にしたサイト:
https://tacky0612.hatenablog.com/entry/2017/11/21/164409
https://qiita.com/futurebone/items/b3723899235a977f5796

実現したいこと

  • 大量の何も入っていないファイルが出る原因を知りたい。
  • 結果が実際の数値と違う理由を知りたい。

発生している問題・エラーメッセージ

False
f_name
cut time =
240
Channel: 2
Sample width: 44100
Frame Rate: 44100
Frame num: 1073741823
Params: _wave_params(nchannels=2, sampwidth=2, framerate=44100, nframes=1073741823, comptype='NONE', compname='not compressed')
Total time: 24347.887142857144
Total time(integer): 24347
Time: 240
Frames: 21168000
Number of cut: 101
[0 0 0 ... 0 0 0]
0
0
21168000
1
21168000
42336000
2
42336000
63504000
...
...
100
2116800000
2137968000

(ファイル2までの認識結果がここに正しく表示されました)

(ファイル2以降は何も入っていないと思うのでこの文が続きます)
Could not understand audio
...
...

#エラーメッセージ(例外)
[Errno 2] No such file or directory: 'output/101.wav'

Python

import wave import struct #from scipy import fromstring,int16 import numpy as np import os import math import speech_recognition as sr import pandas as pd #すでに同じ名前のディレクトリがないか確認 file = os.path.exists("output") print(file) if file == False: #保存先のディレクトリの作成 os.mkdir("output") #filenameに読み込むファイル、timeにカットする間隔 def cut_wav(filename, time): #timeの単位は[sec] #ファイルを読み出し wavf = filename + '.wav' wr = wave.open(wavf, 'r') #waveファイルが持つ情報を取得 ch = wr.getnchannels() width = wr.getsampwidth() fr = wr.getframerate() fn = wr.getnframes() total_time = 1.0 *fn / fr integer = math.floor(total_time) t = int(time) frames = int(ch * fr * t) num_cut = int(integer//t) #確認用 print("Channel: ", ch) print("Sample width: ", fr) print("Frame Rate: ", fr) print("Frame num: ", fn) print("Params: ", wr.getparams()) print("Total time: ", total_time) print("Total time(integer): ", integer) print("Time: ", t) print("Frames: ", frames) print("Number of cut: ", num_cut) #waveの実データを取得し、数値化 data = wr.readframes(wr.getnframes()) wr.close() X = np.frombuffer(data, dtype=np.int16) print(X) for i in range(num_cut): print(i) #出力データを生成 outf = 'output/' + str(i) + '.wav' start_cut = int(i*frames) end_cut = int(i*frames + frames) print(start_cut) print(end_cut) Y = X[start_cut:end_cut] outd = struct.pack("h" * len(Y), * Y) #書き出し ww = wave.open(outf, 'w') ww.setnchannels(ch) ww.setsampwidth(width) ww.setframerate(fr) ww.writeframes(outd) ww.close() str_out = "" list1 = [wavf, "", ""] df_x = pd.DataFrame([list1]) df_x.columns = ['No', '音声ファイル', '変換結果'] for ii in range(num_cut +1): outf = 'output/' + str(ii) + '.wav' str_out = wav_to_text(outf) df_x.loc[ii] = [ii, str(ii) + '.wav', str_out] #excelへ書き出し with pd.ExcelWriter("output/out.xlsx") as writer: df_x.to_excel(writer, sheet_name='結果', index=False) def wav_to_text(wavfile): r = sr.Recognizer() with sr.AudioFile(wavfile) as source: audio = r.record(source) wav_to_text = 0 try: wav_to_text = r.recognize_google(audio, language='en-GB') print(wav_to_text) except sr.UnknownValueError: print("Could not understand audio") except sr.RequestError: print("Could not request results from Speech Recognition") return wav_to_text f_name = " " #ここにファイル名を入れる(拡張子は不要) print("f_name") print("cut time = ") cut_time = input() #分割したい秒数を入力 cut_wav(f_name, cut_time)

補足情報(FW/ツールのバージョンなど)

Python3.10.5

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/09/14 02:52依頼された後にこの質問は修正されています

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

can110

2022/09/14 03:00

分割部分のコードにはおかしなところはなく実際に24347秒あるように思えます。 対象ファイルが5分2秒というのはどのような手段で確認しているでしょうか。またファイルサイズはどれくらいでしょうか。
Brot

2022/09/14 03:05

ありがとうございます。やはりファイルの問題なのでしょうか。 5分2秒というのはエクスプローラーの詳細から確認しています。 ファイルサイズは50.9 MB (53,436,494 バイト)です。
can110

2022/09/14 04:32 編集

ファイルサイズから5分2秒というのが正しく、フレーム数が異常だと思います。 元ファイルを何らかのwave編集ソフトで編集(開いてそのまま保存)したファイルで試してみてどうなるか?でしょうか。
Brot

2022/09/14 04:50

本当にありがとうございます。おっしゃったとおりにやってみたらうまくできました。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

解決済

回答1

クリップ0

更新

2017/05/27

IndexError

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。