目录
要使用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,执行指令。
输出文件地址另选地址保存。