我是靠谱客的博主 岁月静好,最近开发中收集的这篇文章主要介绍golang使用FFmpeg 压缩视频后自动缩小分辨率适应视频,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如果你希望在压缩视频时,自动缩小视频的分辨率以适应更小的文件大小,可以使用 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 压缩视频后自动缩小分辨率适应视频所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部