मैं फ्रेम आकार कैसे बदलूं, संरक्षण चौड़ाई (ffmpeg का उपयोग करके)?


21

मैं इस StackExchange साइट के लिए नया हूँ, और FFmpeg एनकोडर का उपयोग करने के लिए। मेरे पास एक वीडियो है जो 720x480 (3: 2) है जिसे मैं 720x406 (16: 9) में बदलना चाहता हूं जो कि मेरे पास एक साइट के लिए अन्य वीडियो से मेल खाता है। मैंने विभिन्न कमांड संयोजनों की कोशिश की है, जिनमें शामिल हैं:

ffmpeg -i myfile.mv4 -s 720x406 outfile.mp4
ffmpeg -i myfile.m4v -c copy -aspect 16:9 outfile.mp4

मैं जिस चीज के साथ अंत करता हूं वह एक वीडियो है जो निर्दिष्ट ऊंचाई तक नीचे पहुंचा है, लेकिन चौड़ाई को संरक्षित नहीं करता है। यह 608x406 या उसके स्थान पर समाप्त होता है। मैं आज FFmpeg के विभिन्न GUI संस्करणों के साथ खेल रहा हूं, और वे भी यही काम करते दिख रहे हैं।

वांछित फ्रेम आकार को प्राप्त करने के लिए (कमांड लाइन के माध्यम से अधिक नियंत्रण होगा) मानने के लिए उचित विकल्प / पैरामीटर क्या होगा?

जवाबों:


36

स्केल फ़िल्टर का उपयोग यह करेगा, लेकिन इसके लिए थोड़ा अधिक है।

ffmpeg -i input.mov -vf scale=720x406 output.mov 

आवश्यक पिक्सेल आयामों के साथ एक फिल्म बनाएंगे, लेकिन यदि आप आउटपुट को देखते हैं, तो आप पाएंगे कि यह मेटाडेटा में जानकारी जोड़ता है, ताकि यह गैर-स्क्वायर पिक्सल का उपयोग करके मूल के समान पहलू अनुपात में वापस खेल सके। इसलिए यदि आप मूवी को एनामॉर्फिक रूप से एक नए पहलू पर फैलाना चाहते हैं, तो आपको पिक्सेल पहलू अनुपात को मैन्युअल रूप से सेट करने की आवश्यकता है, जिसे "नमूना पहलू अनुपात" के लिए SAR कहा जाता है, इस प्रकार वर्ग पिक्सेल उपयोग के लिए:

ffmpeg -i input.mov -vf scale=720x406,setsar=1:1 output.mov

वैकल्पिक रूप से आप डिस्प्ले आस्पेक्ट रेशियो को जो भी चाहें सेट कर सकते हैं, इस प्रकार:

ffmpeg -i input.mov -vf scale=720x406,setdar=16:9 output.mov

मैं -vf कमांड और x = y, z = के साथ क्या कर रहा हूं जो एक एक्सप्रेशन है जो फॉलो करता है वह फिल्टर की एक श्रृंखला बना रहा है । फिल्टर काफी जटिल हो सकते हैं, लेकिन सबसे सरल उपयोग में वे फॉर्म लेते हैं effect=parameter,nexteffect=anotherparameter, और आप उन्हें लिखने के क्रम में संसाधित होते हैं।

आप कोडेक और इतने पर, जैसे -c:v libx264x264 mp4 एनकोडर का उपयोग करने के लिए अतिरिक्त कमांड डालना चाह सकते हैं , और -crf 20निरंतर दर कारक को 20 पर सेट करना पसंद करते हैं (आमतौर पर आकार और गुणवत्ता के बीच एक बहुत अच्छा समझौता)। तो, एक पूरी तरह से आदेश की तरह दिखेगा:

ffmpeg -i input.mov -vf scale=720x406,setdar=16:9 -c:v libx264 -preset slow -profile:v main -crf 20 output.mov

मुख्य प्रोफ़ाइल डिवाइस संगतता के लिए अच्छा है, slowlibx264 एनकोडर के लिए प्रीसेट गति और गुणवत्ता का एक बहुत अच्छा संतुलन है, इसलिए यह एक अच्छा सामान्य वेब-एन्कोडिंग वर्कहॉर्स है। आप का उपयोग करके यह तेजी से कर सकते हैं fastया veryfastया के साथ धीमी veryslowऔर placeboकर देगा यह कभी तो थोड़ा की तुलना में बेहतर veryslowएक बहुत की कीमत अधिक प्रसंस्करण समय (इसलिए नाम) पर।

BTW -c प्रतिलिपि का उपयोग न करें , इसका मतलब है सिर्फ वीडियो और ऑडियो धाराओं नकल है कि उन्हें करने के लिए कुछ भी करने के बिना सब पर है, तो कुछ भी नहीं है आप पैमाने, कोडेक, बिटरेट आदि के मामले में किसी भी प्रभाव पड़ेगा।


1
यदि आप ffmpeg के हालिया संस्करणों का उपयोग कर रहे हैं, तो आपको x264 को किसी भी अधिक कोडेक के रूप में निर्धारित करने की आवश्यकता नहीं है, लेकिन यह अभी भी देखने योग्य हो सकता है कि आप क्या सेटिंग्स चाहते हैं।
स्टिब

1
मुझे लगता है कि मेटाडेटा में केवल एक डीएआर क्षेत्र होता है। तो उपयोग setsarअप्रत्यक्ष रूप से DAR सेट कर रहा है?
जिगगंजर

मुझे "-c कॉपी" का उपयोग करना है, लेकिन दूसरे पक्ष में मैं स्क्रीन का आकार बदलना चाहता हूं। इसे कैसे प्राप्त किया जा सकता है?
डॉ.अजकी

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