在树莓派上用Python执行FFmpeg命令



我使用FFmpeg在我的树莓派上录制视频。代码在这里:

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)

它只工作很短的时间(绝对少于15秒)。有什么问题吗?

我想我明白了。看起来您有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实际运行时,该参数将在日期格式的空白处分割,并导致一些意想不到的行为。

相关内容

  • 没有找到相关文章

最新更新