我有一个Python 3代码,应该用来录制视频。不幸的是,我不希望它出现在.h264中,我需要将其转换为.mp4。使用其他StackOverflow线程作为模板(特别是
this
一),我认为最简单的方法是使用
subprocess.Popen
插入
MP4Box -add filename.h264 filename.mp4
进入终端,让它自动为我做这件事。不幸的是,Python脚本没有做任何事情,我也没有收到任何错误消息,所以我不知道出了什么问题。h264文件会出现在我想要的文件夹中,如果我手动将命令放入终端,会出现.mp4,但当我让它运行时,什么也没有发生。剧本的其余部分很有魅力。代码如下:
from gpiozero import MotionSensor
from gpiozero import Motor
from picamera import PiCamera
import subprocess
import os.path
import shlex
import datetime as dt
from time import sleep
camera = PiCamera()
pir = MotionSensor(4, 1, 100, .6, False)
motor = Motor(3,14)
startupTime = 1
recordingTime = 1
collectionTime = 3
resetTime = 30
while True:
sleep(startupTime)
pir.wait_for_motion()
print("Motion Detected")
motor.forward(.25)
print("Strip Extending")
sleep(3)
motor.stop()
print("Collecting Sample")
sleep(collectionTime)
motor.backward(.5)
print("Strip Retracting")
sleep(3)
motor.stop()
filename = dt.datetime.now().strftime("%Y-%m-%d_%H.%M.%S.h264")
save_path= "/home/pi/ANALYSIS"
completed_video= os.path.join(save_path, filename)
camera.start_recording(completed_video)
print("Camera Recording")
camera.annotate_text = dt.datetime . now() . strftime("%Y-%m-%d_%H.%M.%S")
start=dt.datetime.now()
while (dt.datetime.now() - start).seconds < recordingTime:
camera.annotate_text = dt.datetime.now(). strftime("%Y-%m-%d_%H.%M.%S")
camera.wait_recording(.2)
camera.stop_recording()
print("Camera finished recording... Beginning Analysis")
from subprocess import CalledProcessError
command = shlex.split("MP4Box -add {} {}.mp4".format(completed_video, os.path.splitext(filename)[0]))
try:
output = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True)
except CalledProcessError as e:
print('FAIL:\ncmd:{}\noutput:{}'.format(e.cmd, e.output))
sleep(resetTime)
print("Ready for next sample")
>Traceback (most recent call last):
>
File "/home/pi/Detector.py", line 62, in <module> output =
subprocess.check_output(command, stderr=subprocess.STDOUT)
File "/usr/lib/python3.4/subprocess.py", line 620, in check_output raise
CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError:
Command '['MP4Box', '-add', '2017-07-11_15.34.49.h264.h264', '2017-07-11_15.34.49.h264.mp4']'
>
Returned non-zero exit status 1"