ffmpeg 为什么输出视频对比度/亮度太亮?
ffmpeg why is output video contrast / brightness too bright?
我有一个 .mov 文件,我 运行 通过 ffmpeg
创建 HLS 段/块。但是,当我播放HLS视频时,它太亮了。
为了完整性检查,我 运行 相同的 .mov 视频文件通过 FlowPlayer 处理管道,结果是一样的,输出视频太亮了!
我有很多视频。大多数没有这个问题,但一些(并且只有一些).mov 文件出现这个问题。
视频流中断报告(完整输出见下文):
Stream #0:0[0x1](und): Video: hevc (Main 10) (hvc1 / 0x31637668), yuv420p10le(tv, bt2020nc/bt2020/arib-std-b67), 1920x1080, 8507 kb/s, 29.98 fps, 29.97 tbr, 600 tbn (default)
工作视频流报告(完整输出见下文):
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 45457 kb/s, 29.99 fps, 29.97 tbr, 600 tbn (default)
这是否与 hevc v h264
有关(无论它们是什么意思)?
顺便说一句,我正在使用本机 HTML5 视频播放器与 hls.js 一起播放视频。
我该如何解决这个问题? TIA
这是我的 ffmpeg
命令:
ffmpeg -i "rgb.mov" \
-v warning -preset ultrafast -g 59.96 -sc_threshold 0 \
-map 0:0 -map 0:0 \
-s:v:0 1920x1080 -c:v:0 libx264 -b:v:0 4521k \
-s:v:1 1920x1080 -c:v:1 libx264 -b:v:1 7347k \
-var_stream_map "v:0 v:1" \
-master_pl_name master.m3u8 -f hls \
-hls_time 6 -hls_list_size 0 -hls_playlist_type vod \
-hls_segment_filename "hls/v%v/chunk%d.ts" "hls/v%v/index.m3u8"
下面是一些屏幕截图,显示了原始视频与输出视频的对比。
原版:
输出:
对于问题视频 ffmpeg -i "rgb.mov" -hide_banner
给出:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'rgb.mov':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2021-08-03T11:23:40.000000Z
com.apple.quicktime.location.accuracy.horizontal: 3.594173
com.apple.quicktime.location.ISO6709: +51.5483+000.1628+000.459/
com.apple.quicktime.make: Apple
com.apple.quicktime.model: iPhone 12 Pro
com.apple.quicktime.software: 14.7.1
com.apple.quicktime.creationdate: 2021-08-03T12:23:40+0100
Duration: 00:00:54.54, start: 0.000000, bitrate: 8730 kb/s
Stream #0:0[0x1](und): Video: hevc (Main 10) (hvc1 / 0x31637668), yuv420p10le(tv, bt2020nc/bt2020/arib-std-b67), 1920x1080, 8507 kb/s, 29.98 fps, 29.97 tbr, 600 tbn (default)
Metadata:
creation_time : 2021-08-03T11:23:40.000000Z
handler_name : Core Media Video
vendor_id : [0][0][0][0]
encoder : HEVC
Side data:
DOVI configuration record: version: 1.0, profile: 8, level: 4, rpu flag: 1, el flag: 0, bl flag: 1, compatibility id: 4
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 172 kb/s (default)
Metadata:
creation_time : 2021-08-03T11:23:40.000000Z
handler_name : Core Media Audio
vendor_id : [0][0][0][0]
Stream #0:2[0x3](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
Metadata:
creation_time : 2021-08-03T11:23:40.000000Z
handler_name : Core Media Metadata
Stream #0:3[0x4](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
Metadata:
creation_time : 2021-08-03T11:23:40.000000Z
handler_name : Core Media Metadata
Stream #0:4[0x5](und): Data: none (mebx / 0x7862656D), 34 kb/s (default)
Metadata:
creation_time : 2021-08-03T11:23:40.000000Z
handler_name : Core Media Metadata
At least one output file must be specified
对于工作视频 ffmpeg -i "rgb.mov" -hide_banner
给出:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'rgb.mov':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2021-12-01T10:53:47.000000Z
com.apple.quicktime.location.accuracy.horizontal: 4.785777
com.apple.quicktime.location.ISO6709: +51.5485+000.1627+012.533/
com.apple.quicktime.make: Apple
com.apple.quicktime.model: iPhone 12 Pro
com.apple.quicktime.software: 14.8.1
com.apple.quicktime.creationdate: 2021-12-01T10:53:47+0000
Duration: 00:00:36.35, start: 0.000000, bitrate: 45692 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 45457 kb/s, 29.99 fps, 29.97 tbr, 600 tbn (default)
Metadata:
creation_time : 2021-12-01T10:53:47.000000Z
handler_name : Core Media Video
vendor_id : [0][0][0][0]
encoder : H.264
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 188 kb/s (default)
Metadata:
creation_time : 2021-12-01T10:53:47.000000Z
handler_name : Core Media Audio
vendor_id : [0][0][0][0]
Stream #0:2[0x3](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
Metadata:
creation_time : 2021-12-01T10:53:47.000000Z
handler_name : Core Media Metadata
Stream #0:3[0x4](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
Metadata:
creation_time : 2021-12-01T10:53:47.000000Z
handler_name : Core Media Metadata
Stream #0:4[0x5](und): Data: none (mebx / 0x7862656D), 34 kb/s (default)
Metadata:
creation_time : 2021-12-01T10:53:47.000000Z
handler_name : Core Media Metadata
At least one output file must be specified
caniuse.com 解释说:
The High Efficiency Video Coding (HEVC) compression standard is a video compression format intended to succeed H.264
并进一步表明目前浏览器对 HEVC 的支持非常差。
@Gyan 评论说:
Your source video is HDR. You'll have to tonemap it to SDR.
现在我假设@Gyan 知道它是 HDR,因为它使用 HEVC。 article 解释了 HDR(高动态范围)并详细讨论了它如何影响亮度、颜色和对比度。
最后,这个 article 解释了 HDR 看起来很糟糕 - 例如亮度、对比度和颜色问题 - 在不支持 HDR 的设备上。值得庆幸的是,它还通过使用此过滤器提供了 ffmpeg
修复:
-vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p
将此标志添加到我现有的 ffmpeg
命令中,完成了 HDR 到 SDR(标准动态范围)的转换/色调映射,使其在 Chrome 上工作并解决了我的问题。
注意:检测 HDR 本身就是一个问题,所以我不会在这里介绍,但请参阅 this link
我有一个 .mov 文件,我 运行 通过 ffmpeg
创建 HLS 段/块。但是,当我播放HLS视频时,它太亮了。
为了完整性检查,我 运行 相同的 .mov 视频文件通过 FlowPlayer 处理管道,结果是一样的,输出视频太亮了!
我有很多视频。大多数没有这个问题,但一些(并且只有一些).mov 文件出现这个问题。
视频流中断报告(完整输出见下文):
Stream #0:0[0x1](und): Video: hevc (Main 10) (hvc1 / 0x31637668), yuv420p10le(tv, bt2020nc/bt2020/arib-std-b67), 1920x1080, 8507 kb/s, 29.98 fps, 29.97 tbr, 600 tbn (default)
工作视频流报告(完整输出见下文):
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 45457 kb/s, 29.99 fps, 29.97 tbr, 600 tbn (default)
这是否与 hevc v h264
有关(无论它们是什么意思)?
顺便说一句,我正在使用本机 HTML5 视频播放器与 hls.js 一起播放视频。
我该如何解决这个问题? TIA
这是我的 ffmpeg
命令:
ffmpeg -i "rgb.mov" \
-v warning -preset ultrafast -g 59.96 -sc_threshold 0 \
-map 0:0 -map 0:0 \
-s:v:0 1920x1080 -c:v:0 libx264 -b:v:0 4521k \
-s:v:1 1920x1080 -c:v:1 libx264 -b:v:1 7347k \
-var_stream_map "v:0 v:1" \
-master_pl_name master.m3u8 -f hls \
-hls_time 6 -hls_list_size 0 -hls_playlist_type vod \
-hls_segment_filename "hls/v%v/chunk%d.ts" "hls/v%v/index.m3u8"
下面是一些屏幕截图,显示了原始视频与输出视频的对比。
原版:
输出:
对于问题视频 ffmpeg -i "rgb.mov" -hide_banner
给出:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'rgb.mov':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2021-08-03T11:23:40.000000Z
com.apple.quicktime.location.accuracy.horizontal: 3.594173
com.apple.quicktime.location.ISO6709: +51.5483+000.1628+000.459/
com.apple.quicktime.make: Apple
com.apple.quicktime.model: iPhone 12 Pro
com.apple.quicktime.software: 14.7.1
com.apple.quicktime.creationdate: 2021-08-03T12:23:40+0100
Duration: 00:00:54.54, start: 0.000000, bitrate: 8730 kb/s
Stream #0:0[0x1](und): Video: hevc (Main 10) (hvc1 / 0x31637668), yuv420p10le(tv, bt2020nc/bt2020/arib-std-b67), 1920x1080, 8507 kb/s, 29.98 fps, 29.97 tbr, 600 tbn (default)
Metadata:
creation_time : 2021-08-03T11:23:40.000000Z
handler_name : Core Media Video
vendor_id : [0][0][0][0]
encoder : HEVC
Side data:
DOVI configuration record: version: 1.0, profile: 8, level: 4, rpu flag: 1, el flag: 0, bl flag: 1, compatibility id: 4
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 172 kb/s (default)
Metadata:
creation_time : 2021-08-03T11:23:40.000000Z
handler_name : Core Media Audio
vendor_id : [0][0][0][0]
Stream #0:2[0x3](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
Metadata:
creation_time : 2021-08-03T11:23:40.000000Z
handler_name : Core Media Metadata
Stream #0:3[0x4](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
Metadata:
creation_time : 2021-08-03T11:23:40.000000Z
handler_name : Core Media Metadata
Stream #0:4[0x5](und): Data: none (mebx / 0x7862656D), 34 kb/s (default)
Metadata:
creation_time : 2021-08-03T11:23:40.000000Z
handler_name : Core Media Metadata
At least one output file must be specified
对于工作视频 ffmpeg -i "rgb.mov" -hide_banner
给出:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'rgb.mov':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2021-12-01T10:53:47.000000Z
com.apple.quicktime.location.accuracy.horizontal: 4.785777
com.apple.quicktime.location.ISO6709: +51.5485+000.1627+012.533/
com.apple.quicktime.make: Apple
com.apple.quicktime.model: iPhone 12 Pro
com.apple.quicktime.software: 14.8.1
com.apple.quicktime.creationdate: 2021-12-01T10:53:47+0000
Duration: 00:00:36.35, start: 0.000000, bitrate: 45692 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 45457 kb/s, 29.99 fps, 29.97 tbr, 600 tbn (default)
Metadata:
creation_time : 2021-12-01T10:53:47.000000Z
handler_name : Core Media Video
vendor_id : [0][0][0][0]
encoder : H.264
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 188 kb/s (default)
Metadata:
creation_time : 2021-12-01T10:53:47.000000Z
handler_name : Core Media Audio
vendor_id : [0][0][0][0]
Stream #0:2[0x3](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
Metadata:
creation_time : 2021-12-01T10:53:47.000000Z
handler_name : Core Media Metadata
Stream #0:3[0x4](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
Metadata:
creation_time : 2021-12-01T10:53:47.000000Z
handler_name : Core Media Metadata
Stream #0:4[0x5](und): Data: none (mebx / 0x7862656D), 34 kb/s (default)
Metadata:
creation_time : 2021-12-01T10:53:47.000000Z
handler_name : Core Media Metadata
At least one output file must be specified
caniuse.com 解释说:
The High Efficiency Video Coding (HEVC) compression standard is a video compression format intended to succeed H.264
并进一步表明目前浏览器对 HEVC 的支持非常差。
@Gyan 评论说:
Your source video is HDR. You'll have to tonemap it to SDR.
现在我假设@Gyan 知道它是 HDR,因为它使用 HEVC。 article 解释了 HDR(高动态范围)并详细讨论了它如何影响亮度、颜色和对比度。
最后,这个 article 解释了 HDR 看起来很糟糕 - 例如亮度、对比度和颜色问题 - 在不支持 HDR 的设备上。值得庆幸的是,它还通过使用此过滤器提供了 ffmpeg
修复:
-vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p
将此标志添加到我现有的 ffmpeg
命令中,完成了 HDR 到 SDR(标准动态范围)的转换/色调映射,使其在 Chrome 上工作并解决了我的问题。
注意:检测 HDR 本身就是一个问题,所以我不会在这里介绍,但请参阅 this link