停止 FFMPEG 升级视频

停止 FFMPEG 升级视频

我正在使用 FFMPEG 转码视频,该功能会自动触发。我试图将视频缩小为多种分辨率,同时保持宽高比(缩小以适合)。如果原始视频分辨率小于命令中指定的分辨率,则跳过转码并停止为该特定分辨率创建输出文件。

例如:

我有一个分辨率为 1920x1080 的视频

输出:

  • 3840x2160(跳过/停止)
  • 2560x1440(跳过/停止)
  • 1920x1080(继续输出-1080p.mp4)
  • 1280x720(继续输出-720p.mp4)

我尝试了很多命令,但都没有用。请问有没有什么命令可以实现这个功能?

以下是我为 FFMPEG 编写的最新工作命令。抱歉,我对 FFMPEG 还很陌生,我知道当前的命令还远远达不到我想要的效果。

ffmpeg -i sample.mp4 -c:a copy -vf scale='min(2160\,iw):-2' -movflags +faststart out2160.mp4 -vf scale='min(1440\,iw):-2' -movflags +faststart out1440.mp4 -vf scale='min(1080\,iw):-2' -movflags +faststart out1080.mp4 -vf scale='min(720\,iw):-2' -movflags +faststart out720.mp4 -vf thumbnail -vf scale='min(500\,iw):-2' -vframes 1 thumb500.png -vf scale='min(270\,iw):-2' -vframes 1 thumb270.png

如果sample.mp4的分辨率是1920x1080p或者更小,此命令将输出这些文件:

  • out2160.mp4
  • out1440.mp4
  • 出1080.mp4
  • out720.mp4
  • 拇指500.png
  • 拇指270.png

由于我自动触发了 FFMPEG,我希望命令可以比较已设置的分辨率。如果原始视频分辨率较小,则跳过它,没有必要创建或升级大于原始分辨率的文件。仅输出相同或较小的分辨率,同时保持纵横比(缩小以适应)。如果您能指导我,那就太好了,再次感谢。

答案1

这可以通过使用裁剪过滤器来实现,如果裁剪后的输出尺寸大于输入,则该过滤器将失败。如果命令失败,将创建输出文件,但其大小将为 0。

每种变体都需要使用单独的命令进行转换。不能使用单个命令,因为如果其中一个管道发生故障,整个命令都会中止。

裁剪过滤器应按如下方式使用:

ffmpeg -i sample.mp4 -c:a copy -vf crop=iw:'max(ih,2160)',scale=-2:2160 -movflags +faststart out2160.mp4 

裁剪宽度与输入宽度相同。裁剪高度设置为输入高度和目标高度的最大值。如果输入高度小于目标高度,裁剪过滤器初始化将失败,命令将中止。如果输入高度等于或大于目标高度,则将整个宽度和高度传递到缩放过滤器。

相关内容