我不确定为什么,但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_bytes
与In [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;
}
答案 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
感谢。