使用 FFmpeg 进行简单的视频编辑非常强大。它是一个命令行工具,虽然一开始可能看起来有点复杂,但掌握了基本命令后会非常有用。
使用 FFmpeg 轻松调整视频的大小/缩放/更改分辨率
在此 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) 作为其输入。并且,假设我们想要更改其分辨率。这可以通过上面讨论的两种方式完成,所以让我们尝试两种方式。
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 命令:
1. 剪切视频
如果你想从一个视频中剪切出一段,你需要指定开始时间 (-ss
) 和持续时间 (-t
),或者开始时间 (-ss
) 和结束时间 (-to
)。
-
指定持续时间:
ffmpeg -i input.mp4 -ss 00:01:00 -t 00:00:30 -codec copy output.mp4
-i input.mp4
:指定输入文件。-ss 00:01:00
:从视频的第 1 分钟开始剪切(时:分:秒)。-t 00:00:30
:剪切 30 秒的持续时间。-codec copy
:这非常重要!它会直接复制视频和音频流,而无需重新编码,这样速度快,并且不会损失质量。
-
指定结束时间:
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:01:30 -codec copy output.mp4
-to 00:01:30
:剪切到视频的第 1 分 30 秒。
2. 改变视频分辨率(缩放)
如果你想改变视频的尺寸,可以使用 -vf scale
过滤器。
ffmpeg -i input.mp4 -vf scale=1280:-1 output_720p.mp4
-vf scale=1280:-1
:将视频宽度设置为 1280 像素,-1
会自动计算高度以保持宽高比。你也可以指定具体的高度,例如scale=1280:720
。- 注意: 改变分辨率需要重新编码,这会比复制流慢。
3. 提取音频
从视频中提取音轨。
ffmpeg -i input.mp4 -vn output.mp3
-vn
:表示不包含视频流(video no)。output.mp3
:指定输出的音频文件格式。你也可以使用.aac
或其他音频格式。
4. 提取视频(无音频)
从视频中移除音轨,只保留视频。
ffmpeg -i input.mp4 -an -codec copy output_no_audio.mp4
-an
:表示不包含音频流(audio no)。-codec copy
:同样,为了避免重新编码,使用这个参数可以快速提取。
5. 合并视频(串联)
如果你有多个视频片段,想把它们按顺序连接起来,可以使用 FFmpeg 的 concat
解复用器或过滤器。
推荐方法:使用 Concat Demuxer (列表文件)
这种方法更快,因为不需要重新编码。
-
创建一个文本文件 (例如
mylist.txt
),列出你要合并的视频文件,每个文件一行,格式如下:file 'input1.mp4' file 'input2.mp4' file 'input3.mp4'
-
运行 FFmpeg 命令:
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4
-f concat
:使用 concat 解复用器。-safe 0
:在某些情况下可能需要,允许读取绝对路径或危险路径。-i mylist.txt
:指定包含文件列表的文本文件。-c copy
:复制流,不重新编码。
替代方法:使用 Concat 过滤器 (如果文件格式或编码不同,或需要更复杂的处理)
如果你的视频文件格式或编码不同,或者你需要对视频进行其他处理(例如调整大小),则需要使用 concat
过滤器,这会重新编码。
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4
-i input1.mp4 -i input2.mp4
:输入多个文件。-filter_complex
:使用复杂过滤器图。[0:v][0:a][1:v][1:a]
:指定输入流 (第一个文件是 0,视频是 v,音频是 a)。concat=n=2:v=1:a=1
:n=2
表示有两个输入文件,v=1
表示输出一个视频流,a=1
表示输出一个音频流。-map "[v]" -map "[a]"
:映射输出的视频和音频流。
6. 添加水印/叠加图像
在视频上叠加一个图片(例如水印)。
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output_watermarked.mp4
-i watermark.png
:第二个输入是你的水印图片。-filter_complex "overlay=10:10"
:使用overlay
过滤器。10:10
是水印左上角的 x 和 y 坐标,表示距离视频左上角 10 像素。
7. 改变视频速度
如果你想让视频播放得更快或更慢,可以使用 setpts
和 atempo
过滤器。
改变视频播放速度 (不改变音高)
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output_faster.mp4
setpts=0.5*PTS
:将视频播放速度加快一倍(0.5 倍持续时间)。对于减慢速度,可以使用大于 1 的值,例如2.0*PTS
会让视频慢两倍。atempo=2.0
:将音频播放速度加快一倍。atempo
的值必须在 0.5 到 2.0 之间。如果你需要更快的速度,可以链式使用多个atempo
过滤器(例如atempo=2.0,atempo=2.0
)。
8. 旋转视频
将视频顺时针旋转 90 度。
ffmpeg -i input.mp4 -vf "transpose=1" output_rotated.mp4
transpose
过滤器参数:0
= 逆时针旋转 90 度并垂直翻转 (默认)1
= 顺时针旋转 90 度2
= 逆时针旋转 90 度3
= 顺时针旋转 90 度并垂直翻转
热门原创推荐
- 无版权,全免费,请收藏这10个免费高清无权素材网站
- 常用照片尺寸对照表,照片大小看这个表就OK了
- 如何使用FTP上传文件(FTP文件传输)
- 在线视频加密播放(加密视频观看)操作教程完整版
- 企业公众号菜单添加视频的完整教程(组图)
视频加密与在线教育文章
- 专业教育机构付费课程视频如何做加密防下载防盗录
- 在线教学课程视频AI智能大纲代码与演示
- 说说付费课程视频加密技术以及防翻录方法有哪些?
- Html5Player加密视频播放器添加ID跑马灯的效果
- 问答播放器(视频弹题)使用例子(代码)
- 视频自动生成字幕原理和自动生成字幕的应用实例
AI工具类文章
- AI应用:mijdourney 如何写prompt
- Midjourney最基础的一些使用设置
- Gemini 前世今生全面的信息介绍
- AI视频成工具D-ID介绍(AI数字人常用工具)
- Midjourney Prompt的使用基本结构介绍
视频加密/防下载/防录屏
FFmpeg视频编码
谷歌浏览器
- Chrome提示由贵单位管理该怎么取消?
- 关闭谷歌更新提示“若要接收后续 google chrome 更新,您需使用 windows 10或更高版本”
- chrome谷歌浏览器书签不同步的解决办法
- Chrome浏览器无痕浏览真的无痕吗?
- 关闭谷歌浏览器输入框记忆功能的方法
ThinkPad电脑
视频直播