如果你希望在压缩视频时,自动缩小视频的分辨率以适应更小的文件大小,可以使用 FFmpeg 的 scale 滤镜,并根据目标分辨率或缩放比例来调整视频的尺寸。以下是几种常用的方法:
1. 按比例缩放
你可以根据一个固定的比例缩放视频的分辨率。例如,缩放至原始分辨率的 50%:
-vf "scale=iw*0.5:ih*0.5"
这会将视频的宽度和高度分别缩小到原始的一半。
2. 按目标宽度缩放
如果你希望视频的宽度缩放到一个特定的值,而高度保持相同的纵横比,可以使用以下命令:
-vf "scale=1280:-1"
在这个例子中,视频的宽度被调整为 1280 像素,高度将自动调整以保持原始的纵横比。
3. 按目标高度缩放
类似地,如果你想要指定高度,而宽度根据原始比例进行调整,可以使用:
-vf "scale=-1:720"
这里,视频的高度被调整为 720 像素,而宽度将根据原始的纵横比自动调整。
4. 设置最大宽高限制
你可以指定一个最大宽度和最大高度,FFmpeg 将自动选择一个合适的分辨率,以保持视频的纵横比:
-vf "scale='min(1280,iw)':'min(720,ih)'"
在这个例子中,FFmpeg 会将视频的宽度限制在不超过 1280 像素,高度不超过 720 像素。
5. 实际代码实现
假设你希望在压缩视频时,将视频宽度缩放到 1280 像素,同时保持原始的纵横比,可以使用以下 Go 代码示例:
package main
import (
"fmt"
"os/exec"
)
func main() {
inputFile := "input.mp4"
outputFile := "output.mp4"
watermarkFile := "watermark.png"
compressionRate := "23" // 压缩率,越小越高质量,通常范围是 18-28
targetWidth := 1280 // 目标宽度
// 构造 FFmpeg 命令
cmd := exec.Command("ffmpeg",
"-i", inputFile, // 输入文件
"-i", watermarkFile, // 水印文件
"-filter_complex", "overlay=10:10", // 水印位置 (10:10 表示左上角 10px)
"-c:v", "libx264", // 使用 H.264 编码
"-crf", compressionRate, // 设置压缩率
"-preset", "slow", // 设置压缩速度,slow 提供更好的压缩质量
"-vf", fmt.Sprintf("scale=%d:-1", targetWidth), // 自动调整分辨率,保持宽度为1280像素
"-c:a", "copy", // 保持音频不变
outputFile, // 输出文件
)
// 运行命令并捕获输出
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("Error: %s\n", err)
fmt.Printf("Output: %s\n", string(output))
return
}
fmt.Println("Video compression and resizing completed successfully!")
}6. 结论
通过这种方式,你可以在压缩视频时,自动调整分辨率以适应目标文件大小或其他需求。scale 滤镜是非常灵活的,可以根据你的实际需求设置合适的分辨率和缩放比例。你可以根据项目的不同需求,在压缩视频的同时调整分辨率,优化用户体验和文件大小。
最后
以上就是岁月静好最近收集整理的关于golang使用FFmpeg 压缩视频后自动缩小分辨率适应视频的全部内容,更多相关golang使用FFmpeg内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复