ffmpeg: gắn thẻ rõ ràng h.264 là bt.601, thay vì để lại không xác định?


12

Tôi muốn gắn thẻ video rõ ràng là bt.601, thay vì "không xác định". Tôi biết người chơi thường chọn bt.601 làm mặc định cho các video có chiều rộng dưới 1280 pixel, nhưng tôi muốn làm rõ rằng bt.601 là ma trận màu chính xác cho video.

Điểm gắn bó là không có bt601tùy chọn cho ffmpeg hoặc libx264, chỉ có bt709 và một số người khác.

Tôi có một số video được hạ thấp từ HD và vẫn ở bt.709, nhưng không được gắn thẻ đúng. Vì vậy, khi tôi xem video, đôi khi tôi phải tự chuyển trình phát của mình sang bt.709 . Gắn thẻ rõ ràng là bt.601 sẽ liên lạc với những người xem trong tương lai (ví dụ như bản thân tôi) rằng đó chắc chắn là bt.601, và không phải là video bt.709 được gắn thẻ sai khi tôi xem nó mediainfo.

Một trường hợp sử dụng khác cho trường hợp này là nếu bạn nâng cao video bt.601 lên 1280 hoặc cao hơn mà không thực hiện chuyển đổi colormatrix (sử dụng -vf colormatrix), người chơi sẽ giả sử bt.709 không chính xác nếu bạn để thông tin màu không xác định.

colormatrixBộ lọc video của FFMpeg không hỗ trợ bt601dưới dạng ma trận màu đầu vào hoặc đầu ra, nhưng cũng không đặt thẻ. (Vì nó không có tác dụng phụ là thiết lập các tùy chọn màu của ffmpeg, nên nó từ chối thậm chí hoạt động với src và giống như vậy -vf colormatrix=bt601:bt601.)


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

sẽ gắn thẻ video đầu ra là sử dụng bt.709 cho yuv <-> rgb. Các thẻ kết thúc bên trong dòng bit video, không chỉ trong thùng chứa (vì đây dường như là một thứ dành riêng cho codec, không phải là vật chứa, ít nhất là cho các thùng chứa mp4 và mkv).

ví dụ: mediainfođầu ra:

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

Vì vậy bt.709 rất dễ gắn thẻ. Vấn đề là, tôi không thấy bt.601 ở bất cứ đâu. Là một trong những tên khác là bí danh cho nó, hoặc thực sự không có cách nào để xác định rõ ràng?

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 hiển thị cùng một bộ tùy chọn cho các tùy chọn màu của nó, -c:v libx264bộ giải mã video của ffmpeg chuyển sang x264. Có bất kỳ bí danh nào trong số này cho bt.601 hoặc có ma trận màu tương đương về số không?


Tôi có chung vấn đề đó. Bạn đã tìm ra dòng lệnh để sử dụng để có được đoạn phim h264 HD được gắn thẻ BT.601 chưa?
Casper

@Casper: vâng, tôi đã chấp nhận câu trả lời của Mulvya vì có rất nhiều thông tin để tìm kiếm các lựa chọn đúng. Tôi đã thực hiện một chỉnh sửa để bao gồm các tùy chọn đúng một cách rõ ràng (ví dụ NTSC là -color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m).
Peter Cordes

Câu trả lời:


12

PAL và NTSC có màu gốc khác nhau, vì vậy

NTSC = SMPTE 170M = BT 601 525

PAL = BT 470 BG = BT 601 625

Xem các hàng cho giá trị 5 & 6 trên bảng trên trang 387 của chuẩn H.264 đang hoạt động .


Vì vậy, các đối số đúng cho ffmpeg là:

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

PAL:

-color_trckhông chấp nhận bt470bg, nhưng ffmpeg -h fullcho thấy điều đó gamma28có nghĩa là "BT.470 BG" cho tùy chọn đó.

# 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

-colorspacelà lựa chọn quan trọng nhất; những cái khác không tạo ra sự khác biệt rõ ràng cho người chơi phần mềm như mpvtrên Linux.


Tất nhiên rồi. Tôi thậm chí đã nhìn vào trang wikipedia bt601 và không biết đầu mối từ bảng có hai hàng. Derp.
Peter Cordes

Đối với những người muốn thực hiện cài đặt tương tự với HandBrake, trong tab Video, bên trong hộp chỉnh sửa Tùy chọn bổ sung, hãy nhập chuỗi này: "colorprim = smpte170m: transfer = smpte170m: colormatrix = smpte170m"
pcunite 17/2/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.