一、到ffmpeg官网下载文件包:
Download FFmpeg
下载后找到 bin 下的3个exe文件,复制到自己本机的某个目录下, 如:
二、使用命令行压缩:
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -y output.mp4
这条命令使用 FFmpeg 工具对输入视频文件 input.mp4
进行压缩,并将压缩后的视频保存为 output.mp4
文件。以下是对命令中各个参数的详细解释:
ffmpeg
: FFmpeg 是一个开源的音视频处理工具,可以用于处理、转换和编辑音视频文件。-i input.mp4
: 指定要处理的输入视频文件为input.mp4
。-i
是 FFmpeg 中用于指定输入文件的参数。-c:v libx265
: 指定视频编码器为 libx265,这表示使用 H.265/HEVC 编码器进行视频压缩。-c:v
是用于指定视频编码器的参数。-crf 28
: 指定视频的质量级别,数值越小表示质量越高,压缩率越低。在这里,-crf 28
表示使用 CRF(Constant Rate Factor)为 28 进行压缩,这是一个常用的视频质量控制参数。-y
: 在输出文件存在时自动覆盖。如果不加-y
参数,在输出文件已存在时,FFmpeg 会提示是否覆盖输出文件。output.mp4
: 指定压缩后的视频文件名为output.mp4
。
综合起来,这条命令的作用是将输入视频文件 input.mp4
使用 libx265 编码器进行压缩,质量级别为 28,并将压缩后的视频保存为 output.mp4
文件。执行该命令后,将生成一个经过压缩处理的输出视频文件。
请注意,压缩视频可能会导致视频质量的损失,但可以减小视频文件的大小。您可以根据需要调整 -crf
参数来平衡视频质量和文件大小。
三、使用FFmpeg对文件夹下的所有mp4文件进行批量压缩处理的powershell脚本:
如下ps脚本实现了对2个文件夹中的未压缩过的视频或者大于12MB的视频进行压缩。
视频每压缩一次,会小一点点,我这里的来源只是到2分钟内的视频,所以可以多次压缩。太大的视频就不要这样了,根据实际情况来吧。
function CompressVideosInFolder($folder) {
$ffprobePath = "D:\Program\ffmpeg\ffprobe.exe"
$ffmpegPath = "D:\Program\ffmpeg\ffmpeg.exe"
Get-ChildItem -Path $folder -Filter *.mp4 | ForEach-Object {
$filename = $_.Name
$tempOutputPath = Join-Path $folder "temp_$filename"
$codec = (& $ffprobePath -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1 $_.FullName).Trim()
$fileSize = $_.Length / 1MB # 文件大小转换为MB
Write-Host "Codec of file $filename is: $codec"
Write-Host "File size of $filename is: $fileSize MB"
if ($codec -ne "codec_name=hevc" -or $fileSize -gt 12) {
Write-Host "File $filename needs compression..."
Write-Host "Compressing file $filename..."
& $ffmpegPath -i $_.FullName -c:v libx265 -crf 30 -y $tempOutputPath
Move-Item -Path $tempOutputPath -Destination $_.FullName -Force
} else {
Write-Host "File $filename does not need compression, skipping..."
}
}
}
$folder1 = "E:\uploads\Video"
$folder2 = "E:\uploads\testVideo"
CompressVideosInFolder $folder1
CompressVideosInFolder $folder2