ffmpeg 设置以获得高质量的 YouTube 视频

ffmpeg 设置以获得高质量的 YouTube 视频

我正在尝试录制桌面的短视频并将其上传到 youtube。问题是,每次我将其上传到 youtube 甚至 dropbox(作为视频)时,质量都会差很多。

我的 ffmpeg 执行:

ffmpeg -f x11grab -s 1366x768 -r 30 -i :0.0 -codec:v libx264 -crf 10 -bf 20 -flags +cgop -pix_fmt yuv440p -movflags faststart help.mp4

基于:

ffmpeg -i <input file> -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart <output_name>.mp4

我发现这里

原始文件(.zip): https://www.dropbox.com/s/xlkr83rkqfxon23/help.mp4.zip?dl=0

上传至 YouTube 后的文件: https://www.youtube.com/watch?v=ewEUgpXOpmg

正如您所看到的,上传到 YouTube 后质量有所下降。

你能帮帮我吗?
我应该如何选择合适的参数来录制和上传高质量的视频?

答案1

尝试拍摄录制的视频并对其进行升级。

我听说,当 YouTube 的编码系统看到超高分辨率视频时,它会以不同的方式处理它,并更加努力地使低分辨率版本的质量高于 1080p/等输入。我自己从未探索过这一点,YMMV,但值得一试。

唯一的问题是,升级必然是一个有损过程;完美像素缩放看起来很糟糕(见下文)。除非 YouTube 的编码系统很棒,否则我完全相信,当观看(重新编码、缩小的)1080p/720p 版本时,视频需要平滑处理才能看起来仍然很好。

因此,关键在于在放大>缩小过程中实现平衡,以尽可能减少模糊/损失。这通常是一个反复试验的问题,需要现实世界的输入(具体到您将在屏幕上显示的内容;例如,大多数文本)。

(此外,我不知道您是否可以在将视频上传到 YT 时删除/隐藏/等某些视频分辨率,但在这种情况下,您几乎肯定会隐藏 2K/4K 上传的版本。)

我摆弄了一下 ffmpeg;最有用的两条信息是扩展方法页面缩放器文档

以下是我的想法:

ffmpeg -i help.mp4 -c:v libx264 -preset ultrafast -vf scale=iw*4:-1:flags=neighbor+bitexact+accurate_rnd+full_chroma_int+full_chroma_inp+print_info -y help4x.mp4

  • -c:v libx264 -preset ultrafast使编码速度更快,但占用大量磁盘空间(本例中输出 6.6MB,输入 1.7MB)。无论编码设置如何,升级似乎都需要 1GB 以上的 RAM 和所有 CPU,因此如果您的带宽大于时间,您可能更喜欢加速。H264 编码器还有其他速度/性能设置,请参阅https://trac.ffmpeg.org/wiki/Encode/H.264

  • -vf scale=iw*4:-1将视频升级 4 倍 >:D - iw= 输入宽度,*4(乘以 4)不言自明,-1=“根据高度计算出宽度并保持纵横比。”

  • flags=

    • neighbor在这里选择的是向您展示哪个不进行任何模糊/平滑处理,即完美的像素加倍/三倍/等等...并让您知道它实际上看起来令人惊讶地糟糕缩小(我没想到这一点)。experimental看起来不错,不确定它是否比默认值更好bicubic。我强烈建议翻阅https://ffmpeg.org/ffmpeg-scaler.html,制作一个简短的测试视频来展示您真正想要录制的内容,并尝试所有编码器(甚至可能上传所有测试视频)。无论您在这里做什么工作,我都很好奇您会得到什么结果!

    • accurate_rnd+full_chroma_int+full_chroma_inp+print_info发现https://superuser.com/questions/782133/ffmpeg-upscaling-video然后把它们扔进去。我不知道它们有什么用处或是否有用。:D

    • bitexact听起来不错。我不知道这还能做什么。

    • print_info在“按 [q] 停止”下显示您正在使用的缩放器。

-y 启用覆盖否则 ffmpeg 每次都会用“覆盖 (y/n)”来烦扰你。

相关内容