环境:
Ubuntu16.4 ffmpeg4.3.1 x264 1.60
视频转码时有时会遇到转码后视频的颜色与原始视频有些许差异的问题。问题的根源在于编码器的输出配置其实是有很多的,如果用户不手动配置,那就采用默认的配置。默认的配置虽然可以满足市面上绝大多数需求,但是一旦遇到比较偏的视频源时,往往会导致意想不到的问题
我们往往会忽视视频的色域编码。有关色域的知识,读者可以从下面这个连接做一个详细的了解
http://avisynth.nl/index.php/Convert
可以用ffmpeg查看视频的色域编码信息
ffmpeg -i xxx.mp4
也可以用potplay查看,播放视频–点击属性–文件信息
红色方框内的信息即为视频的色域编码信息(不同系统可能会有所不同)
其中smpte170m/bt470bg/smpte170m这三个参数的配置分别对应ffmpeg里面的
-colorspace、-color_primaries、-color_trc
在Linux系统中查看ffmpeg帮助文件
ffmpeg -h full >> ffmpeg_help.txt
找到上面三个参数所对应的位置
参数选择对应的名称和数字均可
设置参数转码,比如
ffmpeg -i xxx.mp4 -c:v libx264 -x264-params preset=veryslow:crf=18:tune=film:qcomp=0.6:profile=high:level=5:aq-mode=2:aq-strength=0.8 -c:a copy -color_primaries 5 -colorspace 6 -color_trc 6 xxx.mp4
经仔细对比播放可发现,颜色与原视频无差异