में छवियों की एक श्रृंखला को एन्कोड करें मैं एंड्रॉइड पर छवियों/फ़ोटो की श्रृंखला से वीडियो फ़ाइल कैसे बना सकता हूं? क्या यह वर्तमान एसडीके के साथ किया जा सकता है? या मुझे कोडेक लाइब्रेरी चाहिए?वीडियो
वीडियो
उत्तर
मैं मार्क से सहमत हूं। सी/सी ++ पुस्तकालयों में ffmpeg here या X264 here हैं। मुझे कहना है कि मैंने उन्हें या एंड्रॉइड एनडीके का उपयोग करने में आसान नहीं पाया है, लेकिन शायद यह इसलिए है क्योंकि मुझे वास्तव में सी/सी ++ और जेएनआई के बारे में बहुत कुछ पता नहीं है। यदि आप इस मार्ग में रूचि रखते हैं, तो एंड्रॉइड के लिए रॉकप्लेयर फ्री ऐप में एंड्रॉइड पर उपयोग के लिए तैयार ffmpeg से पूर्व-निर्मित साझा पुस्तकालय हैं। वे दावा करते हैं कि इन पुस्तकालयों में केवल एलजीपीएल घटकों का उपयोग होता है, लेकिन मुझे लगता है कि आपको इस पर खुद को संतुष्ट करना होगा। जावा के संबंध में, ffmpeg नामक एक बंदरगाह (प्रकार) है, जिसे बिना किसी आश्चर्यजनक रूप से, jffmpeg कहा जाता है जिसे आप here तक एक्सेस कर सकते हैं लेकिन यह अभी भी मौजूदा Ffmpeg ढांचे में से अधिकांश को कॉल करता है, इसलिए आप वापस एनडीके भूमि में हैं। जावा मीडिया फ्रेमवर्क (जेएमएफ) के साथ छवियों की एक श्रृंखला को वीडियो में परिवर्तित करना संभव है लेकिन इसमें निम्नलिखित दोष हैं:
- वीडियो स्वरूपों की सीमित संख्या।
- वीडियो का उत्पादन नहीं करता है जिसे अधिकतर (यदि नहीं सभी) एंड्रॉइड फोन पर खेला जा सकता है उदा। एच 264 या एमपीईजी 4।
- जेएमएफ कोड अब काफी पुराना है, लंबे समय तक प्रगति नहीं हुई है, फूला हुआ है और अच्छी तरह से संरचित नहीं है इसलिए अतिरिक्त जावा निर्भरताएं हो सकती हैं जो एंड्रॉइड में पैक नहीं की जाती हैं।
मैंने देखा एक और विकल्प एडोब एयर है, लेकिन यह 17 एमबी पेलोड है जो कुछ उपयोगकर्ता शिकायत करते हैं।
ffmpeg और एंड्रॉइड एनडीके के बारे में स्टैक ओवरफ़्लो पर कई अन्य प्रश्न हैं।
परियोजना के साथ शुभकामनाएं।
मैं एडोब एयर के साथ ऐसा कैसे कर सकता हूं? –
@Ilya_Gazman क्षमा करें, मुझे एडोब एयर के साथ कोई अनुभव नहीं है। जब मैं इस विषय पर शोध कर रहा था तो मैं बस इसके कुछ संदर्भों में आया था। –
मैं देखता हूं। मैं ऐसा नहीं करता जो उनके साथ संभव है। मैं किसी भी एयर लाइब्रेरी से परिचित नहीं हूं जो ऐसा कर सकता है। –
इसके लिए कोई अंतर्निहित समर्थन नहीं है। आपको या तो कुछ जावा स्रोत कोड मिलना होगा जो आपको चाहिए, या कुछ सी/सी ++ कोड जो आप लाइब्रेरी में बदल सकते हैं और एनडीके के माध्यम से उपयोग कर सकते हैं। या, यदि अंतिम लक्ष्य वीडियो के लिए सर्वर पर होना है, तो छवियों/फ़ोटो अपलोड करें और सर्वर को वीडियो बनाएं।
ffmpeg
आपका बचाव रेंजर है। आप एंड्रॉइड के लिए एफएफएमपीईजी पोर्ट डाउनलोड कर सकते हैं। अधिक जानकारी के लिए FFmpeg on Android पर सवाल देखें।
बंदरगाह लगभग हर चीज का समर्थन करता है जिसे आपको कभी भी आवश्यकता होगी, प्रारूपों सहित - इनपुट छवि प्रारूप जीआईएफ, जेपीजी, पीएनजी, बीएमपी इत्यादि और आउटपुट वीडियो प्रारूपों को एवीआई, एमपी 4 (कंटेनर) के साथ कई कोडेक्स के साथ।
मेरी सभी सीचिंग में मुझे एंड्रॉइड के लिए ffmpeg पोर्ट नहीं मिला। मुझे लगता है कि आपको ffmpeg, run.config को डाउनलोड करना था (लक्ष्य ओएस के लिए और जो भी कोडेक्स आप चाहते थे) और फिर इसे एक साझा लाइब्रेरी में बनाया गया था जिसे आपको कॉल करने के लिए जेएनआई रैपर लिखना पड़ा था - मानते हुए कि आपको रास्ते में कोई त्रुटि नहीं मिली है। शायद आप इस ffmpeg बंदरगाह के डाउनलोड के लिए एक लिंक साझा करने के लिए पर्याप्त होगा? –
आप जेसीओडीसी (http://jcodec.org) नामक एक मुक्त ओपन सोर्स लाइब्रेरी का उपयोग कर सकते हैं जिसमें कुछ लोकप्रिय वीडियो प्रारूपों और कोडेक्स के शुद्ध जावा कार्यान्वयन शामिल हैं, जिनमें शामिल हैं: एच .264 (एवीसी), एमपीईजी 1/2, ऐप्पल प्रोआरएस, जेपीईजी, एमपी 4 (आईएसओ बीएमएफ), एमपीईजी पीएस, एमपीईजी टीएस, Matroska।
public class SequenceEncoder {
private SeekableByteChannel ch;
private Picture toEncode;
private RgbToYuv420 transform;
private H264Encoder encoder;
private ArrayList<ByteBuffer> spsList;
private ArrayList<ByteBuffer> ppsList;
private CompressedTrack outTrack;
private ByteBuffer _out;
private int frameNo;
private MP4Muxer muxer;
public SequenceEncoder(File out) throws IOException {
this.ch = NIOUtils.writableFileChannel(out);
// Transform to convert between RGB and YUV
transform = new RgbToYuv420(0, 0);
// Muxer that will store the encoded frames
muxer = new MP4Muxer(ch, Brand.MP4);
// Add video track to muxer
outTrack = muxer.addTrackForCompressed(TrackType.VIDEO, 25);
// Allocate a buffer big enough to hold output frames
_out = ByteBuffer.allocate(1920 * 1080 * 6);
// Create an instance of encoder
encoder = new H264Encoder();
// Encoder extra data (SPS, PPS) to be stored in a special place of
// MP4
spsList = new ArrayList<ByteBuffer>();
ppsList = new ArrayList<ByteBuffer>();
}
public void encodeImage(BufferedImage bi) throws IOException {
if (toEncode == null) {
toEncode = Picture.create(bi.getWidth(), bi.getHeight(), ColorSpace.YUV420);
}
// Perform conversion
for (int i = 0; i < 3; i++)
Arrays.fill(toEncode.getData()[i], 0);
transform.transform(AWTUtil.fromBufferedImage(bi), toEncode);
// Encode image into H.264 frame, the result is stored in '_out' buffer
_out.clear();
ByteBuffer result = encoder.encodeFrame(_out, toEncode);
// Based on the frame above form correct MP4 packet
spsList.clear();
ppsList.clear();
H264Utils.encodeMOVPacket(result, spsList, ppsList);
// Add packet to video track
outTrack.addFrame(new MP4Packet(result, frameNo, 25, 1, frameNo, true, null, frameNo, 0));
frameNo++;
}
public void finish() throws IOException {
// Push saved SPS/PPS to a special storage in MP4
outTrack.addSampleEntry(H264Utils.createMOVSampleEntry(spsList, ppsList));
// Write MP4 header and finalize recording
muxer.writeHeader();
NIOUtils.closeQuietly(ch);
}
public static void main(String[] args) throws IOException {
SequenceEncoder encoder = new SequenceEncoder(new File("video.mp4"));
for (int i = 1; i < 100; i++) {
BufferedImage bi = ImageIO.read(new File(String.format("folder/img%08d.png", i)));
encoder.encodeImage(bi);
}
encoder.finish();
}
}
- 1. वीडियो व्यू लूपिंग वीडियो
- 2. एंड्रॉइड वीडियो व्यू - वीडियो
- 3. वीडियो
- 4. वीडियो
- 5. वीडियो बदलें एचटीएमएल 5 वीडियो
- 6. ऑटोस्टार्ट + लूप वीडियो यूट्यूब वीडियो
- 7. वीडियो प्ले करें जब वीडियो usinng mediaplayer
- 8. .avi वीडियो
- 9. वीडियो यूआरएल
- 10. वीडियो कॉल
- 11. एक वीडियो
- 12. वीडियो यूआरएल
- 13. वीडियो एंड्रॉयड
- 14. वीडियो व्याख्यान
- 15. वीडियो AVFoundation
- 16. यूट्यूब वीडियो
- 17. UIImagePickerController: वीडियो
- 18. वीडियो बफरिंग
- 19. HTML5 वीडियो
- 20. वीडियो व्यू
- 21. कैमरा वीडियो
- 22. iOS: वीडियो
- 23. वीडियो व्यू
- 24. वीडियो व्यू
- 25. प्रदर्शन वीडियो
- 26. उस वीडियो के वीडियो आईडी से डेलीमोशन वीडियो से वीडियो थंबनेल कैसे प्राप्त करें जैसे यूट्यूब में?
- 27. एचटीएमएल 5 वीडियो जावास्क्रिप्ट नियंत्रण - वीडियो को पुनरारंभ करें
- 28. वीडियो अनुक्रम को वीडियो फ़ाइल में कनवर्ट करें एंड्रॉइड जावा
- 29. वीडियो रोकना एचटीएमएल 5 वीडियो टैग में ऑडियो नहीं रोकता
- 30. एंड्रॉइड वीडियो व्यू में यूट्यूब वीडियो कैसे प्रदर्शित करें?
मैं [मल्टीमीडिया सिस्टम के लिए StackOverflow] में यह सवाल (http://area51.stackexchange.com/proposals पूछने के लिए सुझाव देते हैं:
आप उसे नीचे को सुधार वर्ग का उपयोग कर सकते JCodec निम्न स्तर एपीआई का इस्तेमाल/91149/मल्टीमीडिया-सिस्टम) – Hamed