我想捕獲ffmpeg的輸出並將其存儲在內存中,稍後決定是否將其寫入磁盤。在存儲它之前捕獲python中的FFmpeg輸出
是否可以在將其寫入硬盤之前分析ffmpeg的輸出?
因爲我不知道如何處理這件事,我還不能提供一個代碼示例。
編輯: 是的,我想寫入捕獲的avi/mp4的小塊到RAM並分析它們,然後寫入光盤。
我想捕獲ffmpeg的輸出並將其存儲在內存中,稍後決定是否將其寫入磁盤。在存儲它之前捕獲python中的FFmpeg輸出
是否可以在將其寫入硬盤之前分析ffmpeg的輸出?
因爲我不知道如何處理這件事,我還不能提供一個代碼示例。
編輯: 是的,我想寫入捕獲的avi/mp4的小塊到RAM並分析它們,然後寫入光盤。
重定向的ffmpeg的輸出是你的流程的輸入使用以下命令:
ffmpeg -i inputfile [ ... options ... ] 2>&1 | your-process
在您的進程將數據獲取到標準輸入。
例如:
ffmpeg -y -i inputfile -acodec copy -vcodec copy outputfile 2>&1 | cat
如果你的意思是捕獲視頻輸出,我認爲不是,因爲它需要很多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
它不是一個完美的解決方案,但你可以解析輸出。
這是一個非常相關的問題:http://stackoverflow.com/questions/3995374/using-ffmpeg-to-determine-video-type-converting-afterwards –
您也可以從python創建ffmpeg進程並直接使用它的輸出。反過來,我用這種方法取得了成功,用ffmpeg提供幀來壓縮內存。其中工作得很好。 – rotoglup
@rotoglup對,但我想知道如何或者甚至這種技術如何處理複雜的編碼,如x264,其中大多數幀是p和b幀......如果是這樣,這可能是更好的方法! – EladG
今天晚上我會試試看,如果有效的話。謝謝:) – tarrasch