PR

ffmpegのplayでPermissionError: [Errno 13] Permission denied:と表示された際の解決方法

スポンサーリンク
この記事は約8分で読めます。
環境:
windows10 64bit home 1909
anoconda3
Python3.7

 

前回は、ffmpegでフェーズイン・フェーズアウトする音声ファイルの作成をしましたので、今回はそのファイルを使って再生しようと思います。

音声が徐々に大きくなりったり小さくなったりしてみたい方は以下の記事を読んでみてください。↓

フェーズイン・フェーズアウトしたファイルの作成

 

今回はその続きなのですが、困ったことに、作成したファイルを再生しようとすると

以下のエラーが送出されどうやら、「許可が拒否」されたとのこと・・

 

Traceback (most recent call last):
  File "C:/Users/chiraura/PycharmProjects/bell/test.py", line 22, in 
    play(sound3)
  File "C:\Users\chiraura\Anaconda3\lib\site-packages\pydub\playback.py", line 71, in play
    _play_with_ffplay(audio_segment)
  File "C:\Users\chiraura\Anaconda3\lib\site-packages\pydub\playback.py", line 18, in _play_with_ffplay
    seg.export(f.name, "wav")
  File "C:\Users\chiraura\Anaconda3\lib\site-packages\pydub\audio_segment.py", line 780, in export
    out_f = _fd_or_path_or_tempfile(out_f, 'wb+')
  File "C:\Users\chiraura\Anaconda3\lib\site-packages\pydub\utils.py", line 57, in _fd_or_path_or_tempfile
    fd = open(fd, mode=mode)
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\chiraura\\AppData\\Local\\Temp\\tmp2nhpe6zi.wav'

Process finished with exit code 1

 

調べてみると、simpleaudioをインストールすると解決するらしい。

ので,早々インストールしてみました。
参考サイト https://github.com/jiaaro/pydub/issues/209

simpleaudioのインストール

pip install simpleaudio

Successfully と表示されているので、無事インストール完了↓

Collecting simpleaudio
  Downloading https://files.pythonhosted.org/packages/c4/7b/a802613a1c2f8558931325711270cffc220e35cefe4060d8e4ef7cfc552a/simpleaudio-1.0.4-cp37-cp37m-win_amd64.whl (2.0MB)
     |████████████████████████████████| 2.0MB 2.2MB/s
Installing collected packages: simpleaudio
Successfully installed simpleaudio-1.0.4

インストール後無事エラーは解消され再生されました。

音楽を再生する

イザ、♫音楽再生♫

全体のコードは、前回の記事に以下のコードを足しただけです。

play(sound3)

実際にできたのは蛍の光♫ 終業時の再生のために作りました。

 

やっと、再生できたので、タスクスケジューラに登録できるようにパッチファイルを作成し実行

パッチファイルの作り方

パッチファイルには以下のように「Python」 と 書き半角スペースを空け「再生したいPythonのスクリプト」を記載するだけでOKです。

python C:\Users\ユーザー名\PycharmProjects\bell\test.py

<!–#初期設定 # pip install opencv-contrib-python # pip install cmake # pip install face_recognition import sys import face_recognition import cv2 import numpy as np from PIL import ImageFont, ImageDraw, Image import glob # 設定ファイルの読み込み import config threshold = config.threshold # 顔情報の初期化 face_locations = [] face_encodings = [] video_capture = cv2.VideoCapture(0) # 登録画像の読み込み # image_paths = glob.glob('image/*') image_paths = glob.glob('image_jp/*') image_paths. sort() known_face_encodings = [] known_face_names =[] checked_face =[] #一度感知した画像を格納 delemiter = "\\" for image_paths in image_paths: im_name = image_paths.split(delemiter)[-1].split('.')[0] image = face_recognition.load_image_file(image_paths) face_encodings = face_recognition.face_encodings(image)[0] known_face_encodings.append(face_encodings) known_face_names.append(im_name) def main(): while True: # ビデオの単一フレームを取得 _, frame = video_capture.read() # 顔の位置情報を検索 face_locations = face_recognition.face_locations(frame) # 顔画像の符号化 face_encodings = face_recognition.face_encodings(frame, face_locations) for face_encoding in face_encodings: # 顔画像が登録画像と一致しているか検証 matches = face_recognition.compare_faces(known_face_encodings, face_encoding, threshold) mane = "Unknown" # 顔画像と最も近い登録画像を候補とする face_distanes = face_recognition. face_distance(known_face_encodings, face_encoding) best_match_index = np.argmin(face_distanes) if matches[best_match_index]: name = known_face_names[best_match_index] # 位置情報の表示 for (top, right, bottom, left) in face_locations: # 顔領域に枠を描画 cv2.rectangle(frame, (left, top), (right, bottom), (0, 0 ,255), 2) # 顔領域の下に枠を表示 cv2.rectangle(frame, (left, bottom -35), (right, bottom), (0, 0, 255), cv2.FILLED) # font = cv2.FONT_HERSHEY_DUPLEX # cv2.putText(frame, name, (left +6, bottom -6), font, 1.0, (255, 255, 255), 1) # 日本語表示 fontpath = 'meiryo.ttc' font = ImageFont.truetype(fontpath, 32) # 一旦配列の数値を画像データに置き換える img_pil = Image.fromarray(frame) draw = ImageDraw.Draw(img_pil) position = (left + 6, bottom -40) #drawにテキストを記載 draw.text(position, name, font=font, fill=(255, 255, 255, 0)) frame = np.array(img_pil) # 結果をビデオに表示 cv2.imshow('Video', frame) # ESCキーで終了 if cv2.waitKey(1) == 27: break main() video_capture.release() cv2.destroyAllWindows() config.py # 従業員情報の設定 emp_info = {} emp_info["小林 浩子"] = "000001" emp_info["太井 貴子"] = "000002" # パスワード認証モード(1:オン 0:オフ) mode = 1 # 閾値の設定 threshold = 0.5–>

コメント

タイトルとURLをコピーしました