gpt4 book ai didi

python - (python 3) 从 .h264 自动转换为 .mp4

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:41 25 4
gpt4 key购买 nike

我有一个用于录制视频的 Python 3 代码。不幸的是,我不希望它是 .h264,我需要它转换为 .mp4。使用其他 StackOverflow 线程作为模板(特别是 this 一个),我认为最简单的方法是使用 subprocess.Popen 插入 MP4Box -add filename.h264 filename .mp4 进入终端并让它自动为我完成。不幸的是,Python 脚本没有执行任何操作,也没有收到任何错误消息,所以我不知道出了什么问题。 .h264 文件出现在我想要的文件夹中,如果我手动将命令输入终端,则会出现 .mp4,但是当我让它运行时什么也没有发生。剧本的其余部分就像一个魅力。代码在这里:

#!/usr/bin/python

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) #first number is forwards, second is backwards
startupTime = 1
recordingTime = 1
collectionTime = 3
resetTime = 30



while True:
sleep(startupTime) #delay a bit so installation can take place

#wait for motion, then move the motor back and forth
pir.wait_for_motion()
print("Motion Detected")
#moves motor forward for 3 seconds at 25% speed
motor.forward(.25)
print("Strip Extending")
sleep(3)
motor.stop()
#leaves strip out for given amount of time
print("Collecting Sample")
sleep(collectionTime)
#moves motor backward for 3 seconds at 50% speed
motor.backward(.5)
print("Strip Retracting")
sleep(3)
motor.stop()

#Prep file for correct saving
filename = dt.datetime.now().strftime("%Y-%m-%d_%H.%M.%S.h264") #saves file as a date
save_path= "/home/pi/ANALYSIS"
completed_video= os.path.join(save_path, filename)

#Start recording
camera.start_recording(completed_video) #starts recording and saves it as filename
print("Camera Recording")
camera.annotate_text = dt.datetime . now() . strftime("%Y-%m-%d_%H.%M.%S")
start=dt.datetime.now()

#Keep recording until time runs out, annotate to make sure we have reference frame
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()

#Conversion to usable file format
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))

#starts detecting again after given time
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"

最佳答案

Comment: 2017-07-11_15.34.49.h264.h264

您的文件路径/文件名错误,请更改为以下内容:

Note: The .mp4 is saved in to the Current Directory the Subprocess is executed,
the Directory the Python Script is started. This could be different as the .h264 are saved!
Think about to change that also to be a absolute Path.

command = "MP4Box -add {} {}.mp4".format(completed_video, os.path.splitext(filename)[0])
try:
output = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True)
except subprocess.CalledProcessError as e:
print('FAIL:\ncmd:{}\noutput:{}'.format(e.cmd, e.output))
<小时/>

os.remove(path, *, dir_fd=None)

Remove (delete) the file path.

<小时/>

Question: I don't get any error messages, so I don't know what's going wrong.

尝试以下操作:
要捕获结果中的标准错误,请使用 stderr=subprocess.STDOUT:

command = shlex.split("MP4Box -add {f}.h264 {f}.mp4".format(f=filename))
output = subprocess.check_output(command, stderr=subprocess.STDOUT)
print(output)

我假设您需要 shell=True,因为您没有提供 MP4Box 的完整路径,因此需要 Shell 环境来查找 MP4Box

关于python - (python 3) 从 .h264 自动转换为 .mp4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45040261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com