2008-09-15 100 views
7

मैं चाहता हूं कि मेरी वेबसाइट FLV फ़ाइलों में कुछ वेबकैम रिकॉर्डिंग में शामिल हो (जैसे यह एक)। यह उपयोगकर्ता इनपुट के बिना लिनक्स पर किया जाना चाहिए। मैं यह कैसे करु? सादगी के लिए, मैं एक ही फ्लॉव का उपयोग एक फ्लॉव प्राप्त करने की आशा में दोनों इनपुट के रूप में करूंगा जो एक ही पंक्ति में दो बार खेलता है।वेबकैम में शामिल होने के लिए कैसे करें FLVs

यह इतना आसान होना चाहिए, है ना? ffmpeg FAQ में एक पूर्ण कोड उदाहरण भी है।

ठीक है, पाइप मुझे समस्याएं दे रहे हैं (दोनों मेरे मैक चल रहे तेंदुए और उबंटू 8.04 पर) तो चलिए इसे सरल रखें और सामान्य फ़ाइलों का उपयोग करें। इसके अलावा, अगर मैं 15 एफपीएस की दर निर्दिष्ट नहीं करता हूं, तो दृश्य भाग extremely fast चलाता है। उदाहरण स्क्रिप्ट इस प्रकार बन जाती है:

ffmpeg -i input.flv -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 \ 
    - > temp.a < /dev/null 
ffmpeg -i input.flv -an -f yuv4mpegpipe - > temp.v < /dev/null 
cat temp.v temp.v > all.v 
cat temp.a temp.a > all.a 
ffmpeg -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \ 
    -f yuv4mpegpipe -i all.v -sameq -y output.flv 

ठीक है, इसका उपयोग ऑडियो के लिए काम करेगा, लेकिन मुझे केवल पहली बार वीडियो मिल जाएगा। यह इनपुट 5flv के रूप में फेंकने वाले किसी भी FLV के मामले में होता है, जिसमें मूवी टीज़र शामिल हैं जो लाल 5 के साथ आते हैं।

ए) उदाहरण स्क्रिप्ट विज्ञापन के रूप में क्यों काम नहीं करती है, विशेष रूप से मुझे उन सभी वीडियो क्यों नहीं मिलते हैं जिन्हें मैं उम्मीद कर रहा हूं?

बी) मुझे फ़्रेमेट निर्दिष्ट क्यों करना है जबकि Wimpy प्लेयर सही गति पर FLV चला सकता है?

दो flvs में शामिल होने का एकमात्र तरीका मेनकोडर का उपयोग करना था। समस्या यह है, mencoder flvs शामिल होने के लिए प्रतीत नहीं होता:

mencoder input.flv input.flv -o output.flv -of lavf -oac copy \ 
-ovc lavc -lavcopts vcodec=flv 

मैं एक चल बिन्दु अपवाद मिलता है ...

MEncoder 1.0rc2-4.0.1 (C) 2000-2007 MPlayer Team 
CPU: Intel(R) Xeon(R) CPU 5150 @ 2.66GHz (Family: 6, Model: 15, Stepping: 6) 
CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1 
Compiled for x86 CPU with extensions: MMX MMX2 SSE SSE2 

success: format: 0 data: 0x0 - 0x45b2f 
libavformat file format detected. 
[flv @ 0x697160]Unsupported audio codec (6) 
[flv @ 0x697160]Could not find codec parameters (Audio: 0x0006, 22050 Hz, mono) 
[lavf] Video stream found, -vid 0 
[lavf] Audio stream found, -aid 1 
VIDEO: [FLV1] 240x180 0bpp 1000.000 fps 0.0 kbps (0.0 kbyte/s) 
[V] filefmt:44 fourcc:0x31564C46 size:240x180 fps:1000.00 ftime:=0.0010 
** MUXER_LAVF ***************************************************************** 
REMEMBER: MEncoder's libavformat muxing is presently broken and can generate 
INCORRECT files in the presence of B frames. Moreover, due to bugs MPlayer 
will play these INCORRECT files as if nothing were wrong! 
******************************************************************************* 
OK, exit 
Opening video filter: [expand osd=1] 
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1 
========================================================================== 
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family 
Selected video codec: [ffflv] vfm: ffmpeg (FFmpeg Flash video) 
========================================================================== 
audiocodec: framecopy (format=6 chans=1 rate=22050 bits=16 B/s=0 sample-0) 
VDec: vo config request - 240 x 180 (preferred colorspace: Planar YV12) 
VDec: using Planar YV12 as output csp (no 0) 
Movie-Aspect is undefined - no prescaling applied. 
videocodec: libavcodec (240x180 fourcc=31564c46 [FLV1]) 
VIDEO CODEC ID: 22 
AUDIO CODEC ID: 10007, TAG: 0 
Writing header... 
[NULL @ 0x67d110]codec not compatible with flv 
Floating point exception 

ग) वहाँ mencoder एनकोड flvs को डिकोड और सही ढंग से करने के लिए एक तरीका है? वहाँ

ffmpeg -i input.flv -vcodec rawvideo -acodec pcm_s16le -r 15 file.avi 
mencoder -o output.avi -oac copy -ovc copy -noskip file.avi file.avi 
ffmpeg -i output.avi output.flv 

घ):

तो एक ही रास्ता मैं अब तक flvs शामिल होने के लिए मिल गया है, flv और avi बीच आगे और पीछे जाने के लिए ffmpeg उपयोग करने के लिए, और mencoder का उपयोग एविस शामिल होने के लिए है इसे प्राप्त करने के लिए एक बेहतर तरीका होना चाहिए ... कौन सा?

ई) फ़्रेमेट की समस्या के कारण, हालांकि, निरंतर फ्रेमरेट के साथ केवल flvs (जैसे मैंने facebook के माध्यम से रिकॉर्ड किया है) को एविस में सही ढंग से परिवर्तित कर दिया जाएगा, लेकिन यह उन flvs के लिए काम नहीं करेगा जो मुझे लगता है रिकॉर्डिंग (जैसे this one या this one)। क्या इन flvs के लिए भी ऐसा करने का कोई तरीका है?

किसी भी मदद की बहुत सराहना की जाएगी।

+0

यह है कि मेनकोडर में शून्य से विभाजित है? – rogerdpack

उत्तर

4

मैंने सोचा कि यह रूबी में इसे फिर से लिखने के लिए एक अच्छा सीखने का अभ्यास होगा।

यह था।

छह महीने बाद और तीन रत्न बाद में, here's the released product

मैं अभी भी इस पर थोड़ा सा काम कर रहा हूं, लेकिन यह काम करता है।

0

आपको यहां एक बहुत ही सूक्ष्म समस्या का सामना करना पड़ेगा क्योंकि अधिकांश वीडियो और ऑडियो प्रारूप (विशेष रूप से साधारण कंटेनरों में) "ग्लोबल हेडर" का उपयोग करते हैं, जिसका मतलब है कि फ़ाइल की शुरुआत में उनका एक ही शीर्षलेख होता है जो संपीड़न की जानकारी निर्दिष्ट करता है (जैसे चौड़ाई , ऊंचाई, आदि) पूरी फाइल के लिए। दो धाराओं को जोड़ना स्पष्ट रूप से असफल हो जाएगा, क्योंकि अब इसके बजाय दो शीर्षलेख होंगे और मक्सर इसे पसंद नहीं कर सकता है। एवीआई में कनवर्ट करना शायद आपके मामले में इस मुद्दे को हल कर रहा है क्योंकि मेनकोडर में एबीआई को संगत करने के लिए कोड है - वह कोड हेडर समस्या को सही तरीके से संभालता है।

+0

मैंने अपने पाठ को "concatenate" के बजाय "शामिल" करने के लिए संपादित किया है। –

-2

नहीं पता है, तो यह वास्तव में काम करेंगे, लेकिन इस आदेश का उपयोग कर प्रयास करें:

cat yourVideos/*.flv >> big.flv 

यह शायद कि आदेश उपयोग को क्रियान्वित करने के बाद ऐसा मेटा जानकारी को नुकसान पहुंचा "flvtool" के लिए (रूबी स्क्रिप्ट आप इसे गूगल के साथ मिल सकता है) इसे ठीक करो।

+0

जैसा कि डार्क शिकारी द्वारा इंगित किया गया है, यह काम नहीं करेगा। मेटाडाटा जानकारी को रीसेट किया जा सकता है, लेकिन अतिरिक्त शीर्षलेख होंगे जो परिणामस्वरूप फ़ाइल को दूषित कर देंगे। यहां तक ​​कि अगर हम अतिरिक्त शीर्षलेख छोड़ते हैं, तो ऑडियो और वीडियो ब्लॉक में टाइमस्टैम्प होते हैं जिन्हें ऑफसेट करने की आवश्यकता होती है। –

0

मेनकोडर की मेलिंग सूची पर मेरा प्रश्न पोस्ट करने के बाद, अन्य चीजों की कोशिश करने के बाद, मैंने अपना खुद का टूल लिखने का प्रयास किया! मैंने flvtool से शुरू किया और कोड में कुछ खोदने और कोड की 40 पंक्तियों को लिखने के बाद, यह गुणवत्ता में कोई हानि नहीं होने के कारण काम करता है (क्योंकि कोई ट्रांसकोडिंग नहीं है)।

मैं इसे एएसपी जारी करूंगा, इस बीच कोई दिलचस्पी रखने वाले मुझसे संपर्क कर सकता है।

+2

कृपया अपने प्रश्न के लिए उन 40 लाइनों को जोड़ें और इसे बंद करें। – bzlm

+0

या बेहतर अभी तक, इसके लिए एक प्रोजेक्ट शुरू करें <यहां अपना पसंदीदा ओपन-सोर्स रिपोजिटरी डालें>। – Jacob

+0

चूंकि मैं अपने उत्तरों पर 'उत्तर स्वीकार नहीं कर सकता', मुझे यकीन नहीं है कि मैं इस प्रश्न को कैसे बंद कर सकता हूं ... –