天天看點

ffmpeg 10bit 8bit yuv格式轉換

ffmepg處理yuv視訊的系列之三

最近發現資料集裡的yuv大部分是8bit,但是有一部分是10bit或者16bit的,預設的yuv播放器打不開,也不利于資料集制作。是以就想用ffmpeg進行處理,記錄一下方法。10bit能夠容納更多的色彩,獲得更好的動态範圍。

ffmpeg裡面yuv的格式定義了很多種,比如下面:

  1. PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian 
  2.     PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian 
  3.     PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian 
  4.     PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian 
  5.     PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian 
  6.     PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian 
  7.     PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian 
  8.     PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian 
  9.     PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian 
  10.     PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian 
  11.     PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian 
  12.     PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian 

我們平時常見的yuv預設的是yuv420p,是8bit。我看有人問如何從10bit轉8bit,查了一下網上沒有寫。結果我發現ffmpeg預設420p就是8bit。

例如我想将一個分辨率為1920x1080,名字為“test_444p_10bit.yuv”轉換為420p 8bit的格式,方法如下:

ffmpeg -s 1920x1080 -pix_fmt yuv444p10le -i test_444p_10bit.yuv -pix_fmt yuv420p test_420p_8bit.yuv

那如果是yuv420p   test_420p_8bit.yuv轉換為444p 10bit,方法如下:

ffmpeg -s 1920x1080 -pix_fmt yuv420p -i test_420p_8bit.yuv -pix_fmt yuv444p10be test_444p_10bit.yuv

不清楚yuv是10be還是10le,可以用下面這個播放器(能夠播放10bit的yuv)鑒别:https://sourceforge.net/projects/raw-yuvplayer/