Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Raspberry PI上用Python执行FFmpeg命令_Python_Linux_Ffmpeg_Raspberry Pi_Popen - Fatal编程技术网

在Raspberry PI上用Python执行FFmpeg命令

在Raspberry PI上用Python执行FFmpeg命令,python,linux,ffmpeg,raspberry-pi,popen,Python,Linux,Ffmpeg,Raspberry Pi,Popen,我用FFmpeg在我的Raspberry PI上录制视频。代码如下: ffmpeg -f video4linux2 -y -r 4 -i /dev/video0 -vf "drawtext=fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf:expansion=strftime:text='%Y-%m-%d %H\\:%M\\:%S': fontcolor=white:box=1:boxcolor=black@0.8

我用FFmpeg在我的Raspberry PI上录制视频。代码如下:

ffmpeg -f video4linux2 -y -r 4 -i /dev/video0 -vf "drawtext=fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf:expansion=strftime:text='%Y-%m-%d %H\\:%M\\:%S': fontcolor=white:box=1:boxcolor=black@0.8:x=w-text_w:y=h-line_h" -vframes 20 -vcodec mpeg4 out.mp4 
我在终端上运行了这个代码,它运行得很好。但是,我需要使用Python来运行它。然后我编写了如下代码:

from subprocess import Popen
from os import system
x = "drawtext=fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf:expansion=strftime:text='%Y-%m-%d %H\\:%M\\:%S': fontcolor=white:box=1:boxcolor=black@0.8:x=w-text_w:y=h-line_h"
result = ['ffmpeg', '-f', 'video4linux2', '-y', '-r', '4', '-i', '/dev/video0', '-vf', x, '-vframes ','20', '-vcodec', 'mpeg4', 'out.mp4']
Popen(result)

它的工作时间很短(绝对小于1s)。有什么问题吗?

我想我已经解决了。看起来您对bash空白有问题。在命令行中,将整个
-vf
选项括在引号中。在python脚本中,您将
x
创建为字符串
Popen
将像列表中的其他参数一样解释字符串,并在实际命令运行时将其保留为不带引号。在命令行上,这看起来像:

ffmpeg -f video4linux2 -y -r 4 -i /dev/video0 -vf drawtext=fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf:expansion=strftime:text='%Y-%m-%d %H\\:%M\\:%S': fontcolor=white:box=1:boxcolor=black@0.8:x=w-text_w:y=h-line_h -vframes 20 -vcodec mpeg4 out.mp4
因此,实际上,您希望:

x = '"drawtext=fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf:expansion=strftime:text=\'%Y-%m-%d %H\\:%M\\:%S\': fontcolor=white:box=1:boxcolor=black@0.8:x=w-text_w:y=h-line_h"'
否则,当bash实际运行时,该参数将在日期格式的空白处拆分,并导致一些意外行为


(为文字墙感到抱歉,只是想确保我没有混淆。)

也许python脚本正在退出并“杀死”正在运行的ffmpeg?@rogerdpack也这么想。我刚刚做了一个实验,在这个实验中,我运行了一个简单的无限循环,附加到一个文件,但它不会在主程序退出时退出。谢谢你回答我。我明白你的意思。但它还是完成得很快。我还尝试使用
call
执行此代码。同样的问题。我写了
call([“ffmpeg-f video4linux2-y-r4-I/dev/video0-vf\”drawtext=fontfile=/usr/share/fonts/truetype/ttf dejavu/DejaVuSans Bold.ttf:expansion=strftime:text='%y-%m-%d%H\\\\\\\\\\\:%S':fontcolor=white:box=1:boxcolor=black@0.8:x=w-text\u w:y=h-line\u h\“-vframes 20-vcodec mpeg4 out.mp4],shell=True)
。我认为问题在于
drawtext
部分。因为当我删除
-vr
部分时,它工作得非常好。(对不起,我的英语)我假设你在实际程序中做了,但为了以防万一,你似乎忘记了
调用
命令的最终报价(就在列表的结束括号之前).除此之外,我被难住了,所以你可能是对的。我家里没有我的覆盆子圆周率相机,否则我会再尝试一些。看起来你是靠你自己-祝你好运!这是一个打字错误,我写在我的脚本中。我会努力解决这个问题。非常感谢你的帮助。