FFmpeg 超过 1000 帧重复且输入高度不匹配

Kar*_*ine 6 ffmpeg

我目前正在使用此代码并排记录两个窗口:

ffmpeg -f gdigrab -framerate 30 -i title="" -f gdigrab -framerate 30 -i title="" -c:v h264_nvenc -qp 0 -filter_complex hstack=inputs=2 2.mp4
Run Code Online (Sandbox Code Playgroud)

但是它在执行后抛出这个错误:

More than 1000 frames duplicated
Run Code Online (Sandbox Code Playgroud)

错误日志:https : //pastebin.com/gREVrKVK

一个窗口大部分时间是同一帧,每 3 秒可能有 1 帧变化。

控制台中的另一个错误是当第一个窗口与第二个窗口的高度不同时,错误:

[Parsed_hstack_0 @ 000002491166fd00] Input 1 height 500 does not match input 0 height 488.
[Parsed_hstack_0 @ 000002491166fd00] Failed to configure output pad on Parsed_hstack_0
Run Code Online (Sandbox Code Playgroud)

错误日志:https : //pastebin.com/vqdBPfpv

当它们具有不同的尺寸时看起来是不可能记录的,所以,如果可能的话,我想问一下如何将第一个窗口缩放到第二个窗口的相同高度(不需要保持纵横比),考虑到低 CPU使用高于视频质量。

llo*_*gan 7

问题1:如何匹配输入高度?

在此输入图像描述 在此输入图像描述
原始图像

比例尺2参考

在此输入图像描述

使用scale2refinput0过滤器使高度匹配input1高度:

ffmpeg -i input0 -i input1 -filter_complex "[0][1]scale2ref=w=oh*mdar:h=ih[left][right];[left][right]hstack" output
Run Code Online (Sandbox Code Playgroud)

适合特定尺寸

在此输入图像描述

使每个输入适合 175x100 并带有灰色背景:

ffmpeg -i input0 -i input1 -filter_complex "[0]scale=175:100:force_original_aspect_ratio=decrease,pad=175:100:-1:-1:color=gray,setsar=1[left];[1]scale=175:100:force_original_aspect_ratio=decrease,pad=175:100:-1:-1:color=gray,setsar=1[right];[left][right]hstack" output
Run Code Online (Sandbox Code Playgroud)

更多示例:使用 ffmpeg 调整视频大小以适应静态大小


问题2:超过1000帧重复

请参阅日志中的警告:

[mp4 @ 0000026082276400] Frame rate very high for a muxer not efficiently supporting it.
Please consider specifying a lower framerate, a different muxer or -vsync 2
Run Code Online (Sandbox Code Playgroud)

添加-vsync 2输出选项,或输出为不同的格式,例如.mkv.

  • @Karine 应该作为一个新问题提出。这个问答主要是关于*如何匹配输入高度?*。您需要在 Stack Overflow 上每篇帖子提出 1 个问题。 (2认同)