गुणवत्ता को बनाए रखते हुए ffmpeg का उपयोग करते हुए 4k से 1080p तक नीचे कैसे जाएं?


21

मेरे पास MP4 प्रारूप में कुछ 4K 3840x2160 फुटेज हैं जिन्हें मुझे 1080p पर लाने की आवश्यकता है। मैंने दौड़ने की कोशिश की

ffmpeg -i orig.mp4 -vf scale=1920:1080 smaller.mp4  

लेकिन परिणाम बहुत खराब गुणवत्ता वाला है, जिसकी पूरी छवि वर्ग "टाइल्स" से बनी है जैसे कि मैं 4: 1 का आवर्धन कर रहा था।

यहाँ इस कमांड को चलाने का आउटपुट दिया गया है:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'origs/P1000003.MP4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42avc1
    creation_time   : 2015-02-19 17:10:38
  Duration: 00:05:14.48, start: 0.000000, bitrate: 95903 kb/s
    Stream #0.0(und): Video: h264 (High), yuvj420p, 3840x2160 [PAR 1:1 DAR 16:9], 95792 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
    Metadata:
      creation_time   : 2015-02-19 17:10:38
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 125 kb/s
    Metadata:
      creation_time   : 2015-02-19 17:10:38
Incompatible pixel format 'yuvj420p' for codec 'mpeg4', auto-selecting format 'yuv420p'
[buffer @ 0x22a3420] w:3840 h:2160 pixfmt:yuvj420p
[scale @ 0x22a3ce0] w:3840 h:2160 fmt:yuvj420p -> w:1920 h:1080 fmt:yuv420p flags:0x4
Output #0, mp4, to '1-short.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42avc1
    creation_time   : 2015-02-19 17:10:38
    encoder         : Lavf53.21.1
    Stream #0.0(und): Video: mpeg4, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 tbn, 25 tbc
    Metadata:
      creation_time   : 2015-02-19 17:10:38
    Stream #0.1(und): Audio: libvo_aacenc, 48000 Hz, stereo, s16, 200 kb/s
    Metadata:
      creation_time   : 2015-02-19 17:10:38
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press ctrl-c to stop encoding
frame=  125 fps=  6 q=31.0 Lsize=     968kB time=5.00 bitrate=1586.7kbits/s    
video:842kB audio:123kB global headers:0kB muxing overhead 0.421047%

मुझे अनुभव से पता है कि ffmpeg एक उत्कृष्ट उपकरण है, इसलिए मुझे विकल्प / मापदंडों को किसी तरह खराब करना चाहिए ...

मैं यह कैसे कर सकता हूँ?


कृपया अपने कमांड से पूर्ण, पूर्ण कंसोल आउटपुट दिखाएं। आप बस एक छोटे खंड को एन्कोड कर सकते हैं, इसलिए -t 1010 सेकंड का आउटपुट बनाने के लिए जोड़ें । आप डाउनस्केल क्यों करना चाहते हैं? आपके स्केल किए गए आउटपुट के लिए उपयोग का मामला क्या है? यह जानकारी मुझे अधिक सटीक उत्तर प्रदान करने में मदद करेगी।
१०:२२ बजे

@LordNeckbeard मैंने अभी कंसोल आउटपुट को जोड़ा है। मैं डाउनस्केल करना चाहता हूं ताकि मैं इन क्लिप को उन लोगों के साथ आसानी से साझा कर सकूं जो मेरे साथ काम कर रहे हैं।
लारा माइकल्स

1
मत भूलना -c:a copy, क्योंकि आप ऑडियो स्ट्रीम को फिर से एनकोड करना चाहते हैं या नहीं करना चाहते हैं। -map 0किसी भी अध्याय मेटाडेटा, या अन्य सामान की प्रतिलिपि बनाने के लिए उपयोग करें । (ffmpeg केवल डिफ़ॉल्ट रूप से 1 vid + 1 ऑड लेता है।)
पीटर कॉर्ड्स

1
इसके अलावा, -sws_flags lanczos+print_infoडिफ़ॉल्ट (बिलिनियर मुझे लगता है) की तुलना में बेहतर स्केलिंग एल्गो का उपयोग करेगा। stlb का उत्तर प्रक्रिया के वीडियो एन्कोडिंग भाग को कवर करता है।
पीटर कॉर्ड्स

2
, वैकल्पिक रूप से @PeterCordes scale=1920:-2:flags=lanczos। मैं -2अपने गैर-मौजूद उत्तर में पैमाने का उल्लेख करने जा रहा था । उन लोगों के लिए जो आपको नहीं जानते हैं कि आप -2चौड़ाई या ऊँचाई में डाल सकते हैं , और यह स्वचालित रूप से पहलू अनुपात को संरक्षित करते हुए सही मान प्रदान करेगा और मान को 2 से विभाज्य बना देगा (yuv420p आउटपुट के लिए libx264 द्वारा आवश्यक)।
18

जवाबों:


17

Ffmpeg के लिए डिफ़ॉल्ट सेटिंग्स बहुत कम गुणवत्ता वाली हैं, और चूंकि आप किसी भी कोडेक या गुणवत्ता के मापदंडों को निर्दिष्ट नहीं करते हैं, यह सिर्फ चूक का उपयोग कर रहा है (मुझे नहीं पता कि देवता इसे ठीक क्यों नहीं करते हैं क्योंकि यह मंचों पर बहुत सारे सवाल पैदा करता है हर जगह)।

संपादित करें : चूक अब काफी समझदार हैं। Ffmpeg के हालिया निर्माण के साथ आपको अच्छे प्रयोग करने योग्य परिणाम प्राप्त करने के लिए इनपुट और आउटपुट फाइलों से अधिक कुछ भी निर्दिष्ट करने की आवश्यकता नहीं है। आप निश्चित रूप से अपने दिल की इच्छा के लिए ट्विक कर सकते हैं।

-c:v libx264 -crf 20 -preset slowकमांड में जोड़ने का प्रयास करें ।

  • -c:v libx264 यह libx264 एनकोडर का उपयोग करने के लिए कहता है,
  • crf 20 20 के मान (बहुत अच्छी गुणवत्ता; कम बेहतर गुणवत्ता / बड़ी फाइलें, उच्च क्रैपीयर / छोटा है) के मूल्य के साथ लगातार दर कारक क्वांटाइज़र (जिसमें विरोधाभास का अर्थ है परिवर्तनीय बिट दर, लेकिन निरंतर गुणवत्ता) का उपयोग करता है।
  • slowपूर्व निर्धारित एनकोडर सेटिंग का एक समूह है कि इसका मतलब है यह डिफ़ॉल्ट (मध्यम) की तुलना में यह में थोड़ा अधिक प्रयास करता है के लिए एक शॉर्टकट है।

आप इन सेटिंग्स को ट्वीक कर सकते हैं, देख सकते हैं कि क्या knobs के ट्वीडल पर निर्देशों के लिए h.264 एन्कोडिंग गाइड है

और यदि आप ऑडियो का उपयोग कर रहे हैं, तो जोड़ें c:a copy। वह फिर से एन्कोडिंग के बिना ऑडियो स्ट्रीम की एक सीधी प्रतिलिपि करेगा।


चूक एनकोडर पर निर्भर करती है। libx264 का उपयोग आम तौर पर डिफ़ॉल्ट रूप से MP4 आउटपुट के लिए किया जाता है, और यह बिना किसी अतिरिक्त विकल्प के एक अच्छी गुणवत्ता का उत्पादन करता है, लेकिन प्रश्न में बना ffmpeg इस एनकोडर का समर्थन नहीं करता है और इसलिए mpeg4MPEG-4 पार्ट 2 वीडियो बनाने वाले प्राचीन एनकोडर का उपयोग करता है , और इसके लिए चूक अधिक हेय के दौरान (जैसे 320x240, आदि के लिए) अधिक समझदार थे।
llogan

यह सुनना अच्छा है कि libx264 अब डिफ़ॉल्ट है।
stib

मैं कहेंगे सीआरएफ 20 सुंदर है रफ़ू अच्छा। 18 कार्यात्मक रूप से दोषरहित है। मैं अपने ज्यादातर वीडियो 23 पर करता हूं।
user24601

मेरा ज्यादातर काम एसडी कार्ड से स्थानीय स्तर पर काम करने वाले प्लेबैक उपकरणों पर प्रदर्शित होता है। मुझे आकार के लिए बहुत अधिक अनुकूलन करने की आवश्यकता नहीं है, इसलिए मैं जितना हो सकता है उतनी गुणवत्ता छोड़ता हूं। अगर मैं वेब पर वितरित कर रहा हूं तो मैं सहमत हूं, मैं इसे डायल कर दूंगा।
Stib

इससे मुझे मदद नहीं मिली। वीडियो में जहां भी गति होती है, तब भी मुझे अजीब तरह की रुकावट होती है। 18 की crf, धीमी करने के लिए पूर्व निर्धारित। 2.7k-> 1080p।
रेवॉल्फ

0

यदि आप चाहते हैं तो एवोकॉन का उपयोग करें :

avconv -i 4kfile.mp4 -s hd1080 -c:v libx264 -c:a copy fullhdfile.mp4
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.