ffmpeg: belirtilmemiş bırakmak yerine h.264'ü bt.601 olarak açıkça etiketlensin mi?


12

Videoyu "belirtilmemiş" yerine açıkça bt.601 olarak etiketlemek istiyorum. Oyuncuların genellikle 1280 pikselden daha az genişlikte videolar için varsayılan olarak bt.601'i seçtiğini biliyorum, ancak bt.601'in bir video için doğru renk matrisi olduğunu açıkça belirtmek istiyorum.

bt601Yapışkan nokta, ffmpeg veya libx264 için bir seçenek olmadığı , sadece bt709 ve diğerleri için bir seçenek olmadığıdır .

HD'den ölçeklendirilmiş ve hala bt.709'da olan, ancak düzgün bir şekilde etiketlenmemiş bazı videolarım var. Bu yüzden bir video izlerken bazen oynatıcımı manuel olarak bt.709 olarak değiştirmem gerekir . Açıkça bt.601 olarak etiketleme, izleyicilere baktığımda gelecekteki izleyicilere (örneğin kendim) kesinlikle bt.601 olduğunu ve yanlış etiketlenmiş bir bt.709 videosu ile iletişim kuracaktır mediainfo.

Bunun için bir başka kullanım örneği, bir bt.601 videosunu, bir renk matrisi dönüşümü (kullanmadan -vf colormatrix) yapmadan 1280 veya daha yüksek bir değere yükselttiğinizde, renk bilgilerini belirtmeden bırakırsanız oyuncular yanlış bt.709 olduğunu varsayar.

FFMpeg'in colormatrixvideo filtresi bt601giriş veya çıkış renk matrisi olarak desteklenir , ancak etiketleri de ayarlamaz. (Ffmpeg'in renk seçeneklerini ayarlama yan etkisi olmadığından, src ile çalışmayı ve aynı şeyi hedeflemeyi reddediyor -vf colormatrix=bt601:bt601.)


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

çıkış videosunu yuva <-> rgb için bt.709 kullanarak etiketler. Etiketler, yalnızca kapsayıcıda değil, video bit akışı içinde de bulunur (en azından mp4 ve mkv kapsayıcıları için kapsayıcı bir şey değil, codec'e özgü bir şey olduğu için).

örneğin mediainfoçıktı:

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

Yani bt.709'un etiketlenmesi kolaydır. Sorun şu ki, hiçbir yerde bt.601 görmüyorum. Diğer adlardan biri bunun için bir takma ad mı, yoksa açıkça belirtmenin bir yolu yok mu?

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'in -c:v libx264video codec bileşeninin x264'e aktardığı renk seçenekleri için aynı seçenekleri gösterir . Bunlardan herhangi biri bt.601 için bir takma ad mı yoksa sayısal olarak eşdeğer bir renk matrisine sahip mi?


Aynı problemim var. BT.601 ile etiketlenmiş h264 HD çekimleri almak için kullanılacak komut satırını buldunuz mu?
Casper

@Casper: evet, Mulvya'nın cevabını kabul ettim çünkü doğru seçenekleri aramak çok fazla bilgi içeriyordu. Açıkça doğru seçenekleri içerecek şekilde bir düzenleme yaptım (örn -color_primaries smpte170m -color_trc smpte170m -colorspace smpte170m.
Peter Cordes

Yanıtlar:


12

PAL ve NTSC'nin farklı renk primerleri vardır, bu nedenle

NTSC = SMPTE 170M = BT 601525

PAL = BT 470 BG = BT 601625

Etkin H.264 standardının 387. sayfasındaki tablodaki 5 ve 6 değeri için satırlara bakın .


Yani ffmpeg için doğru argümanlar:

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_trckabul etmiyor bt470bg, ancak ffmpeg -h fullgösteriler bu gamma28seçeneğe ilişkin araçlar "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

-colorspaceen önemli seçenektir; diğerleri mpvLinux gibi yazılım oyuncuları için görünür bir fark yaratmaz.


Ah elbette. Hatta bt601 wikipedia sayfasına bakıyordum ve iki sıra olan tablodan ipucu vermedim. Derp.
Peter Cordes

Aynı ayarı HandBrake ile yapmak isteyenler için, Video sekmesi altında, Ekstra Seçenekler düzenleme kutusunun içine şu dizeyi girin: "colorprim = smpte170m: transfer = smpte170m: colormatrix = smpte170m"
pcunite
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.