2016-07-16 79 views
0

我不知道为什么,但avconv似乎不像我所期望的管道原始视频。ffmpeg和avconv之间的区别rawvideo image2pipe

我试图管从ffmpeg视频到python(最终我想从x11grab,而不是视频文件)。在我的Macbook上使用ffmpeg工作得很好,但是当我在Debian Jessie上使用avconv时,该流很快就切断了!

这里是我的基本的Python,这是继this guide

input_resolution_shape = (1280,800,3) 
input_bytes = reduce(mul, input_resolution_shape, 1) 
print input_bytes 

# Prints 3072000 

import subprocess as sp 
command = [ FFMPEG_BIN, # This is either "avconv" or "ffmpeg". 
      '-i', 'test_video.mp4', 
      '-f', 'image2pipe', 
      '-pix_fmt', 'rgb24', 
      '-vcodec', 'rawvideo', '-'] 
pipe = sp.Popen(command, stdout = sp.PIPE, bufsize=10**8) 

import numpy 
for _ in range(100): # read 100 frames 
    # read 1280*800*3 bytes (= 1 frame) 
    raw_image = pipe.stdout.read(input_bytes) 
    # transform the byte read into a numpy array 
    image = numpy.fromstring(raw_image, dtype='uint8') 
    if image.size != 0: 
     print image.size 

     # Prints 1015808 

在Mac上,打印的image.size是一样的input_bytes,3072000.但是Debian的,它是1015808.任何想法,为什么这可能是发生了什么?

有趣的是,一百零一万五千八百零八分之三百零七万二千只有约3:

In [1]: 3072000./1015808. 
Out[1]: 3.024193548387097 
+0

'acvonv'不等同于'ffmpeg'。你为什么不使用'ffmpeg'?你可以简单地[下载一个静态'ffmpeg'二进制文件](http://johnvansickle.com/ffmpeg/)并将脚本指向它。 – LordNeckbeard

+0

因为我在Debian上,我无法弄清楚如何在其上正确安装ffmpeg。 :( – NHDaly

回答

1

我,因为我是从一个码头工人的实例,它是建立关闭Debian的内部运行了这个问题。 ffmpeg未在我正在运行的Debian版本中默认打包。

我设法解决这个问题,只需下载ffmpeg binary,per @ LordNeckbeard的上面的评论。我已经将这些行添加到我的Dockerfile中,可以帮我解决问题:

# Install FFMPEG 
RUN wget http://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz 
RUN tar xvfJ ffmpeg-release-64bit-static.tar.xz 
USER root 
RUN ln ffmpeg-3.1.2-64bit-static/ffmpeg /usr/local/bin/ffmpeg 

谢谢。

相关问题