网站首页 > 博客文章 正文
在此 FFmpeg 教程中,我们学习使用 FFmpeg 的命令行工具更改视频的分辨率(或调整视频的大小/缩放)。
更改视频的分辨率(也称为调整大小或缩放)是视频编辑、处理和压缩中非常常见的操作。对于 ABR 视频流尤其如此,其中将单个视频作为源并压缩为多个不同的比特率分辨率组合。例如,输入视频的分辨率可以是1920x1080,ABR 比特流可以是1280x720,640x480等。
因此,作为第一步,让我们找出输入视频的分辨率是多少。使用FFmpeg 版本附带的工具ffprobe,让我们确定输入视频的分辨率。这是使用ffprobe.
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4
此命令的输出应该与您的控制台上显示的1920x1080。太好了——您现在知道视频的分辨率并且现在可以缩放或更改分辨率。
注意:您必须注意,向上/向下缩放的行为是一个有损过程,会导致视频质量有所下降。
如何使用 FFmpeg 调整/缩放/更改视频的分辨率?
使用 FFmpeg 缩放或更改视频的分辨率是由FFmpeg 中的过滤器scale完成的。要使用scale过滤器,请使用以下命令 –
ffmpeg -i input.mp4 -vf scale=$w:$h <encoding-parameters> output.mp4
其中,$w和$h表示目标视频所需的宽度和高度。例如,您可以使用-vf scale=640:480将视频大小调整为480p.
而已!使用这个简单的命令,您可以使用 FFmpeg 更改视频的分辨率。
并且,在 FFmpeg 更改视频的分辨率后,它将以该分辨率重新编码。在上面的命令行中,您可以向 FFmpeg 提供编码参数,并使用这些参数对缩放后的视频进行编码。例如,您可以告诉 FFmpeg 使用 crf=18 进行编码,以获得高质量的 H.264/AVC 编码,或者选择其他编码方式!
好的,让我们来解决下一个主题,即更改视频的分辨率但保留/保持其纵横比。
如何使用 FFmpeg 在保持高质量的同时调整视频大小
调整大小后,您可能会注意到输出视频的质量很差或达不到您的预期。通过告诉 FFmpeg 您希望在调整大小过程后使用的视频编码参数,可以轻松解决此问题。
这是一个例子——
ffmpeg -i input.mp4 -vf scale=1280:720 -preset slow -crf 18 output.mp4
在这里,您要告诉 FFmpeg 将视频缩放至 720p,然后使用 crf=18 和 libx264 的慢速预设进行编码。由于它打开的编码工具的数量,通常可以提供非常好的质量。
如何更改视频的分辨率但保持纵横比?
图像的纵横比在维基百科中有如下定义:图像的纵横比是其宽度与高度的比值。它通常表示为用冒号分隔的两个数字,如16:9. 对于x:y纵横比,图像是 x 个单位宽和 y 个单位高。
在处理视频时遇到这个问题很常见:?如何更改视频的分辨率(或缩放视频)但保持或保留视频的原始纵横比。
在FFmpeg中,如果您想在缩放视频的同时保持其宽高比,则需要设置height或width参数之一并将另一个参数设置为-1。也就是说,如果您设置height,则将宽度设置为 -1,反之亦然。
为了演示,假设以下命令将高清视频 ( 1920x1080) 作为其输入。并且,假设我们想要更改其分辨率。这可以通过上面讨论的两种方式完成,所以让我们尝试两种方式。
粉丝福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs),有需要的可以进企鹅裙927239107领取哦~
1.指定宽度以保持纵横比
ffmpeg -i input.mp4 -vf scale=320:-1 output.mp4
生成的视频的分辨率为320x180. 这是因为1920 / 320= 6。因此,height被缩放到1080 / 6 = 180像素。
2.指定高度以保持纵横比
ffmpeg -i input.mp4 -vf scale=-1:720 output.mp4
生成的视频的分辨率为1280x720. 这是因为1080 / 720= 1.5。因此,width被缩放到1920 / 1.5 = 1280像素。
在 FFmpeg 中使用变量缩放/更改视频的分辨率
我们可以使用表示视频参数的变量来实现相同的缩放命令。输入视频的width和height分别用iw和表示ih。
让我们看看将视频宽度缩放两倍 ( 2x) 的命令是什么样的。
ffmpeg -i input.mp4 -vf scale=iw*2:ih output.mp4
如果你想用一个数字除以高度或宽度,语法会稍微改变,因为scale=iw/2:ih/2参数需要用双引号括起来。
ffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" output.mp4
避免根据输入视频的尺寸升级视频
正如我们在文章开头提到的,每次向上/向下缩放操作通常不会产生与输入视频相同水平的视频质量。在缩放过程中必然会有一些压缩损失。如果输入分辨率太低,FFmpeg提供了一个巧妙的技巧来防止放大。
ffmpeg -i input.mp4 -vf "scale='min(320,iw)':'min(240,ih)'" output.mp4
在上面的命令行中,执行缩放的最小宽度/高度分别设置为320和240像素。这是防止质量不佳缩放的一种非常简单的方法。
猜你喜欢
- 2024-11-28 RTC业务中的视频编解码引擎构建
- 2024-11-28 JavaCV的摄像头实战之五:推流(我的直播梦)
- 2024-11-28 Nginx 直播服务部署(直播 + 分流 + 画面水印)
- 2024-11-28 5 分钟完成 Nginx 直播服务部署(直播 + 分流 + 画面水印)
- 2024-11-28 JavaCV的摄像头实战之六:保存为mp4文件(有声音)
- 2024-11-28 FFmpeg功能命令集合(超详细)
- 2024-11-28 如何将两个视频合并成一个视频?在线教学
- 2024-11-28 淘宝直播技术干货:高清、低延时的实时视频直播技术解密
- 2024-11-28 剪辑视频时发现音画不同步的解决方法
- 2024-11-28 音视频开发之旅(31) -FFMPEG常用命令
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)