我在为 YouTube 编码视频时遇到了麻烦。内容不太“适合压缩”(这是《战地 4》的游戏画面),但我 100% 确信效果会更好。以下是一些链接:
- 从源视频和 YouTube 处理后的视频中提取的相同帧:https://i.stack.imgur.com/8rTcU.jpg
- 源 MP4:https://mega.co.nz/#!Z990iCDD!QHpW3h6ZnEy3tlhsCYAEnGGpoY4d4N9ImgdPdlWLwdE
- 视频本身:http://youtu.be/0b8ollYsQU8
- 一个人在同一张地图上玩游戏的随机片段(当然,与 1080p 版本进行比较):http://youtu.be/R4Nz2dBZRQY
我用来调用编码器的命令:
ffmpeg.exe -i %INPUT%.avs -c:v libx264 -profile high -g 15 -keyint_min 15 -coder 1 ^
-preset slow -bf 2 -subq 9 -crf 18 -c:a libvorbis -pix_fmt yuv420p %OUTPUT%.mp4
我尝试过许多不同的配置:
- http://youtu.be/T9CH4ypbI_I
- http://youtu.be/eFkHGi_kj7U
- http://youtu.be/D7nZFQHWNuw
- http://youtu.be/emzQhiMHxxE
但似乎没有什么改变。即使是用 ShadowPlay 录制的未经修改的原始镜头,看起来也很糟糕:http://youtu.be/bLR-QavrpGU。也许我应该尝试其他编码器?或者使用其他容器?我根据 YouTube 的官方指南选择了选项:https://support.google.com/youtube/answer/1722171
我现在什么主意都没有了。任何提示我都会非常感激。
PS 我确实意识到,我引用的帧是任何编码器的噩梦,但为什么它如此糟糕?为什么它会影响整个画面,而不仅仅是其中最困难的部分?
编辑:我尝试过用固定比特率进行编码(两次):
- 1080p 8000k~11mb
- 1080p 50000k~72MB
- 1440p 50000k~70mb(这不是打字错误,而是小于 1080p)
带有屏幕截图的相册已经更新。50m 似乎比其他所有都好一点(边缘更清晰,HUD 元素可识别,例如吉普车左侧树上的红色坦克图标;当然,除了缩小的 1440p,但它不在竞争对手之列),但这仍然没有接近它应该达到的效果。
答案1
您能做的不多。如果原始文件在 YouTube 上看起来很糟糕,那么重新编码并不能改善这种情况。我假设您正在重新编码“使用 ShadowPlay 录制的未经修改的原始素材”。如果可能,始终建议上传原始内容,除非它当然是一个超大文件并且不方便上传,因为 YouTube 会重新编码您提供的任何内容。在我看来,您的第一个链接的高清版本看起来并不糟糕,比较屏幕截图并不完全“公平”,因为人眼不会观看这样的视频。
至于您的命令:
重新编码看起来不错:
-crf
这是这里最重要的因素。您可以尝试稍微低一点的值。有些人声称看到了差异。我个人会省略,
-g 15 -keyint_min 15 -coder 1 -bf 2 -subq 9
因为预设将处理大多数这些选项,而且它们通常比我更聪明。-pix_fmt yuv420p
YouTube 可能不需要,但请注意,糟糕的播放器(QuickTime 等)可能无法正确解码除具有 4:2:0 色度子采样的 YUV(平面)色彩空间之外的任何内容。编码器会自动选择一个配置文件,因此您无需使用
-profile
(-profile:v
因为有些音频编码器也有-profile
)。如果您的解码器或设备不支持更高级的配置文件,则通常使用此选项。你可以流复制音频(
-c:a copy
)而不是重新编码它,但我猜你的输入音频未压缩。查看完整的 ffmpeg 控制台输出将有助于提供进一步的建议并避免猜测。
这不是一个有用的建议,但其他网站可能会提供更好的质量。
另请参阅:
- FFmpeg 和 x264 编码指南
- 如何使用
ffmpeg
(稍微过时了)
答案2
这里的问题是,YouTube 将 1080p 视频的比特率限制为 6Mbps,因为绝大多数用户的平均持续下载速度为 5.8Mbps。
(他们的大多数用户也太愚蠢了,不会去摆弄设置,甚至不知道是什么导致了他们的延迟,所以他们做出了改变(我相信是在 7 月至 8 月的时间范围内)来解决大众的抱怨。)
我建议修复,但目前还没有。过去 3 个月内曾有过多个可行的修复方案,但由于 YouTube 正在调整其基础设施,所有方案都被删除了。这里有一个你可以尝试的方法,但 YMMV 和 YT 可能已经禁用了它。
- 以 1920x1080 分辨率录制
- 为了用户的利益,使用您可以处理的最低比特率以 2048x1152 进行编码。
- 上传。
- 告诉您的用户以“原始”或 1440p 进行播放,无论他们可以选择哪种选项。
结果。
如果您的用户将视频设置为 1080p,那么他们可能会觉得视频比您之前的 1080p 视频稍微模糊一些。YT 会将视频下采样为 2048x1152,并将比特率降低至 6Mbps。如果他们以全分辨率进行流式传输,他们仍会进行下采样,尽管是在他们自己的机器上,并且会分配到高得多的比特率。更高的比特率有利有弊。它允许他们获得更高质量的图像,但大多数人必须预加载一半视频,以防止加载暂停。如果他们没有手动禁用 Dash 播放,Dash 播放还会将预加载时间限制为每次 30 秒,因此他们也需要关闭此功能。
答案3
-movflags faststart B:\output.mp4
尝试在上传之前将其添加到最终结果中。
将高清帧率保持在 24 或 25 左右,质量保持在 4 以下,尽量在上传前满足 YouTube 要求的视频规格。NTSC 为 24000/1001。PAL 为 25.0。可能必须向 YouTube 付费才能在类似订阅的服务中上传最佳质量的视频。