FFmpeg - 使用纵横比更改视频的分辨率
Posted
技术标签:
【中文标题】FFmpeg - 使用纵横比更改视频的分辨率【英文标题】:FFmpeg - Change resolution of the video with aspect ratio 【发布时间】:2014-07-28 01:02:58 【问题描述】:全部。
如何使用 FFmpeg 更改具有宽高比的视频分辨率?
有多种选择 http://manpages.ubuntu.com/manpages/oneiric/man1/ffmpeg.1.html
-s size
Set frame size. The format is wxh (ffserver default = 160x128,
ffmpeg default = same as source). The following abbreviations are
recognized:
和
-aspect aspect
Set the video display aspect ratio specified by aspect.
aspect can be a floating point number string, or a string of the
form num:den, where num and den are the numerator and denominator
of the aspect ratio. For example "4:3", "16:9", "1.3333", and
"1.7777" are valid argument values.
例如,我有两个输入视频:
分辨率为 200*400 分辨率为 400*700我需要制作分辨率为 100*200 的输出视频。
如果我用 -s 100x200 运行 ffmpeg,那么第二个视频的宽高比会很差。
如何按宽度限制输出视频,按高度自动宽高比?
例如,我想为输出视频仅指定宽度 100px 并且 ffmpeg 必须自动计算具有正确纵横比的高度。
对于第一个视频,它将是:
200/100=2
400/2=200
即100x200
第二个视频是:
400/100=4
700/4=75
即 100x75
有可能吗?
【问题讨论】:
有趣的问题 - 查看ffmpeg
或ffprobe
输出,您会注意到存在SAR 和DAR(源/目标纵横比?)。这些不是一回事。例如。我只想用错误的 AR 修复视频,所以我运行了ffmpeg -i input.mp4 -vf setdar=16/10 output.mp4
。它不想允许-c:v copy
!然而,当我用mpv
播放视频时,有:VO: [gpu] 600x480 => 768x480 yuv420p
- 所以它在播放时被调整大小!那么为什么这个操作需要重新编码呢?
好的,如果有人想知道如何在不重新编码的情况下更改 DAR:superuser.com/questions/907933/…sigh.
【参考方案1】:
如果您要转换具有不同纵横比的纵向和横向视频,您可以使用 force_original_aspect_ratio 选项:
scale=w=100:h=200:force_original_aspect_ratio=decrease
您可以根据更改 force_original_aspect_ratio 值的纵横比选择减小或增加视频大小输出。
来源:https://trac.ffmpeg.org/wiki/Scaling
【讨论】:
【参考方案2】:更改分辨率的简单命令,但保持原始外观: (本例改为 800 宽度)
ffmpeg -i ogirinal_video.gif -vf scale=800:-1 changed_resolution.gif
【讨论】:
【参考方案3】:ffmpeg -i <input> -vf scale=720x406,setdar=16:9 <output>
【讨论】:
那个链接坏了 对我来说,我必须使用-vf scale=854x480,setdar=16/9
。 '/' 而不是 ':'【参考方案4】:
使用幻数-1
按比例调整视频大小,setdar
需要使用斜杠/
作为分隔符而不是冒号:
。
ffmpeg -i <input> -vf "scale=100:-1,setdar=16/9" <output>
该命令会将视频200x400
调整为100x200
和400x700
调整为100x175
,纵横比为16:9
【讨论】:
我读过很多人们使用-2
而不是-1
。我找不到区别。您能否将我链接到任何可以解释它的文档或文章?
@TheLebDev, -1
将告诉ffmpeg
自动选择与提供的宽度相关的正确高度(ffmpeg.org/ffmpeg-filters.html#toc-Examples-98)
@TheLebDev -2 将确保维度是 2 的倍数。类似地,-3 将产生一个维度是 3 的倍数,依此类推。 trac.ffmpeg.org/wiki/Scaling#KeepingtheAspectRatio【参考方案5】:
下面提到两个选项: 有规模:
ffmpeg -i source.mp4 -r 15 -s 320x240 -strict -2 destination.mp4
长宽比:
ffmpeg -i source.mp4 -r 15 -aspect 1:1 -strict -2 destination.mp4
【讨论】:
【参考方案6】:不适用于视频。该页面仅处理静止图像。
由于尚未完全理解的原因,FFMPEG 使用 Sample/Pixel Aspect Ratio 将视频转回原始纵横比。例如,如果您将视频拉伸两倍宽,它会使宽高比为 1:2,或类似的东西 (2:1?)
因此,如果您真的想将视频拉伸为“Stretch Armstrong”样式,则需要强制 SAR(Sample Aspect Ratio):
ffmpeg -i <something> -vf scale=iw*55:ih,setsar=1:1 ...
FFMPEG 手册中没有很好地描述这一点,here's a video.stackexchange answer that puts it all in one place.
【讨论】:
如前所述,以下答案中提供的手册不正确,我正在继续查找信息。既然找到了,请阅读修改后的答案。以上是关于FFmpeg - 使用纵横比更改视频的分辨率的主要内容,如果未能解决你的问题,请参考以下文章