क्विकटाइम FFmpeg द्वारा एन्कोडेड मूवी फ़ाइल क्यों नहीं चला सकता है? [डुप्लिकेट]


34

जब मैं एक फिल्म खोलने की कोशिश करता हूं, जिसे मैंने केवल कमांड के साथ बनाया है:

ffmpeg -pattern_type glob -i '*.JPG' -s 640x480 movie.mp4

मुझे QuickTime से एक त्रुटि मिलती है:

The document “movie.mp4” could not be opened.
The file may be damaged or may not be a movie file that is compatible with QuickTime Player.

मैंने iSight टाइम लैप्स से उत्पन्न छवियों के एक सेट पर उसी कमांड का उपयोग किया था, लेकिन इस मामले में उपरोक्त चित्र डिजिटल कैमरा से हैं। रिज़ॉल्यूशन बहुत अधिक है, लेकिन मैं इसे 640x480 तक बढ़ा रहा हूं और मुझे आउटपुट में ऐसा कुछ दिखाई नहीं देता जो किसी समस्या का संकेत दे:

Input #0, image2, from '*.JPG':
  Duration: 00:00:04.76, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj422p(pc), 4928x3264, 25 tbr, 25 tbn, 25 tbc

बनाम काम करने वाली फिल्म:

Input #0, image2, from '*.JPG':
  Duration: 00:01:23.72, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj420p(pc), 640x480 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc

और आउटपुट के लिए:

Output #0, mp4, to 'movie.mp4':
  Metadata:
    encoder         : Lavf55.19.104
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj422p, 640x480, q=-1--1, 12800 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg -> libx264)

बनाम काम करने वाले के लिए:

Output #0, mp4, to 'movie.mp4':
  Metadata:
    encoder         : Lavf55.19.104
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj420p, 640x480 [SAR 1:1 DAR 4:3], q=-1--1, 12800 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg -> libx264)

वर्किंग मूवी के अलावा और निचले स्रोत के रिज़ॉल्यूशन में, एकमात्र अंतर जो मैं देख सकता हूं, वह यह है कि वीडियो स्ट्रीम में उल्लिखित एक अतिरिक्त "[SAR 1: 1 DAR 4: 3]" है, लेकिन मुझे नहीं पता कि यह क्या है गैर-काम करने वाली फिल्म में इसे लागू करने की कोशिश कैसे की जाती है।

अपडेट: मैंने अभी VLC डाउनलोड किया है और यह फिल्म को ठीक से बजाता है। इसलिए मुझे पता है कि ffmpeg यहां गलती पर नहीं है।


2
भविष्य के लिए, जब ffmpeg के बारे में पूछा जाए, तो कृपया पूर्ण, बिना काटे कमांड लाइन आउटपुट को शामिल करें। यह आपको कुछ खिलाड़ियों के साथ संगत नहीं होने के कारण पिक्सेल प्रारूप के बारे में कुछ बताना चाहिए था, अगर मैं गलत नहीं हूं (और यदि आपके पास हाल ही में संस्करण है)।
18

ffprobe video.mp4यह जांचने के लिए उपयोग किया जा सकता है कि कौन सा पिक्सेल प्रारूप उपयोग किया जाता है।
l --marc l

जवाबों:


47

इस StackOverflow के जवाब के आधार पर मैं -pix_fmt yuv420pइस तरह से आपके आदेश में जोड़ देगा ; टिप्पणियों में से एक को जोड़ने का उल्लेख है,-vcodec libx264 इसलिए यह यहां शामिल है:

ffmpeg -pattern_type glob -i '*.JPG' -vcodec libx264 -s 640x480 \
-pix_fmt yuv420p movie.mp4

या आप प्रारूप फ़िल्टर का उपयोग कर सकते हैं । यह उदाहरण इसके बजाय स्केल फ़िल्टर का उपयोग करेगा -s, और इसके बजाय प्रारूप फ़िल्टर -pix_fmt:

ffmpeg -pattern_type glob -i '*.JPG' -vcodec libx264 \
-vf scale=640:-2,format=yuv420p movie.mp4

शीर्षक "गूंगा खिलाड़ियों के लिए एन्कोडिंग" के तहत आधिकारिक एफएफएमपी विकी में भी विस्तृत ; जोर मेरा:

आपको -pix_fmt yuv420pQuickTime और अधिकांश अन्य खिलाड़ियों में काम करने के लिए अपने आउटपुट के लिए उपयोग करने की आवश्यकता हो सकती है । ये खिलाड़ी केवल H.264 वीडियो के लिए 4: 2: 0 क्रोमा सबसम्पलिंग के साथ YUV प्लानर कलर स्पेस का समर्थन करते हैं। अन्यथा, आपके स्रोत के आधार पर, ffmpeg एक पिक्सेल प्रारूप में आउटपुट हो सकता है जो इन खिलाड़ियों के साथ असंगत हो सकता है।


6
दरअसल, ffmpeg yuv422p की डिफ़ॉल्ट एन्कोडिंग का चयन कर रहा था जो क्विकटाइम को परेशान करता है। -pix_fmt yuv420pमेरे लिए इसे हल जोड़ना !
निक डेसालनिअर्स

केवल पहला समाधान मेरे लिए काम किया
पीआर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.