2012-06-13 194 views
1

我想捕获ffmpeg的输出并将其存储在内存中,稍后决定是否将其写入磁盘。在存储它之前捕获python中的FFmpeg输出

是否可以在将其写入硬盘之前分析ffmpeg的输出?

因为我不知道如何处理这件事,我还不能提供一个代码示例。

编辑: 是的,我想写入捕获的avi/mp4的小块到RAM并分析它们,然后写入光盘。

回答

2

重定向的ffmpeg的输出是你的流程的输入使用以下命令:

ffmpeg -i inputfile [ ... options ... ] 2>&1 | your-process 

在您的进程将数据获取到标准输入。

例如:

ffmpeg -y -i inputfile -acodec copy -vcodec copy outputfile 2>&1 | cat 
+0

您也可以从python创建ffmpeg进程并直接使用它的输出。反过来,我用这种方法取得了成功,用ffmpeg提供帧来压缩内存。其中工作得很好。 – rotoglup

+0

@rotoglup对,但我想知道如何或者甚至这种技术如何处理复杂的编码,如x264,其中大多数帧是p和b帧......如果是这样,这可能是更好的方法! – EladG

+0

今天晚上我会试试看,如果有效的话。谢谢:) – tarrasch

0

如果你的意思是捕获视频输出,我认为不是,因为它需要很多ram,所以最好使用临时文件并跟踪它。

如果您的意思是从输出文件中捕获信息,请尝试使用ffmpeg -i /some/file.avi而没有任何其他参数,这会转储很多关于视频文件的信息。

例子:

dorkbot:~ lamer1$ ffmpeg -i ~/Downloads/Dead\ Gerhardsens\ -\ They\ dont\ know.mp4 
ffmpeg version 0.7.8, Copyright (c) 2000-2011 the FFmpeg developers 
    built on Nov 24 2011 14:31:00 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3) 
    configuration: --prefix=/opt/local --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libdirac --enable-libschroedinger --enable-libopenjpeg --enable-libxvid --enable-libx264 --enable-libvpx --enable-libspeex --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/gcc-4.2 --arch=x86_64 --enable-yasm 
    libavutil 50. 43. 0/50. 43. 0 
    libavcodec 52.123. 0/52.123. 0 
    libavformat 52.111. 0/52.111. 0 
    libavdevice 52. 5. 0/52. 5. 0 
    libavfilter 1. 80. 0/1. 80. 0 
    libswscale 0. 14. 1/0. 14. 1 
    libpostproc 51. 2. 0/51. 2. 0 

Seems stream 1 codec frame rate differs from container frame rate: 50000.00 (50000/1) -> 25.00 (25/1) 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/lamer1/Downloads/Dead Gerhardsens - They dont know.mp4': 
    Metadata: 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isomavc1mp42 
    creation_time : 2008-07-01 00:53:26 
    Duration: 00:01:37.76, start: 0.000000, bitrate: 303 kb/s 
    Stream #0.0(und): Audio: aac, 44100 Hz, stereo, s16, 125 kb/s 
    Metadata: 
     creation_time : 2008-07-01 00:53:26 
    Stream #0.1(und): Video: h264 (Baseline), yuv420p, 384x288 [PAR 1:1 DAR 4:3], 175 kb/s, 25 fps, 25 tbr, 25k tbn, 50k tbc 
    Metadata: 
     creation_time : 2008-07-01 00:53:26 
At least one output file must be specified 

它不是一个完美的解决方案,但你可以解析输出。

+0

这是一个非常相关的问题:http://stackoverflow.com/questions/3995374/using-ffmpeg-to-determine-video-type-converting-afterwards –

0

您可以使用Pyffmpeg库从python中直接调用ffmpeg。

+0

HM这可能工作,但是从2011年开始。你能举一个例子吗? – tarrasch