वीडियो फ़ाइल को पुनः एन्कोडिंग के बिना सही पहलू अनुपात


18

मेरे पास निम्नलिखित गुणों के साथ एक वीडियो स्ट्रीम है:

Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x416 [SAR 1:1 DAR 45:26], 1908 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc

जब मैं इसे वीएलसी में चलाता हूं, तो मुझे वीडियो को सही पहलू अनुपात के साथ बनाने के लिए "ए" को पहलू अनुपात को "4: 3" में बदलना होगा।

वीडियो तथ्यों को देखते हुए, क्या यह त्रुटि है कि a) वास्तविक वीडियो को पिक्सेल डेटा में गलत तरीके से बढ़ाया गया है, या b) बस कुछ मेटाडेटा मान है जो गलत तरीके से सेट किया गया है?

यदि पूर्व, मुझे पता है कि मैं वीडियो को फिर से एन्कोड कर सकता हूं और चौड़ाई और ऊंचाई बदल सकता हूं। लेकिन अगर बाद में, मैं वीडियो को फिर से एन्कोडिंग के बिना मेटाडेटा को ठीक करने के लिए क्या ffmpeg कमांड चलाता हूं?

जवाबों:


36

नमूना पहलू अनुपात (SAR) और प्रदर्शन पहलू अनुपात (DAR) के बीच अंतर है। यदि आप 4: 3 पर प्रदर्शित करने के लिए वीडियो बदलना चाहते हैं, तो आपको छवि में वास्तविक पिक्सेल (पिक्सेल को स्केल करके और एसएआर को बदलकर) बदलने की आवश्यकता होगी, या बाहरी स्तर पर बताने वाले कंटेनर स्तर पर एक मेटाडेटा ध्वज सेट करके मीडिया खिलाड़ियों को छवि को अपने वांछित DAR तक फैलाने के लिए।

आप वीडियो फ़िल्टर लागू किए बिना पिक्सल को स्केल करने और एसएआर को बदलने में सक्षम नहीं होंगे। यदि आप इस विधि को चुनते हैं, तो आपको फ़ाइल ट्रांसकोड करने की आवश्यकता होगी - क्योंकि आप वीडियो फ़िल्टर लागू करते समय वीडियो स्ट्रीम को "स्ट्रीम कॉपी" नहीं कर सकते।

छवि को स्केल करने और एसएआर (ट्रांसकोडिंग करते समय) बदलने के लिए, प्रयास करें:

ffmpeg -i <INPUT_FILE> -vf scale=720:540 -c:v <Video_Codec> <OUTPUT_FILE>

दूसरी ओर, यदि आप केवल मेटाडेटा ध्वज को बदलना चाहते हैं और DAR को समायोजित करना चाहते हैं, तो आप वीडियो को कॉपी करने में सक्षम होंगे। ऐसा करने के लिए, प्रयास करें:

ffmpeg -i <INPUT_FILE> -aspect 720:540 -c copy [OUTPUT_FILE]

अति उत्कृष्ट! पहलू को बदलते हुए सीधे काम किया!
18

2
आप -c copyएक ही समय में उपयोग और स्केल नहीं कर सकते हैं ; हालाँकि आप -aspectकंटेनर स्तर पर पहलू अनुपात को बदलने के लिए उपयोग कर सकते हैं (लेकिन स्ट्रीम स्तर नहीं)।
llogan

@LordNeckbeard का उपयोग -aspectकरते हुए प्लेबैक के लिए काम करता है ffplay, लेकिन WMP या MPC-HC में नहीं। यह Stream #…सूचना लाइन में एक अतिरिक्त SAR / DAR आइटम जोड़ता है FFmpeg/probe/playलेकिन सामान्य प्लेबैक के लिए समाधान नहीं लगता है। खिड़की के साथ वीडियो को खींचना एमपीसी-एचसी प्लेबैक के लिए सबसे आसान समाधान की तरह लगता है।
लूमी

MPEG2 के लिए मेरे लिए फिर से काम किए बिना काम नहीं किया
मिखाइल वी

मुझे नहीं पता कि यह मेरे लिए काम क्यों नहीं किया। यह सिर्फ वही वीडियो आउटपुट करता है!
टीना जे जूल

4

डेलगाडो का जवाब सही है कि MP4Box यह कर सकता है, लेकिन -parविकल्प वर्णित के रूप में काफी काम नहीं करता है। एक -outपैरामीटर के साथ (ताकि आपकी मूल फ़ाइल को परेशान न करें):

mp4box source.mp4 -out target.mp4 -par stream-number=width:height

जब आप उपयोग करते हैं -par stream-number=width:height, तो आप पिक्सेल पहलू अनुपात को परिभाषित करते हैं - अर्थात, डिवाइस पहलू अनुपात को भंडारण पहलू अनुपात से विभाजित करने का परिणाम है। (समान रूप से, आप स्रोत पिक्सेल के पहलू अनुपात का वर्णन कर रहे हैं।) उदाहरण के लिए, आपके पास एक डीवीडी स्रोत है जो 720 × 480 है, और सही प्रदर्शन पहलू अनुपात 4: 3 है। इस मामले के लिए, आपको चाहिए:

mp4box source.mp4 -out target.mp4 -par 1=8:9

क्योंकि (4/3) / (720/480) = 8/9।

यदि स्रोत सच्चे एसडी NTSC पिक्सल का प्रतिनिधित्व करता है (जिस स्थिति में केवल केंद्रीय 704 × 480 पिक्सेल को 4 × 3 स्क्रीन पर मैप करने के लिए माना जाता है, दोनों तरफ 8 पिक्सेल ओवरस्कैन के साथ), सही कमांड होगा:

mp4box source.mp4 -out target.mp4 -par 1=10:11

क्योंकि (4/3) / (704/480) = 10/11 - मानक परिभाषा NTSC वीडियो के लिए संदर्भ पिक्सेल पहलू अनुपात।

प्रश्न में दिए गए मामले के लिए, यदि यह वास्तव में 4: 3 है, तो यह बहुत ही विषम पिक्सेल पहलू अनुपात देता है: (4/3) / (720/416) = 104/135। यह 720 चौड़ा है, जो एक डीवीडी स्रोत का सुझाव देता है; यह एक 25 एफपीएस वीडियो है, जिसमें सुझाव दिया गया है PAL, लेकिन PAR 1 से कम काम करता है, NTSC का सुझाव देता है। यह 4: 5 हो सकता है, मुझे लगता है (104: 135 के बहुत करीब), लेकिन मुझे उस पिक्सेल पहलू अनुपात का उत्पादन करने वाली किसी भी चीज के बारे में पता नहीं है; हो सकता है कि पहले प्रयास करें, और फिर 3: 4 का प्रयास करें यदि यह अभी भी थोड़ा बहुत क्षैतिज रूप से फैला हुआ दिखता है। यदि आप निश्चित हैं कि यह वास्तव में 4: 3 है, तो बस 104: 135 का उपयोग करें।


3

ffmpeg के बिना फिर से एन्कोडिंग, MP4Box (के हिस्से के एक वीडियो स्ट्रीम के मापदंडों को बदल नहीं सकते gpac ) और mkvmerge कर सकते हैं। एक वीडियो स्ट्रीम और 4: 3 के वास्तविक / सही पहलू अनुपात के मामले में, आप कोशिश करना चाह सकते हैं:

MP4Box -par 1=3:4 VideoFile.mp4

    "-par" : PixelAspectRatio (adjusts DAR + SAR with respect to the video resolution)
    "1"=   : stream number
    "3:4"  : aspect ratio (lower number 1st!)
    Changes are directly applied to "VideoFile.mp4", no copy

पहले और बाद में सत्यापित करने के लिए: ffmpeg -i VideoFile.mp4


0

बदल रहा है एसएआर भी साथ काम करता है reencoding बिना ffmpegपर .mp4का उपयोग कर h264_metadataज्ञान के रूप में बताया यहाँ :

ffmpeg -i in.mp4 -c copy -bsf:v "h264_metadata=sample_aspect_ratio=4/3" out.mp4

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