Ffmpeg का उपयोग करके 1080 @ 50i -> 720 @ 50p कैसे परिवर्तित करें?


9

मैं वास्तव में 50fps वीडियो पसंद करता हूं, लेकिन मैं ffmpeg को मेरे लिए 50fps में परिवर्तित नहीं कर सकता।

720p रिज़ॉल्यूशन मेरे साथ बिल्कुल ठीक है, बस अधिक एफपीएस की आवश्यकता है।

50 आई बस उचित खिलाड़ियों में बहुत चिकनी लगती है (उदाहरण के लिए जीओएम प्लेयर वीडियो को डिलीट करता है और इसे 50Hz पर चलाता है। 25Hz वीडियो के लिए बहुत बड़ा अंतर है।)

मेरी वर्तमान कमांड लाइन है:

ffmpeg -i 00010.MTS -threads 3 -filter:v yadif -s "1280x720" -r 50 -b:v 20M output.avi

यहां वीडियो विवरण अधिक हैं। स्रोत वीडियो तोप HF10 AVCHD कैमकोडर से है।

ffmpeg -i 00010.MTS -threads 3 -filter:v yadif -s "1280x720" -r 50 -b:v 20M output.avi
ffmpeg version N-37541-g670229e Copyright (c) 2000-2012 the FFmpeg developers
  built on Feb  3 2012 20:14:17 with gcc 4.6.2
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-ru
ntime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libope
ncore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --en
able-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger -
-enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwben
c --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-
libxvid --enable-zlib
  libavutil      51. 37.100 / 51. 37.100
  libavcodec     54.  0.102 / 54.  0.102
  libavformat    54.  0.100 / 54.  0.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 61.100 /  2. 61.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
  libpostproc    52.  0.100 / 52.  0.100
[h264 @ 000000000033FA30] Increasing reorder buffer to 1
Input #0, mpegts, from '00010.MTS':
  Duration: 00:03:13.92, start: 0.482156, bitrate: 16304 kb/s
  Program 1
    Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p, 1920x1
080 [SAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, s16,
256 kb/s
File 'output.avi' already exists. Overwrite ? [y/N] y
w:1920 h:1080 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:
[yadif @ 0000000003CE95B0] mode:0 parity:-1 auto_enable:0
[scale @ 0000000003CE9550] w:1920 h:1080 fmt:yuv420p -> w:1280 h:720 fmt:yuv420p
 flags:0x4
Output #0, avi, to 'output.avi':
  Metadata:
    ISFT            : Lavf54.0.100
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1280x720 [SAR 1:1 DA
R 16:9], q=2-31, 20000 kb/s, 50 tbn, 50 tbc
    Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16, 128 kb
/s
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> mpeg4)
  Stream #0:1 -> #0:1 (ac3 -> libmp3lame)
Press [q] to stop, [?] for help
frame=   15 fps=  0 q=2.0 size=     945kB time=00:00:00.62 bitrate=12481.3kbits/
frame=   32 fps= 32 q=2.0 size=    2132kB time=00:00:01.30 bitrate=13435.2kbits/
frame=   51 fps= 34 q=2.0 size=    3372kB time=00:00:02.06 bitrate=13409.2kbits/
frame=   70 fps= 35 q=2.0 size=    4641kB time=00:00:02.82 bitrate=13482.8kbits/
frame=   76 fps= 35 q=2.0 Lsize=    5047kB time=00:00:03.06 bitrate=13511.9kbits

आपका क्या मतलब है, 'नहीं बना सकते'? क्या यह आपको त्रुटियाँ देता है?
बस जेक

यह फ़ाइल का उत्पादन करता है, जो 25p जैसा दिखता है, उचित खिलाड़ी में 50i के रूप में स्मूथ नहीं है।
BarsMonster

@ एसएलएचके यह यहाँ जाता है
बार्सोनस्टर

MPEG-4 दृश्य के लिए एन्कोडिंग के लिए कोई विशेष कारण h.264 का उपयोग करने के बजाय फिर से (उदाहरण -vcodec libx264? ऐसा नहीं है कि यह बहुत ज्यादा ~ 20 MBit / s पर, लेकिन फिर भी मायने रखना चाहिए।
slhck

@ अच्छी तरह से, यह सिर्फ डिफ़ॉल्ट है :-)
BarsMonster

जवाबों:


1

"अधिकांश व्यावहारिक मामलों के लिए इंटरलेस्ड सामग्री से पूर्ण प्रगतिशील वीडियो को पुनर्प्राप्त करना संभव नहीं है।"

इसके अलावा अगर आप वीडियो का एक छोटा सा नमूना अपलोड कर सकते हैं, तो यह आपके कारण को तहे दिल से मदद करेगा।

स्रोत: mplayerhq.hu/DOCS/HTML/en/menc-feat-telecine.html


7

जिस तरह इंटरलास्टिंग प्रगतिशील सामग्री प्रत्येक फ्रेम को 2 क्षेत्रों में विभाजित करती है, इस प्रकार फ्रेम दर को दोगुना कर देती है, डीटरलैसिंग की सामान्य विधि प्रत्येक 2 फ़ील्ड को 1 फ्रेम में संयोजित करना है, जो कि दर को 2 से घटाती है, इस प्रकार 50 को 25fps में लेती है। आप निश्चित रूप से प्रत्येक अंतिम फ्रेम को दोगुना कर सकते हैं, लेकिन यह कोई लाभ प्रदान नहीं करता है।

सबसे पहले, हम का उपयोग नहीं पढ़ सकते हैं -डिनल, और yadif बजाय (जो आप पहले से ही करते हैं):

 - deinterlace This option is deprecated since the deinterlacing is very low quality. Use the yadif filter with -filter:v yadif. 

आपको शायद FFMPEG डॉक्यूमेंटेशन का याडिफ सेक्शन काफी दिलचस्प लगेगा :

Deinterlace the input video ("yadif" means "yet another deinterlacing filter"). 
It accepts the optional parameters: mode:parity:auto. 

MODE specifies the interlacing mode to adopt, accepts one of the following values: 
‘0’
output 1 frame for each frame
‘1’
output 1 frame for each field 
‘2’
like 0 but skips spatial interlacing check 
‘3’
like 1 but skips spatial interlacing check 
Default value is 0. 

PARITY default value is -1.
AUTO default value is 0. 

ध्यान दें कि डिफ़ॉल्ट MODE 0 कैसे है, जो प्रत्येक 2 फ़ील्ड के लिए FFMPEG को ouput 1 फ्रेम के लिए निर्देश देता है, इस प्रकार एफपीएस को आधा कर देता है। मुझे लगता है कि आप जो खोज रहे हैं वह MODE 1 है: प्रति फ़ील्ड एक फ्रेम । मुझे यकीन नहीं है कि इन वैकल्पिक मापदंडों का उपयोग कैसे किया जाए लेकिन शायद कुछ ऐसा है

-filter:v yadif 1:-1:0 -s "1280x720" -r 50 

कम से कम यह 50 एफपीएस आउटपुट देता है, लेकिन दुर्भाग्य से उत्पन्न 2 अनुक्रमिक फ्रेम बहुत समान हैं ... जब मैं मूल 50i वीडियो फ्रेम को फ्रेम से चरणबद्ध करता हूं तो मैं वास्तव में देखता हूं कि तेज गति में दो बार 'अधिक' चरण होते हैं, और बहुत चिकना होता है।
बार्समोनस्टर

@BarsMonster सबसे पहले, मैं यह पता लगाने की कोशिश करूंगा कि जीओएम खिलाड़ी क्या करता है, अगर यह किसी प्रकार के प्रक्षेप के कारण है। मुझे उत्सुकता है - क्या इतनी अधिक अंतर्वस्तु वाली सामग्री है जिसमें उच्च-एफपीएस जानकारी है? (आखिरकार, प्रसारण के लिए 25p से 50i में परिवर्तित करने से कोई नई गति की जानकारी नहीं बनती है - आपको स्ट्रेच-टू-इंटरलेस्ड सामग्री की आवश्यकता होती है)। इसके बाद, यदि आप एक डीथलैक्टिंग तकनीक पाते हैं, जो जीओएम उपयोग करता है (देखें विकिपीडिया, काफी कुछ हैं), तो आपको इसके लिए एक फिल्टर खोजने की कोशिश करनी चाहिए, जिसका उपयोग एफ़आईएसएनएचटीएच में प्रक्रिया के हिस्से के रूप में किया जा सकता है, इसके बजाय एफएफएमपीईजी -वाईएडीआईएफ विधि का उपयोग करने के लिए ।
एमटी

1

प्रलेखन के अनुसार , -rविकल्प आउटपुट फ़ाइल फ्रेम प्रति सेकंड सेट करता है। उदाहरण के लिए, यह आउटपुट को प्रति सेकंड 50 फ्रेम पर सेट करता है:

ffmpeg -i input.avi -r 50 output.avi

दुर्भाग्य से, फ़ाइल का निर्माण लगभग 25 आर के समान है। और यह अब स्मूथ नहीं है। ऐसा लग रहा है कि यह सिर्फ 25p वीडियो लिया, और फिर इसे फ्रेम किया।
BarsMonster

क्या आपने इनपुट फ्रैमरेट को भी निर्दिष्ट करने की कोशिश की है?
बस जेक

3
वह तो बहाना है। जब आप वीडियो को विघटित करते हैं तो आप प्रगतिशील प्रदर्शनों के साथ सहज गति के लिए चिकनी गति का त्याग करते हैं।
जेसन

@ जैसन वेल, मेरे विडियोप्लेयर (जीओएम प्लेयर) 50i वीडियो को डीलेरेंस करता है, और मेरे 120Hz टीएफटी मॉनीटर पर इसे आसानी से दिखाता है (यानी 50 हर्ट्ज पर), जो स्पष्ट रूप से प्रगतिशील है। वीडियो रिकोडर एक ही काम क्यों नहीं कर सकता, और सुचारू रूप से 50 हर्ट्ज का उत्पादन कर सकता है? मैं समझता हूं कि 50i में कम विवरण हैं, लेकिन मैं 50Hz आउटपुट प्राप्त करने की उम्मीद क्यों नहीं कर सकता?
बारसोमनस्टर

यह इस्तेमाल किए जाने वाले डेर्न्थेल्रेसिंग फिल्टर पर निर्भर करता है। जाहिर है जीओएम प्लेयर इस पर अच्छा काम करता है। हालांकि FFmpeg इंटरलेस्ड वीडियो को कैसे हैंडल करता है, इसके बारे में बहुत अधिक नहीं जानते। @ बार्समॉनस्टर
17

1

ffmpeg -i input.avi -deinterlace -filter:v yadif -s "1280x720" output.avi


1
दुर्भाग्य से, यह अभी भी सिर्फ 25 एफपीएस आउटपुट का उत्पादन किया है ... मूल फ़ाइल रास्ता चिकनी है .... यहां तक ​​कि -r 50 जोड़ने में मदद नहीं की।
बार्समोनस्टर

0

यह आदेश मेरे लिए काम कर रहा है:

ffmpeg -i source_50i.MTS -aspect 1920:1080 -vf yadif=1,scale=1920:1080 -c:v libx264 -preset fast -profile:v high -crf 23 -ac 2 -strict experimental -c:a aac -b:a 96k -movflags +faststart -y result_50p.mp4

स्रोत एक सोनी कैमकॉर्डर फ़ाइल थी।

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