rawvideo image2pipe的ffmpeg和avconv之间的区别

时间:2016-07-16 01:44:47

标签: python video ffmpeg avconv

我不确定为什么,但ffmpeg似乎没有像我期望的那样管理原始视频。

我正在尝试将视频从python传输到x11grab(最终我想从ffmpeg读取,而不是视频文件)。它使用avconv在我的Macbook上运行得很好,但是当我在Debian Jessie上使用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 时,流会提前切断!

这是我的基本python,它遵循this guide

image.size

在Mac上,打印的input_bytesIn [1]: 3072000./1015808. Out[1]: 3.024193548387097 ,3072000相同。但在debian上,它是1015808.任何想法为什么会发生这种情况?

有趣的是,3072000/1015808只是大约3:

var myDictionary = {};

// e.g. hierarchy = ["State", "County"]
hierarchy.forEach(function(geo) {
    queue()
      .defer(d3.json, 'assets/data/geo/' + geo + '/' + geo + '.json')
      .defer(d3.csv,  'assets/data/geo/' + geo + '/' + geo + '_info.csv')
      .await(myFunc);
});

function myFunc(error, jsonData, csvData) {
    // need access to geo
    console.log(geo);

    myDictionary[geo].jsonData = jsonData;
    myDictionary[geo].csvData  = csvData;
}

1 个答案:

答案 0 :(得分:1)

我遇到了这个问题,因为我是在一个基于Debian构建的Docker实例中运行的。默认情况下,我没有在我正在运行的Debian版本中打包ffmpeg

根据@ LordNeckbeard上面的评论,我设法通过下载ffmpeg二进制文件来解决这个问题。我已将这些行添加到我的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

感谢。