WMV को MP4 में इतनी धीमी गति से क्यों परिवर्तित किया जा रहा है?


12

मैं WMV से MP4 को FFmpeg के साथ वीडियो परिवर्तित करने की कोशिश कर रहा हूं, लेकिन इसमें कुछ घंटे लगते हैं। अगर मैं इसे AVI में बदलने की कोशिश करूँ तो इसमें लगभग 10-15 मिनट लगते हैं।

ffmpeg संस्करण

ffmpeg version N-43206-gf857465
built on Aug  4 2012 16:10:39 with gcc 4.7.1 (GCC)

MP4 में रूपांतरण

ffmpeg -i input.wmv -vcodec libx264 output.mp4

libavutil      51. 66.100 / 51. 66.100
  libavcodec     54. 49.100 / 54. 49.100
  libavformat    54. 22.100 / 54. 22.100
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3.  5.102 /  3.  5.102
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, asf, from 'input.wmv':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
  Duration: 01:14:23.06, start: 0.000000, bitrate: 324 kb/s
    Stream #0:0: Video: msmpeg4 (MP43 / 0x3334504D), yuv420p, 1280x720, 15 tbr,
1k tbn, 1k tbc
[libx264 @ 03427620] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle Cac
he64
[libx264 @ 03427620] profile High, level 3.1
[libx264 @ 03427620] 264 - core 125 r2208 d9d2288 - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb
lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m
e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro
ma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 i
nterlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenec
ut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=
0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=-1--
1, 15 tbn, 15 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (msmpeg4 -> libx264)

के साथ MP4 में रूपांतरण copy

ffmpeg -i input.wmv -c:v:1 copy output.mp4

  libavutil      51. 66.100 / 51. 66.100
  libavcodec     54. 49.100 / 54. 49.100
  libavformat    54. 22.100 / 54. 22.100
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3.  5.102 /  3.  5.102
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, asf, from 'input.wmv':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
  Duration: 01:14:23.06, start: 0.000000, bitrate: 324 kb/s
    Stream #0:0: Video: msmpeg4 (MP43 / 0x3334504D), yuv420p, 1280x720, 15 tbr,
1k tbn, 1k tbc
[libx264 @ 03437620] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle Cac
he64
[libx264 @ 03437620] profile High, level 3.1
[libx264 @ 03437620] 264 - core 125 r2208 d9d2288 - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb
lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m
e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro
ma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 i
nterlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenec
ut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=
0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=-1--
1, 15 tbn, 15 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (msmpeg4 -> libx264)

AVI के साथ रूपांतरण copy

ffmpeg -i input.wmv -c:v:1 copy output.avi

Input #0, asf, from 'input.wmv':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
  Duration: 01:14:23.06, start: 0.000000, bitrate: 324 kb/s
    Stream #0:0: Video: msmpeg4 (MP43 / 0x3334504D), yuv420p, 1280x720, 15 tbr,
1k tbn, 1k tbc
Output #0, avi, to 'output.avi':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    ISFT            : Lavf54.22.100
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1280x720, q=2-31, 20
0 kb/s, 15 tbn, 15 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (msmpeg4 -> mpeg4)

क्या मुझे पास करने के लिए कुछ अतिरिक्त पैरामीटर चाहिए?


यदि आप बिटस्ट्रीम की नकल कर रहे हैं, तो निश्चित रूप से यह तेज है - copyआप कुछ भी पुन: एन्कोडिंग नहीं कर रहे हैं। आपके पास क्या हार्डवेयर है, जैसे CPU? आपका OS क्या है और FFmpeg का कौन सा संस्करण है?
slhck

@ एसएलएचके: कंप्यूटर बहुत तेज़ नहीं है E5400 2.7GHz लेकिन यह mp4 के लिए धीमा क्यों है जबकि यह एवी के लिए तेज़ है?
जियोर्गी

मुझे आपके प्रश्न में कोई AVI आउटपुट दिखाई नहीं दे रहा है। क्या आप इसे पूर्ण आउटपुट के साथ अपडेट कर सकते हैं?
9

@slhck: जोड़ा avi उत्पादन
Giorgi

जवाबों:


17

स्ट्रीम कॉपी करना

जब आप कॉल करते हैं -c:v:1 copy, तो एफएफएमपी मौजूदा वीडियो बिटस्ट्रीम ले जाएगा और इसे कॉपी करेगा। वीडियो बिटस्ट्रीम सिर्फ बाहरी कंटेनर में एनकैप्सुलेटेड है, जैसे WMV, AVI या MP4 - आपका वास्तविक वीडियो बिटस्ट्रीम है msmpeg4और इस पर रहेगा।

यदि आप इस बारे में अधिक जानना चाहते हैं कि मैं किस बारे में बात कर रहा हूं, तो यहां देखें: एक कोडेक (जैसे डिवएक्स?) क्या है, और यह फ़ाइल प्रारूप (उदाहरण एमपीजी) से कैसे भिन्न होता है?

बिटस्ट्रीम की प्रतिलिपि बनाते समय, FFmpeg को वास्तविक वीडियो को वास्तव में डीकोड और री-एनकोड करने की आवश्यकता नहीं होती है। यह सिर्फ एक नए कंटेनर प्रारूप में वीडियो बिटस्ट्रीम को मर्ज करने की आवश्यकता है, जो अक्सर एक सरल ऑपरेशन होता है और इसलिए इसमें लंबा समय नहीं लगता है।

एन्कोडिंग

इसके विपरीत, यदि आप कॉल करते हैं -vcodec libx264(या -c:v libx264, सिंटैक्स जिसे आपको उपयोग करना चाहिए क्योंकि vcodecपदावनत किया गया है), FFmpeg को msmpeg4कच्चे प्रारूप से वीडियो बिटस्ट्रीम को डिकोड करने के लिए मजबूर किया जाएगा , फिर इसे x264H.264 एनकोडर में पाइप करें ।

x264 तेज़ है, लेकिन फिर भी, वीडियो को एन्कोडिंग में समय लगता है - खासकर जब यह 720p सामग्री हो। और इसमें एक घंटे से अधिक समय लग सकता है, खासकर यदि आपका इनपुट पहले से एक घंटे से अधिक लंबा हो। इसके अलावा, आपका CPU सबसे तेज़ नहीं हो सकता है। यह मुख्य कारण है पुराने MPEG-4 विज़ुअल एन्कोडर्स जैसे XviD अभी भी आस-पास और बहुत लोकप्रिय हैं: उन्हें H.264 कोडेक की तुलना में कम समय लगता है। वे आपको गुणवत्ता बनाम फ़ाइल आकार के मामले में सर्वश्रेष्ठ प्रदर्शन नहीं दे सकते, लेकिन वे तेज़ हैं।

यह सब कहा जा रहा है: आप एक पूर्व निर्धारित करके x264 एन्कोडिंग को गति दे सकते हैं। प्रीसेट एनकोडर ऑप्टिमाइज़ेशन सेटिंग्स और रेंज से हैं: अल्ट्राफास्ट, सुपरफास्ट, बहुत तेज, तेज, मध्यम, धीमा, धीमा, बहुत। आपकी आज्ञा तब इस प्रकार दिख सकती है:

ffmpeg -i input.wmv -c:v libx264 -preset fast out.mp4

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

इसके अलावा, बहुत कुछ नहीं है जो आप एक तेज सीपीयू में निवेश करने के अलावा कर सकते हैं, और यह सुनिश्चित कर सकते हैं कि आप X264 समर्थन के साथ FFmpeg का हालिया निर्माण चला रहे हैं।

अधिक जानकारी के लिए FFmpeg Wiki: H.264 एन्कोडिंग गाइड देखें


जवाब के लिए धन्यवाद। मुझे यकीन नहीं है कि मैं स्पष्ट था या नहीं, लेकिन अगर मैं कॉपी का उपयोग करता हूं तो यह अभी भी बहुत धीमा है। मैंने आपकी आज्ञा की कोशिश की और इसे 5 मिनट के बाद केवल 4 सेकंड में संसाधित किया है। मेरा वीडियो लगभग 75 मिनट लंबा है और एवी में परिवर्तित होने में केवल 15 मिनट लगते हैं लेकिन mp4 को कई घंटे लगते हैं।
जियोर्गी

तो कौन सा एन्कोडिंग के लिए सबसे अच्छा है, libx264 या h264?
योहन एआई

libx264जब आप whenh264` को एनकोडर के रूप में निर्दिष्ट करते हैं तो डिफ़ॉल्ट रूप से ffmpeg के रूप में @NPE कोई अंतर नहीं है ।
slhck

1
@PeterCordes मैंने इसे बदल दिया है fast। कुछ रोचक आंकड़े (यदि VMAF यहाँ भरोसा किया जा सकता): streaminglearningcenter.com/blogs/...
slhck

1
@PeterCordes कुछ RC अनुकूलन हैं जो VMAF AQ: github.com/Netflix/vmaf/issues/21 जैसे अच्छी तरह से हैंडल नहीं करते हैं । मैं उच्च-गुणवत्ता वाले 1080p बनाम भद्दे UHD भाग से सहमत हूं। ब्लॉग का लेखक अपने परीक्षण को बेहतर बनाने के सुझावों पर बहुत खुला है; मैंने पहले से ही कुछ समय पहले x265 के लिए कुछ गलत धारणा पर टिप्पणी की थी।
slhck

3

जैसा कि मैं WMV-> MP4 रूपांतरण के साथ खेल रहा था (अंतहीन घंटे), मुझे ऐसा करने का एक शानदार तरीका मिला। लेकिन इसकी एक कीमत है: एक भंडारण मूल्य। यदि आप WMV को दोषरहित में परिवर्तित करते हैं, तो दोषरहित से MP4 में, यह कुछ ही समय में पूर्ण रूपांतरण करता है। लेकिन आपको दोषरहित संस्करण को संग्रहीत करने के लिए 100 गुना एचडीडी स्पेस की आवश्यकता है, जो दर्दनाक है।

तो यह पता चला है कि आप WMV-> MP4 रूपांतरण के बहुत धीमे या बहुत HDD गहन संस्करणों से चुन सकते हैं और आपके पास कोई अन्य विकल्प नहीं है।

WMV को दोषरहित AVI में परिवर्तित करना: ffmpeg.exe -i screen.wmv -vcodec ffv1 screen.avi फिर दोषरहित AVI को MP4 (या वेबएम में परिवर्तित करना) से कोई फर्क नहीं पड़ता। ffmpeg.exe -i screen.avi screen.mp4

अत्यधिक तीव्र!

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