![ffmpeg 设置以获得高质量的 YouTube 视频](https://linux22.com/image/1556387/ffmpeg%20%E8%AE%BE%E7%BD%AE%E4%BB%A5%E8%8E%B7%E5%BE%97%E9%AB%98%E8%B4%A8%E9%87%8F%E7%9A%84%20YouTube%20%E8%A7%86%E9%A2%91.png)
我正在尝试录制桌面的短视频并将其上传到 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然后把它们扔进去。我不知道它们有什么用处或是否有用。:Dbitexact
听起来不错。我不知道这还能做什么。print_info
在“按 [q] 停止”下显示您正在使用的缩放器。
-y
启用覆盖否则 ffmpeg 每次都会用“覆盖 (y/n)”来烦扰你。