Image processing 防止ffmpeg在降低视频分辨率时更改颜色强度
我有一个用例,需要将Image processing 防止ffmpeg在降低视频分辨率时更改颜色强度,image-processing,ffmpeg,colors,video-processing,Image Processing,Ffmpeg,Colors,Video Processing,我有一个用例,需要将716x1280mp4视频缩小到358x640(原始视频的一半)。我使用的命令是 ffmpeg -i ./input.mp4 -vf "scale=640:640:force_original_aspect_ratio=decrease,pad=ceil(iw/2)*2:ceil(ih/2)*2" ./output.mp4 在10个样本视频中,有2个受到了颜色的影响。下面我附上了一份受影响最大的一份比较报告 注意:右侧的帧是原始视频中的帧,左侧的帧是已
716x1280
mp4视频缩小到358x640
(原始视频的一半)。我使用的命令是
ffmpeg -i ./input.mp4 -vf "scale=640:640:force_original_aspect_ratio=decrease,pad=ceil(iw/2)*2:ceil(ih/2)*2" ./output.mp4
在10个样本视频中,有2个受到了颜色的影响。下面我附上了一份受影响最大的一份比较报告
注意:右侧的帧是原始视频中的帧,左侧的帧是已处理(缩小)视频中的帧。请注意图像中的红色和绿色(甚至肤色和头发颜色也发生了变化)
我要找的是
- 我有什么办法可以阻止这种变化的发生吗?可能是饱和度、亮度、对比度或任何其他参数的标志
- 我假设ffmpeg在缩小视频尺寸时使用一些默认设置。是什么让ffmpeg仅为这两个视频更改颜色?如果它对其余的视频也做了类似的改变,那么如何事先预测这种行为呢
值为0和18-crf
-如前所述预设veryslow
影响颜色和亮度的H.264元数据参数有:
视频格式
、颜色原色
、传输特性
和矩阵系数
如果未设置参数,则存在默认值。低分辨率视频的默认设置为“有限范围”(在大多数播放器中-我不确定MAC OS)。
默认的gamma曲线(影响亮度)是gamma曲线。
播放器将像素从YUV颜色空间转换为RGB(用于显示视频)。转换公式是根据元数据进行的 您的输入视频文件
input.mp4
的H.264元数据参数与默认值相差甚远
我们可以假设scale
视频过滤器不会改变颜色特征(过滤器应用YUV元素而不转换为RGB)
input.mp4
的特性适用,但被转换为默认值(BT.601和sRGB gamma),因此颜色和亮度与它们本应具有的颜色和亮度大不相同
当FFmpeg编码视频流时,它不会将元数据参数从输入复制到输出-您需要显式设置参数
解决方案是使用位流视频过滤器来设置元数据参数
尝试使用以下命令:
ffmpeg -i ./input.mp4 -vf "scale=640:640:force_original_aspect_ratio=decrease,pad=ceil(iw/2)*2:ceil(ih/2)*2" -vcodec libx264 -crf 17 -pix_fmt yuv420p -bsf:v h264_metadata=video_format=1:colour_primaries=9:transfer_characteristics=18:matrix_coefficients=9 ./output.mp4
应用“有限的颜色范围”video\u format=1
应用BT.2020彩色原色color\u primaries=9
应用HLG伽马(参见 )transfer\u characteristics=18
应用BT.2020矩阵系数矩阵_系数=9
大多数参数都记录在(第E.2.1节)中。是否必须使用ffmpeg完成?我在这里发现了另一个类似的问题:。特别是答案底部的“广告1补遗”部分。@IanChu我在浏览现有问题时尝试了它,但未能成功运行
-profile:v main444-10
的迭代。不过我确实试过了ad1
部分。颜色变化可能与编码视频流的颜色参数有关:颜色范围
、颜色原色
、传输特性
和矩阵系数
。请您使用工具,发布input.mp4
和output.mp4
的这些参数,好吗?发布其他可能很重要的参数,如位深度
(如果不是8位)。还缺少编解码器。尝试使用:ffmpeg-i./input.mp4-vf“scale=640:640:force\u original\u aspect\u ratio=reduce,pad=ceil(iw/2)*2:ceil(ih/2)*2“-vcodec libx264-crf 17-pix\u fmt yuv420p./output.mp4
显示问题中ffmpeg命令的完整日志。您认为可以只复制h264\u元数据而不复制整个编解码器吗从输入文件?换句话说,对于上面的属性,使用input.mp4中相同的值。这将是一个有用的功能,但我不知道如何使用FFmpeg。