ffmpeg 在视频上叠加图像并尝试保持原始视频质量

ffmpeg 在视频上叠加图像并尝试保持原始视频质量

我正在向视频添加叠加图像。并且我试图使输出与原始视频非常相似,以获得最佳质量,例如原始视频(如屏幕截图中所示)日期速率:23296 kbps 总比特率:23613 kbps

在此处输入图片描述

我的 ffmpeg 代码如下所示:

for %%a in ("*.mp4") do C:\ffmpeg\ffmpeg.exe -threads 18 -i "%%a" -i Logo.png -filter_complex "overlay=main_w-overlay_w-40:40" -crf 23 -c:v libx264 -preset fast -profile:v high -b 15000k -maxrate 15000k -coder 1 -pix_fmt yuv420p -movflags +faststart -g 30 -bf 2 -c:a aac -b:a 384k -profile:a aac_low "LogoHD\%%~na.mp4"

任何关于改进输出并使其与原始输出保持相似的建议都将受到赞赏。

答案1

一组基本的改进:

  1. 改变你的-b 15000k -maxrate 15000k23000k匹配你的原有。
  2. 更好的预设选择:使用fast预设可能会更快,但如果您想保持质量,那么较慢的预设可能会更好。
  3. 降低crf也应该保留更多的质量,所以你会希望它尽可能低以适合你的比特率。从FFMPEG h.264 维基

    通常情况下,值越低,质量越高,主观上合理的范围是 17-28。认为 17 或 18 在视觉上无损或接近无损;它应该看起来与输入相同或几乎相同,但从技术上讲它并不是无损的。

  4. 我建议删除,-c:a aac -b:a 384k -profile:a aac_low这样-c:a copy当您只想在视频中嵌入某些内容时,您就不会转码音频。
    • 您的原始音频为 317kbps,并且无论出于何种原因,您正在转换向上到 384kbps。你实际上是在浪费更多的数据潜在的质量损失.-c:a copy将保留原始音频而不会造成任何损失,假设您的最终用户不介意格式。
  5. coder 1 启用 CABAC 编码虽然速度较慢,但​​压缩效果更好,因此是保持质量的好选择
  6. -pix_fmt yuv420p取决于你的输入。我会删除它,这样你只需复制输入像素格式而不是删除数据。如果您有yuv444p输入,则转换为 可能会损失一些质量yuv420p,但根据视频的不同,可能不明显。
  7. -movflags +faststart 将元数据移动到文件开头因此,播放器无需先下载所有内容即可轻松了解如何播放文件。如果您的播放器支持此功能,这是一个合理的选择,只要您使用的是优质的现代播放器,就不会有真正的缺点。
  8. -g 30-bf 2,这些是针对特定情况调整视频编码器。-g 30意味着 I 帧之间最多允许 30 个 P 帧或 B 帧。I 帧是“完整图像”帧,而其他帧类型则基于上一个或下一个 I 帧的变化:
    在此处输入图片描述
    是否需要这些选项取决于您是否知道有大量快速变化的视频。就我个人而言,我会放弃这些选项,让编码器自己处理,只有当我知道某个特定视频可能更适合它们时,我才会更改它们,转换一堆视频不太可能对所有视频都有帮助

我对你的话的修改是

for %%a in ("*.mp4") do C:\ffmpeg\ffmpeg.exe -threads 18 -i "%%a" -i Logo.png -filter_complex "overlay=main_w-overlay_w-40:40" -crf 18 -c:v libx264 -preset slow -profile:v high -b 23000k -maxrate 23000k -coder 1 -movflags +faststart -c:a copy "LogoHD\%%~na.mp4"

相关内容