概述
如果你希望在压缩视频时,自动缩小视频的分辨率以适应更小的文件大小,可以使用 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 压缩视频后自动缩小分辨率适应视频所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复