2016-04-14 13 views
0

私は、python用のrapsberry pi camera libを使用してビデオを録画するプログラムを作っています。小さな問題が1つあります。実行時にcamera = picamera.PiCamera()カメラが有効になり、私がしたいのは、録音時にのみ有効にして、録音が終了してもプログラムをアクティブにしておくことです。pythonのグローバル変数、初期化と終了

必要なもの: picameraのグローバル変数を作成するにはどうすればいいですか?あなたは、変数を取り除くためにdelキーワードを使用する必要がありますタイトルの溶液が、picameraライブラリーをお探しの方のためのコードの

camera = picamera.PiCamera() 
camera.resolution = (1920, 1080) 
filename = "" 

#Start recording video into raw file 
def start_record(): 
       print("Starting recording"); 
       reset_tmp() 
       global filename 
       filename = "vid/" + str(int(time.time())); 
       camera.start_recording(filename+".h264"); 

#Stop recording and convert h264 raw file to mp4 and remove raw file 
def stop_record(): 
       print("Stopping recording"); 
       reset_tmp() 
       global filename 
       camera.stop_recording() 
       os.system("MP4Box -fps 30 -add "+filename+".h264"+" "+filename+".mp4"); 
       os.system("rm "+filename+".h264"); 

更新バージョン、機能 ました:

関連性の私のコードの一部

camera = None 
filename = "" 

#Start recording video into raw file 
def start_record(): 
       print("Starting recording"); 
       reset_tmp() 
       global filename 
       filename = "vid/" + str(int(time.time())); 

       global camera 
       camera = picamera.PiCamera() 
       camera.resolution = (1920, 1080) 
       camera.start_recording(filename+".h264"); 

#Stop recording and convert h264 raw file to mp4 and remove raw file 
def stop_record(): 
       print("Stopping recording"); 
       reset_tmp() 
       global filename 
       global camera 
       camera.stop_recording() 
       camera.close() 
       os.system("MP4Box -fps 30 -add "+filename+".h264"+" "+filename+".mp4"); 
       os.system("rm "+filename+".h264"); 
+0

を機能START_RECORD内の記録を開始する行を置きます。 – dbliss

+0

他の関数の中で同じ変数にアクセスする必要があるため、それは機能しません。 – Iceberg

+0

関数の仕組みやそれらの間のパラメータの受け渡し方法を調べることをお勧めします。 – Chris

答えて

-2

方法について:

01オブジェクトを終了させる .close()と呼ばれる機能が、ここに私の固定コードです
camera = None 
camera.resolution = (1920, 1080) 
filename = "" 

#Start recording video into raw file 
def start_record(): 
       print("Starting recording"); 
       reset_tmp() 
       global filename 
       filename = "vid/" + str(int(time.time())); 

       global camera 
       camera = picamera.PiCamera() 
       camera.start_recording(filename+".h264"); 

基本的な考え方は、カメラを起動するためのコードをfunktionに移動することです。グローバルはグローバル変数を変更するために使用できます。

+0

ありがとう、私は試してみて、それが動作するかどうかを確認します。 – Iceberg

+0

これは動作しますが、2番目の関数で変数を終了する必要がありますが、どうすればできますか? – Iceberg

+0

あなたはすでにそれをやっています。camera.stop_recording()を見てください。それが十分でない場合、yaouはdocsに相談する必要があります –

2

ここではグローバルは必要ありません。ただ、戻り値を使用します。

import os 
import subprocess 
import time 

import picamera 

def start_record(resolution=(1920, 1080)): 
    """Start recording video into raw file""" 
    print("Starting recording") 
    camera = picamera.PiCamera() 
    camera.resolution = resolution 
    reset_tmp() 
    filename = os.path.join('vid', '{}.h264'.format(int(time.time()))) 
    camera.start_recording(filename) 
    return camera, filename 


def stop_record(camera, filename): 
    """Stop recording and convert h264 raw file to mp4 and remove raw file""" 
    print("Stopping recording") 
    reset_tmp() 
    camera.stop_recording() 
    mp4_fn = os.path.splitext(filename)[0] + '.mp4' 
    subprocess.call(['MP4Box', '-fps', '30', '-add', mp4_fn]) 
    os.remove(filename) 

今すぐスタート機能を呼び出す:

camera, filename = start_record() 

以降停止機能:

stop_record(camera, filename) 
関連する問題