2016-04-14 93 views
0

我正在製作一個程序,讓我使用rapsberry pi相機庫爲python錄製視頻,這裏有一個小問題,當您運行camera = picamera.PiCamera()時,相機已啓用並正在使用,直到結束的程序中,我想要做的只是在記錄時啓用它,在完成記錄時停止但仍然保持我的程序活動。Python中的全局變量,初始化和終止

我需要的是: 如何爲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"); 

更新的代碼版本,功能 爲那些尋找標題的解決方案,你必須使用del關鍵字擺脫的變量,但picamera圖書館一個名爲.close()終止目標函數,這是我的固定代碼:

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

如何:

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"); 

其基本思想是將代碼移動到一個函數中 - 可以使用全局變量來修改全局變量。

+0

謝謝,我會試一試,看看它是否有效。 – Iceberg

+0

這個工作,但我仍然需要在第二個函數終止變量,我該怎麼做? – Iceberg

+0

你已經在做這件事,請參閱camera.stop_recording()。如果這還不夠,你必須諮詢文檔 –

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)