【问题标题】:ffmpeg scaling nvenc maintaining aspect ratioffmpeg缩放nvenc保持纵横比
【发布时间】:2019-11-03 22:08:31
【问题描述】:

我想将 mkv 文件完全硬件转码为 mp4 并放大/缩小内容以保持纵横比。

使用基于 CPU 的转码,您只需添加:

scale=1920:1080:force_original_aspect_ratio=decrease

使用硬件 (CUDA) 转码,在解码端使用 -resize 或在编码端使用 -scale_npp 是可能的,但两者似乎都无法强制原始比例。

例如,我想将 1920x800 文件放大到 1920x1080,同时用黑条填充其余文件,这样我就可以在黑条上覆盖字幕...

有了这个,我可以使用 GPU 功率而不是使用 cpu 来完全转码。有什么想法吗?

【问题讨论】:

    标签: ffmpeg nvenc


    【解决方案1】:

    使用 scale_npp,您可以手动实现force_original_aspect_ratio

    假设您的最大尺寸为 1920x1080,

    应该是

    scale_npp=w='if(gt(a\,1920/1080)\,1920\,oh*a)':h='if(gt(a\,1920/1080)\,ow/a\,1080)'
    

    但是,scale 和 scale_npp 都不会填充输入。这需要使用 s/w pad 过滤器。

    【讨论】:

    • 垫子是什么意思?
    • 同时用黑条填充其余部分 --> 这称为填充
    • 嗯明白了,这证实了我的问题,因此无法使用纯硬件。我将 hw 与 sw 混合现在使编码比纯 sw 快 8 倍,所以我很高兴
    • @Sambir 你能展示一个带有scale_npppad 过滤器混合的命令示例吗?