ffmpeg: स्पष्ट रूप से h.264 को bt.601 के रूप में टैग करें, बजाय अनिर्दिष्ट छोड़ने के?


12

मैं "अनिर्दिष्ट" के बजाय वीडियो को स्पष्ट रूप से bt.601 के रूप में टैग करना चाहता हूं। मुझे पता है कि खिलाड़ी आमतौर पर 1280 पिक्सल से कम के वीडियो के लिए डिफ़ॉल्ट रूप में bt.601 चुनते हैं, लेकिन मैं यह स्पष्ट करना चाहता हूं कि bt.601 एक वीडियो के लिए सही रंग मैट्रिक्स है।

चिपके बिंदु यह है कि bt601ffmpeg या libx264 के लिए कोई विकल्प नहीं है, केवल bt709 और कुछ अन्य।

मेरे पास कुछ वीडियो हैं जो HD से डाउनस्क्रॉल किए गए थे, और अभी भी bt.709 में हैं, लेकिन उन्हें ठीक से टैग नहीं किया गया है। इसलिए जब मैं कोई वीडियो देखता हूं, तो मुझे कभी-कभी अपने खिलाड़ी को bt.709 को मैन्युअल रूप से टॉगल करना पड़ता है । स्पष्ट रूप से bt.601 के रूप में टैग करना भविष्य के दर्शकों (जैसे स्वयं) से संवाद करेगा कि यह निश्चित रूप से bt.601 है, और गलत-टैग bt.709 वीडियो नहीं है, जब मैं इसे देखता हूं mediainfo

इसके लिए एक अन्य उपयोग-मामला यह होगा कि अगर आपने कॉलमैट्रिक्स मैट्रिक्स (उपयोग -vf colormatrix) किए बिना bt.601 वीडियो को 1280 या उससे अधिक बढ़ा दिया है , तो खिलाड़ी गलत तरीके से bt.709 मान लेंगे यदि आपने रंग जानकारी को अनिर्दिष्ट छोड़ दिया है।

FFMpeg का colormatrixवीडियो फ़िल्टर bt601इनपुट या आउटपुट रंग मैट्रिक्स के रूप में समर्थन करता है , लेकिन टैग भी सेट नहीं करता है। (चूंकि इसमें ffmpeg के रंग विकल्पों को सेट करने का साइड-इफ़ेक्ट नहीं है, इसलिए यह src के साथ भी काम करने से इनकार कर देता है और समान को नष्ट कर देता है -vf colormatrix=bt601:bt601।)


ffmpg in  -color_primaries bt709 -color_trc bt709 -colorspace bt709  out

आउटपुट वीडियो को bt.709 के रूप में yuv <-> आरजीबी के लिए टैग करेगा। टैग वीडियो बिटस्ट्रीम के अंदर ही समाप्त हो जाते हैं, न कि केवल कंटेनर में (क्योंकि यह एक कोडेक-विशिष्ट चीज़ लगती है, कंटेनर वाली चीज़ नहीं, कम से कम mp4 और mkv कंटेनरों के लिए)।

उदा mediainfoआउटपुट:

Complete name             : out.mkv
...
Writing application                      : Lavf57.14.100
Writing library                          : Lavf57.14.100


Video
ID                                       : 1
Format                                   : AVC
...
Writing library                          : x264 core 148 r2638+4 afcf21c
Encoding settings                        : cabac=1 / ref=8 / ...
Language                                 : English
Default                                  : Yes
Forced                                   : No
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709

तो bt.709 को टैग करना आसान है। समस्या यह है, मैं कहीं भी bt.601 नहीं देखता। क्या अन्य नामों में से एक इसके लिए एक उपनाम है, या वास्तव में इसे स्पष्ट रूप से निर्दिष्ट करने का कोई तरीका नहीं है?

x264 --fullhelp output:

  --colorprim <string>    Specify color primaries ["undef"]
                              - undef, bt709, bt470m, bt470bg, smpte170m,
                                smpte240m, film, bt2020
  --transfer <string>     Specify transfer characteristics ["undef"]
                              - undef, bt709, bt470m, bt470bg, smpte170m,
                                smpte240m, linear, log100, log316,
                                iec61966-2-4, bt1361e, iec61966-2-1,
                                bt2020-10, bt2020-12
  --colormatrix <string>  Specify color matrix setting ["???"]
                              - undef, bt709, fcc, bt470bg, smpte170m,
                                smpte240m, GBR, YCgCo, bt2020nc, bt2020c

ffmpeg -h full अपने रंग विकल्पों के लिए विकल्पों का एक ही सेट दिखाता है, जो ffmpeg का -c:v libx264वीडियो कोडेक x264 पर जाता है। क्या इनमें से कोई भी bt.601 के लिए एक अन्य नाम है, या एक संख्यात्मक रूप से बराबर रंग मैट्रिक्स है?


मेरी भी यही समस्या है। क्या आपने h264 का उपयोग करने के लिए कमांड लाइन का पता लगाया था HD फुटेज को BT.601 के साथ टैग किया गया था?
कैस्पर

@ कैस्पर: हां, मैंने मुल्व्या के जवाब को स्वीकार कर लिया क्योंकि सही विकल्पों को देखने के लिए बहुत सारी जानकारी थी। मैंने सही विकल्पों को स्पष्ट रूप से शामिल करने के लिए एक संपादन किया (जैसे NTSC है -color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m)।
पीटर कॉर्ड्स

जवाबों:


12

PAL और NTSC में अलग-अलग रंग की प्राइमरी हैं, इसलिए

एनटीएसआर = एसएमपीटीई 170 एम = बीटी 601 525

पाल = बीटी 470 बीजी = बीटी 601 625

सक्रिय H.264 मानक के पृष्ठ 387 पर तालिका में मान 5 और 6 के लिए पंक्तियों को देखें ।


तो ffmpeg के लिए सही आर्गन हैं:

NTSC:

# NTSC
ffmpeg -i input  \
 -colorspace smpte170m -color_primaries smpte170m -color_trc smpte170m

mediainfo:
Color primaries                          : BT.601 NTSC
Transfer characteristics                 : BT.601
Matrix coefficients                      : BT.601

पाल:

-color_trcस्वीकार नहीं करता है bt470bg, लेकिन उस विकल्प के लिए "BT.470 BG" का अर्थ ffmpeg -h fullदिखाता है gamma28

# PAL
ffmpeg -i input  \
 -colorspace bt470bg -color_primaries bt470bg -color_trc gamma28

mediainfo:
Color primaries                          : BT.601 PAL
Transfer characteristics                 : BT.470 System B, BT.470 System G
Matrix coefficients                      : BT.601

-colorspaceसबसे महत्वपूर्ण विकल्प है; अन्य mpvलिनक्स पर जैसे सॉफ्टवेयर खिलाड़ियों के लिए दृश्यमान अंतर नहीं है ।


आह। मैं भी bt601 विकिपीडिया पृष्ठ को देख रहा था, और दो पंक्तियों वाली तालिका से कोई सुराग नहीं लगा। Derp।
पीटर कॉर्डेस 5

हैंडब्रेक के साथ ऐसा करने की चाहत रखने वालों के लिए, वीडियो टैब के नीचे, अतिरिक्त विकल्प संपादित करें बॉक्स के अंदर, यह स्ट्रिंग दर्ज करें: "colorprim = smpte170m: transfer = smpte170m: colormatrix
Smpte170m
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.