ffmpeg: แท็ก h.264 อย่างชัดเจนว่าเป็น bt.601 แทนที่จะปล่อยทิ้งไว้โดยไม่ระบุหรือไม่


12

ฉันต้องการติดแท็กวิดีโอเป็น bt.601 อย่างชัดเจนมากกว่า "ไม่ได้ระบุ" ฉันรู้ว่าผู้เล่นมักจะเลือก bt.601 เป็นค่าเริ่มต้นสำหรับวิดีโอที่มีความกว้างน้อยกว่า 1280 พิกเซล แต่ฉันต้องการทำให้ชัดเจนว่า bt.601 เป็นเมทริกซ์สีที่ถูกต้องสำหรับวิดีโอ

จุดเกาะติดคือไม่มีbt601ตัวเลือกสำหรับ ffmpeg หรือ libx264 เพียง bt709 และอื่น ๆ

ฉันมีวิดีโอบางส่วนที่ลดขนาดจาก HD และยังคงอยู่ในราคา 709 แต่ไม่ได้ติดแท็กอย่างถูกต้อง ดังนั้นเมื่อผมดูวิดีโอบางครั้งผมต้องด้วยตนเองสลับผู้เล่นของฉันไป bt.709 การติดแท็กอย่างชัดเจนว่า bt.601 จะสื่อสารกับผู้ชมในอนาคต (เช่นตัวเอง) ว่ามันเป็นแน่นอน bt.601 และไม่ผิดพลาดแท็ก bt.709 mediainfoวิดีโอเมื่อฉันมองไปที่มันมี

กรณีการใช้งานอื่นสำหรับกรณีนี้คือหากคุณเพิ่มสเกลวิดีโอ bt.601 เป็น 1280 หรือสูงกว่าโดยไม่ทำการแปลง colormatrix (โดยใช้-vf colormatrix) ผู้เล่นจะสันนิษฐานว่าไม่ถูกต้อง bt.709 หากคุณปล่อยให้ข้อมูลสีไม่ได้ระบุ

colormatrixฟิลเตอร์วิดีโอของ FFMpeg ไม่รองรับbt601เมทริกซ์สีอินพุตหรือเอาต์พุต แต่ไม่ได้ตั้งค่าแท็ก (เนื่องจากไม่มีผลข้างเคียงของการตั้งค่าตัวเลือกสีของ ffmpeg จึงปฏิเสธที่จะใช้งานด้วย src และปลายทางเหมือน-vf colormatrix=bt601:bt601กัน)


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

จะแท็กวิดีโอเอาต์พุตเป็น bt.709 สำหรับ yuv <-> rgb แท็กสิ้นสุดลงในบิตสตรีมวิดีโอไม่เพียง แต่อยู่ในคอนเทนเนอร์ (เนื่องจากเป็นตัวแปลงสัญญาณที่เฉพาะเจาะจงไม่ใช่ของที่เก็บข้อมูลสำหรับคอนเทนเนอร์ 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 แสดงชุดตัวเลือกชุดเดียวกันสำหรับตัวเลือกสีซึ่ง-c:v libx264ตัวแปลงสัญญาณวิดีโอของ ffmpeg ส่งต่อไปยัง x264 สิ่งเหล่านี้เป็นนามแฝงสำหรับ bt.601 หรือมีเมทริกซ์สีที่เท่ากันหรือไม่


ฉันมีปัญหาเดียวกันแน่นอน คุณเข้าใจบรรทัดคำสั่งเพื่อใช้ในการรับ h264 HD footage ด้วย BT.601 หรือไม่?
Casper

@Casper: ใช่ฉันยอมรับคำตอบของ Mulvya เพราะมันมีข้อมูลมากมายในการค้นหาตัวเลือกที่เหมาะสม ฉันแก้ไขเพื่อรวมตัวเลือกที่เหมาะสมอย่างชัดเจน (เช่น NTSC คือ-color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m)
Peter Cordes

คำตอบ:


12

PAL และ NTSC มีสีที่ต่างกันดังนั้น

NTSC = SMPTE 170M = BT 601 525

PAL = BT 470 BG = BT 601 625

ดูแถวสำหรับค่า 5 และ 6 ในตารางบนหน้า 387 ของ H.264 ใช้งานมาตรฐาน


ดังนั้น args ที่เหมาะสมสำหรับ 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แต่ffmpeg -h fullแสดงว่าgamma28หมายถึง "BT.470 BG" สำหรับตัวเลือกนั้น

# 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บน Linux


อ่าแน่นอน ฉันยังดูที่หน้า bt601 wikipedia และไม่ได้เบาะแสจากตารางที่มีสองแถว Derp
Peter Cordes

สำหรับผู้ที่ต้องการทำการตั้งค่าเดียวกันนี้ด้วย HandBrake ภายใต้แท็บวิดีโอในกล่องแก้ไขตัวเลือกพิเศษให้ป้อนสตริงนี้: "colorprim = smpte170m: transfer = smpte170m: colormatrix = smpte170m"
pcunite
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.