Windows使用ffmpeg对视频进行倍速、裁剪等操作

目录

下载FFmpeg

视频倍速

操作流程

代码解释

画面裁剪

指定裁剪区域

裁剪时长

报错

没有权限

使用管理员权限运行PowerShell

在其他目录中创建输出文件

修改目录权限

总结


要使用PowerShell将MP4视频加速,可以使用FFmpeg工具。以下是在Windows上使用PowerShell和FFmpeg的步骤:

下载FFmpeg

在Windows上使用PowerShell之前,需要先下载FFmpeg。可以从官方网站 https://ffmpeg.org/download.html 下载适合你的操作系统的版本。

我用的下载地址:

https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-essentials.7z

下载之后解压到文件夹。

视频倍速

操作流程

打开PowerShell

在Windows上,可以按下Win + X,然后选择“Windows PowerShell”打开PowerShell。

进入FFmpeg目录

在PowerShell中,使用cd命令进入FFmpeg的bin目录。例如,如果FFmpeg安装在C:\ffmpeg,则可以使用以下命令进入bin目录:

cd C:\ffmpeg\bin

使用以下命令将视频加速两倍:

./ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2[a]" -map "[v]" -map "[a]" -r 30 output.mp4

代码解释

这个命令中的参数含义如下:

- `-i input.mp4`:指定输入文件为input.mp4。

- `-filter_complex`:指定复杂的视频过滤器。

- `[0:v]setpts=0.5*PTS[v]`:将视频流加速两倍,但保持每秒30帧。`[0:v]`表示输入文件的视频流,`setpts=0.5*PTS`表示将视频流的PTS(Presentation Time Stamp)减半,`[v]`表示输出视频流。

- `[0:a]atempo=2[a]`:将音频流加速两倍。`[0:a]`表示输入文件的音频流,`atempo=2`表示将音频流的速度加倍,`[a]`表示输出音频流。

- `-map "[v]" -map "[a]"`:指定输出文件中包含视频流和音频流。

- `-r 30`:指定输出文件的帧率为30帧/秒。

- `output.mp4`:指定输出文件名为output.mp4。

运行命令后,FFmpeg将会将输入文件input.mp4加速两倍,并将输出文件保存为output.mp4。

画面裁剪

操作流程:

比如,把1280帧宽度裁剪为640

在....\ffmpeg\bin目录下打开powershell,执行:

./ffmpeg -i input.mp4 -filter_complex "[0:v]crop=640:trunc(ih/2)*2[v]" -map "[v]" -map 0:a -r 30 output.mp4

代码解释:

这个命令中的参数含义如下:

- `-i input.mp4`:指定输入文件为input.mp4。
- `-filter_complex`:指定复杂的视频过滤器。
- `[0:v]crop=640:trunc(ih/2)*2[v]`:将视频流裁剪为640像素宽度。`[0:v]`表示输入文件的视频流,`crop=640:trunc(ih/2)*2`表示将视频流裁剪为640像素宽度,高度保持原始比例。`trunc(ih/2)*2`表示将高度调整为偶数,这是因为某些视频编解码器要求高度为偶数。`[v]`表示输出视频流。
- `-map "[v]" -map 0:a`:指定输出文件中包含视频流和输入文件的音频流。
- `-r 30`:指定输出文件的帧率为30帧/秒。
- `output.mp4`:指定输出文件名为output.mp4。

运行命令后,FFmpeg将会将输入文件input.mp4裁剪为640像素宽度,并将输出文件保存为output.mp4。请注意,裁剪后的视频可能会失去一些画面内容。

指定裁剪区域

操作流程:

要使用PowerShell和FFmpeg将视频裁剪为指定的矩形区域,比如,把1280*720的视频中一定矩形区域裁剪出来。

在....\ffmpeg\bin目录下打开powershell,执行:

./ffmpeg -i input.mp4 -filter_complex "[0:v]crop=640:360:320:180[v]" -map "[v]" -map 0:a -r 30 output.mp4

这个命令中的参数含义如下:

- `-i input.mp4`:指定输入文件为input.mp4。
- `-filter_complex`:指定复杂的视频过滤器。
- `[0:v]crop=640:360:320:180[v]`:将视频流裁剪为指定的矩形区域。`[0:v]`表示输入文件的视频流,`crop=640:360:320:180`表示将视频流裁剪为宽度为640像素,高度为360像素,起始点坐标为(320, 180)的矩形区域。`[v]`表示输出视频流。
- `-map "[v]" -map 0:a`:指定输出文件中包含视频流和输入文件的音频流。
- `-r 30`:指定输出文件的帧率为30帧/秒。
- `output.mp4`:指定输出文件名为output.mp4。

运行命令后,FFmpeg将会将输入文件input.mp4裁剪为指定的矩形区域,并将输出文件保存为output.mp4。请注意,在指定裁剪区域时,应该保持视频的长宽比,以避免画面变形。

裁剪时长

裁剪长视频中间指定的时间段。

比如,使用PowerShell和FFmpeg将20秒的视频裁剪为第3到13秒的部分,在....\ffmpeg\bin目录下打开powershell,执行:

./ffmpeg -i input.mp4 -ss 00:00:03 -t 00:00:10 -c copy output.mp4

这个命令中的参数含义如下:

- `-i input.mp4`:指定输入文件为input.mp4。
- `-ss 00:00:03`:指定从第3秒开始裁剪。起始秒
- `-t 00:00:10`:指定裁剪10秒钟的视频。时长
- `-c copy`:指定使用“copy”编解码器,以快速复制视频和音频流,而不进行重新编码。
- `output.mp4`:指定输出文件名为output.mp4。

运行命令后,FFmpeg将会将输入文件input.mp4的第3到13秒裁剪出来,并将输出文件保存为output.mp4。请注意,在裁剪视频时,应该保持视频的长宽比,以避免画面变形。

如果要将视频裁剪为其他时间段,可以将命令中的“-ss”和“-t”参数更改为其他值。例如,要将视频裁剪为第5到15秒的部分,可以使用以下命令:./ffmpeg -i input.mp4 -ss 00:00:05 -t 00:00:10 -c copy output.mp4,这个命令与前面的命令类似,只是将“-ss”参数设置为第5秒,将“-t”参数设置为10秒。

请注意,在裁剪视频时,应该确保裁剪的时间段不超出视频的总时长。

报错

没有权限

提示报错

[out#0/mp4 @ 00000284f9411ac0] Error opening output ./output.mp4: Permission denied

这个错误提示表明FFmpeg没有足够的权限来在当前目录中创建输出文件。为了解决这个问题,可以尝试以下几个方法:

使用管理员权限运行PowerShell

在Windows上,可以右键单击PowerShell图标,然后选择“以管理员身份运行”来以管理员权限运行PowerShell。这样做可能会解决权限不足的问题。

在其他目录中创建输出文件

如果当前目录没有足够的权限来创建输出文件,可以尝试在其他目录中创建输出文件。例如,可以使用以下命令将输出文件保存在C:\temp目录中:

./ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2[a]"-map "[v]" -map "[a]" -r 30 C:\temp\output.mp4

修改目录权限

如果以上方法都无法解决问题,可以尝试修改当前目录的权限。可以右键单击当前目录,选择“属性”,然后在“安全”选项卡中添加当前用户的写入权限。这样做可能会解决权限不足的问题。

请注意,在修改目录权限时要小心,以免意外删除或修改其他文件。

总结

下载ffmpeg,解压缩;

在....\ffmpeg\bin目录下打开powershell,执行指令。

输出文件地址另选地址保存。

猜你喜欢

转载自blog.csdn.net/weixin_56337147/article/details/130873372