2016-07-16 16 views
0

Ich bin mir nicht sicher warum, aber avconv scheint nicht zu rohen Video wie ich es erwarten würde.Unterschied zwischen ffmpeg und avconv für rawvideo image2pipe

Ich versuche Pipe ein Video von ffmpeg in python (schließlich möchte ich von x11grab lesen, keine Videodatei). Es funktioniert gut auf meinem Macbook mit ffmpeg, aber wenn ich avconv auf Debian Jessie verwenden, schneidet der Stream früh ab!

Hier ist meine Grund Python, die this guide folgendes:

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 

auf dem Mac druckte die image.size ist die gleiche wie die input_bytes, 3072000. Aber auf debian, dann ist es 1015808. Irgendwelche Ideen, warum das sein könnte Ereignis?

Interessanterweise 3072000/1015808 ist nur etwa 3:

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

'acvonv' ist nicht äquivalent zu' ffmpeg'. Warum benutzt du nicht einfach 'ffmpeg'? Sie können einfach eine statische 'ffmpeg'-Binärdatei (http://johnvansickle.com/ffmpeg/) herunterladen und auf Ihr Skript verweisen. – LordNeckbeard

+0

Weil ich auf Debian bin und ich kann nicht herausfinden, wie man ffmpeg richtig installiert. :( – NHDaly

Antwort

1

Ich hatte dieses Problem, weil ich aus dem Inneren einer Docker Instanz leite, die weg von Debian gebaut wird. ffmpeg ist nicht standardmäßig in der Debian-Version, die ich gerade laufe, verpackt.

Ich habe es geschafft, dieses Problem zu beheben, indem Sie einfach eine ffmpeg Binärdatei herunterladen, laut @ LordNeckbeards Kommentar oben. Ich habe diese Zeilen zu meinem Dockerfile hinzugefügt, die das Problem für mich lösen:

# 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 

Dank.