कन्वर्ट AVI (Xvid) MP4 (H.264) के लिए एक ही गुणवत्ता रखते हुए


48

मैं एक h.264 कोडेक का उपयोग करके MP4 करने के लिए एक AVI फ़ाइल को संपीड़ित करना चाहता हूं। मैं एक ही गुणवत्ता नहीं मिल सकता है। मैं इसे कैसे संपीड़ित कर सकता हूं?

मूल वीडियो:

मूल वीडियो स्क्रीन:

FFmpeg कंसोल आउटपुट ( ffmpeg -i input.avi):

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree                                                                                         --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopenc                                                                                        ore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libop                                                                                        enjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264                                                                                         --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
[mpeg4 @ 0x626b50] Invalid and inefficient vfw-avi packed B frames detected
Input #0, avi, from 'input.avi':
  Metadata:
    encoder         : VirtualDubMod 1.5.10.2 (build 2542/release)
  Duration: 01:32:38.13, start: 0.000000, bitrate: 2094 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr,                                                                                         23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: ac3, 44100 Hz, 5.1, s16, 384 kb/s
At least one output file must be specified

परीक्षण 1

FFmpeg कमांड:

ffmpeg -i input.avi -vcodec libx264 -vpre lossless_slow -crf 25 -acodec libfaac -threads 0 -t 60 1.mp4

टेस्ट 1 स्क्रीन:

FFmpeg कंसोल आउटपुट ( ffmpeg -i 1.mp4)

    FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.93.0
  Duration: 00:01:00.01, start: 0.000000, bitrate: 618 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 437 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(und): Audio: aac, 44100 Hz, 5.1, s16, 176 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
At least one output file must be specified

परीक्षण २

FFmpeg कमांड:

ffmpeg -y -i input.avi -pass 1 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -f mp4 -an -y /dev/null
ffmpeg -y -i input.avi -pass 2 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -acodec libfaac -ab 128k -ac 2 2.mp4

टेस्ट 2 स्क्रीन:

FFmpeg कंसोल आउटपुट ( ffmpeg -i 2.mp4)

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.93.0
  Duration: 00:01:00.01, start: 0.000000, bitrate: 1097 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 1028 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 63 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
At least one output file must be specified

जवाबों:


60

सबसे पहले, FFmpeg के एक और हाल के संस्करण को स्थापित करें - डाउनलोड पृष्ठ से एक स्थिर बिल्ड को पकड़ो ।

vpreप्रीसेट का उपयोग (जो ffmpeg सेटिंग्स के लिए डिफ़ॉल्ट मान सेट करने का एक तरीका है , एनकोडर सेटिंग्स नहीं) वास्तव में आवश्यक नहीं है; आप आमतौर पर -presetएनकोडर द्वारा परिभाषित विकल्पों का उपयोग करना चाहते हैं ।

आपके द्वारा कम उत्पादन गुणवत्ता प्राप्त करने के कारण निम्नलिखित हैं, क्रमशः आपके दो मामलों के लिए:

  1. आपके द्वारा उपयोग किए जाने वाले पहले मामले में crf 25, एक लगातार दर कारक जो आपको x264 एनकोडर (जो 23 है) के लिए डिफ़ॉल्ट से भी बदतर गुणवत्ता देने वाला है। सीआरएफ गुणवत्ता को नियंत्रित करता है। एक कम CRF, 20, 18, आदि सेट करने का प्रयास करें। यहाँ, कम का मतलब बेहतर गुणवत्ता है, लेकिन यह फ़ाइल का आकार बढ़ा देगा। सीआरएफ में 6 का परिवर्तन आपको मूल औसत बिटरेट से लगभग दोगुना / आधा देता है, मोटे तौर पर बोलना।

    जनरेशन लॉस के कारण आपको कम CRF सेट करना होगा । आप ऐसी चीज़ को एन्कोडिंग कर रहे हैं जो पहले से एन्कोडेड थी, इसलिए आप फिर से विजुअल जानकारी फेंक रहे हैं। यह कभी अच्छा नहीं होता है, लेकिन अगर आपको करना है, तो आपको एक उच्च गुणवत्ता निर्धारित करनी होगी ताकि इनपुट वीडियो से बहुत अधिक जानकारी न निकालें।

  2. दूसरे मामले में आप 2 MBit / s की निरंतर बिट दर निर्धारित करने का प्रयास कर रहे हैं। आपके इनपुट वीडियो की लगभग समान दर है। अब, x264 एक ही बिटरेट के लिए MPEG-4 विज़ुअल एनकोडर की तुलना में बहुत बेहतर दृश्य गुणवत्ता प्रदान करता है, लेकिन जनरेशन लॉस के कारण, फिर से, आप मूल से भी अधिक बिटरेट का उपयोग करना चाह सकते हैं - अन्यथा आप संपीड़ित करना समाप्त कर देंगे। बहुत ज्यादा जानकारी।

    इसके अलावा, लगातार बिटरेट एन्कोडिंग के परिणामस्वरूप कुछ मार्ग अच्छे दिख सकते हैं, लेकिन वीडियो के अन्य हिस्से खराब दिख रहे हैं। यदि आप एनकोडर को किसी चीज पर खर्च करने के लिए स्वतंत्र रूप से बिट्स की मात्रा का चयन नहीं करने देते हैं, तो आप लक्ष्य फ़ाइल आकार जानने की कीमत पर गुणवत्ता का त्याग करने जा रहे हैं।

    x264 में एक बिट बिट दर मोड होता है, लेकिन इसे अन्य एन्कोडिंग विधियों से नीचा माना जाता है। दरअसल, दो-पास एन्कोडिंग इष्टतम गुणवत्ता को लक्षित करने के लिए नहीं है, इसलिए खरोंच।

कहा जा रहा है कि, निम्नलिखित के साथ कुछ प्रयास करें:

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a libfdk_aac -b:a 192k -ac 2 out.mp4

यदि libfdk_aacउपलब्ध नहीं है, तो इसके बजाय इसका उपयोग करें:

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 192k -ac 2 out.mp4

मुख्य गुणवत्ता नियंत्रण घुंडी आपकी CRF सेटिंग होगी। इसके साथ प्रयोग करें और बेहतर गुणवत्ता की आवश्यकता होने पर कम मूल्य का उपयोग करें।

आप veryslowपूर्व निर्धारित भी चुन सकते हैं , जो आपको बेहतर संपीड़न देगा, लेकिन एन्कोडिंग स्पष्ट रूप से अधिक समय लेगी।

यदि आप एक उचित फ़ाइल आकार में एक सभ्य गुणवत्ता फ़ाइल प्राप्त करने का प्रबंधन नहीं कर सकते हैं, तो आप भाग्य से बाहर हैं। मूल फ़ाइल को पुनः-एन्कोडिंग के बिना बेहतर रखें। जब आप पहले से ही कुछ कंप्रेस कर रहे हों तो कोई जादू "समान गुणवत्ता वाला" टूल नहीं है।


यदि आपका वीडियो आकार में दो पास होने के बाद छोटा है, तो आपको एक उच्च बिटरेट निर्दिष्ट करने की आवश्यकता है। कोशिश करो -b:v 3Mया अधिक; लेकिन मैं दो-पास संस्करण के बजाय CRF विधि का उपयोग करने की सलाह दूंगा।
15

10
@AhmetKa एक अन्य विकल्प केवल AVI कंटेनर से MP4 कंटेनर के लिए धाराओं को फिर से मक्स करना है ffmpeg -i input.avi -c copy -map 0 output.mp4:। कोई पुन: एन्कोडिंग नहीं है इसलिए कोई गुणवत्ता हानि नहीं है।
ललगन

1
@AhmetKa मुझे उल्लेख करना चाहिए कि आउटपुट कंटेनर प्रारूप इनपुट के मीडिया प्रारूपों का समर्थन नहीं करता है तो muxing हमेशा काम नहीं करेगा। क्या काम करता है की एक सामान्य विचार प्राप्त करने के लिए कंटेनर प्रारूपों की तुलना देखें ।
लोलगन

नमस्कार फिर @slhck Crf ठीक से नहीं है। बिटरेट, चौड़ाई, ऊंचाई, आदि क्या मैं गणना कर सकता हूं?
अहमत कापकिरण

3
@ आपको -c:a aac -strict experimentalइसके बजाय पसंद करना चाहिए libvo_aacenc, क्योंकि यह बेहतर गुणवत्ता प्रदान करता है।
slhck
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.