- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个用于录制视频的 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/
我尝试在安装了多类型 MFC 库的 visual studio 2015 MFC 上运行以前编写的 MFC c++ 代码。 但是,我这里仍然有 12 个关于缺少函数的错误: IntelliSense:
我正在学习 OOP 并且有疑问。假设我有一个包含 ClassB.h 的文件 ClassA.h,并且在某些时候我的 ClassB.h 需要包含 ClassA .h。 这会产生一个错误,我想我明白为什么会
我开始使用 CUDA 进行编程,在一些示例中我找到了包含文件 cuda.h、cuda_runtime.h 和 cuda_runtime_api.h 包含在代码中。有人可以向我解释一下这些文件之间的区别
我有一些生成正则表达式的代码。那么下面的表达式实际上是: ^(?:\s*((exclude|include|hide|show|protect|risk|dir-merge|merge)),\s*((
我一直在查看一些源代码,以更好地了解我们使用的这款游戏的核心,并编写更可靠、更快速的插件。然后我发现了这段奇怪的代码...... public void setMaxH(double amount)
通常我们会使用标准类型作为 std::unordered_map 的键和值.但现在我需要自定义我自己的键和值类。 键类在block_cache_key.h 中定义如下: #ifndef BLOCK_C
例如,我想要两个头文件,它们可以依赖于另一个头文件中的函数。 //Header1.h file #include Header2.h void h1(){ //... func1(); } v
我正在研究来自 Sedgewick 的 Shell 排序 Algorithms in C part 1-4在第 172 页。 我使用 size (数组的长度),而不是 l和 r (开始和结束);所以我
我在 macOS BigSur 上通过 VMWare 使用 Ubuntu 20.04.2 LTS。我安装了最新版本的 tcl、tcl-dev、tk 和 tk-dev - 版本 8.6。我想编译 Arc
我用我的 glu 和 gl 头文件构建了一个 OpenGL 程序,默认包含在 windows 7 专业版中。现在,我买了一本描述 OpenGL 游戏开发的书。这本书的作者说,我必须在我的项目中包含 g
我想在 token 中保留特殊字符,同时仍对特殊字符进行 token 化。说我有话 "H&R Blocks" 我想将其标记为 "H", "R", "H&R", "Blocks" 我读了http://w
关于 hash 作为 trans 参数的另一个问题。在下面的代码中,简单地使用 hash 会给出不正确的结果,但是将其替换为 keys 和 values 会使其正确。怎么了? my @alph1 =
我已经编写了一个 C 程序,它获取屏幕像素的 RGB 值 (0-255),并知道其位置 (x,y)。它可以在 Linux 中运行,但是当我尝试在 Visual Studio (Windows) 中编译
我已经使用 Windows 7 专业版中默认包含的 glu 和 gl 头文件构建了一个 OpenGL 程序。现在,我买了一本描述 OpenGL 游戏开发的书。这本书的作者说,我必须将glew head
#include using namespace std; #include //#include int main() { initscr();
h:messages h:form 内的组件还显示与外部组件相关的消息。 如何限制它只显示与包含 h:form 内的组件相关的消息? 我不喜欢用单独的h:message来使我的代码膨胀。每个输入组件的
我下载了示例代码和 cpp 文件,其中包含 list.h、queue.h 和 vector.h 等头文件,如果我尝试构建,我会收到“ fatal error :没有这样的文件或目录编译终止”我想我应该
我有一个编译成功的桌面项目,但是在我向项目添加新配置以支持 Windows Mobile 平台后,我收到以下错误: error C2146: syntax error : missing ';' be
有很多关于这个错误的帖子,但我无法解决它,我希望你能拿出解决方案。我在 Ubuntu 机器上。 ~/graphmap2$ 在这个文件夹中,我下载了 zlib。可以看图 经过一番谷歌搜索后,我还注意到没
是否可以在 Visual C++ 中使用以下 header : 图.h dos.h bios.h 最佳答案 据我所知,无法在 Visual C++ 中使用它, 与此同时,我希望您关注 Open Wat
我是一名优秀的程序员,十分优秀!