FFmpeg音视频处理解决方案

核心组件:

ffmpeg:主要的命令行工具,用于转码、转换格式等

ffprobe:用于分析多媒体文件信息的工具

ffplay:简单的媒体播放器

主要功能:

✅ 格式转换(转码)

✅ 视频裁剪、合并

✅ 调整分辨率、比特率

✅ 提取音频/视频

✅ 截图/生成缩略图

✅ 添加水印、字幕

✅ 流媒体处理

一、安装FFmpeg

Windows:

  1. 访问 https://ffmpeg.org/download.html
  2. 下载Windows版本,解压到指定目录
  3. 将bin目录添加到系统PATH环境变量

Linux (Ubuntu/Debian):

bash 复制代码
sudo apt update
sudo apt install ffmpeg

macOS:

bash 复制代码
brew install ffmpeg

二、项目配置

在application.properties或application.yml中配置FFmpeg路径:

properties 复制代码
# application.properties
ffmpeg.path=/usr/bin/ffmpeg  # Linux/Mac
# 或
ffmpeg.path=C:\\ffmpeg\\bin\\ffmpeg.exe  # Windows

三、依赖注入与异步处理

java 复制代码
@Service
@Slf4j
public class VideoTranscodingService {
    
    @Value("${ffmpeg.path}")
    private String ffmpegPath; // 注入FFmpeg路径
    
    @Async // 异步执行,避免阻塞请求
    public void transcodeVideo(Long materialId, String inputPath) {
        // 转码逻辑
    }
}

核心转码方法

  • ProcessBuilder
  • Process
java 复制代码
private void transcodeToResolution(String inputPath, String outputPath, String resolution) throws Exception {
    List<String> command = new ArrayList<>();
    command.add(ffmpegPath);
    command.add("-i");
    command.add(inputPath);    // 输入文件
    command.add("-s");
    command.add(resolution);   // 目标分辨率
    command.add("-c:v");
    command.add("libx264");    // 视频编码器
    command.add("-crf");
    command.add("23");         // 视频质量
    command.add("-c:a");
    command.add("aac");        // 音频编码器
    command.add("-b:a");
    command.add("128k");       // 音频比特率
    command.add(outputPath);   // 输出文件
    
    ProcessBuilder builder = new ProcessBuilder(command);
    Process process = builder.start();
    int exitCode = process.waitFor(); // 等待转码完成
    
    if (exitCode != 0) {
        throw new RuntimeException("FFmpeg转码失败,退出码: " + exitCode);
    }
}

四、控制器中上传文件视频

java 复制代码
@RestController
@RequestMapping("/api/video")
public class VideoController {
    
    @Autowired
    private VideoTranscodingService transcodingService;
    
    @PostMapping("/upload")
    public ResponseEntity<String> uploadVideo(@RequestParam("file") MultipartFile file, 
                                             @RequestParam Long materialId) {
        try {
            // 1. 保存上传的文件
            String uploadDir = "uploads/";
            String originalFilename = file.getOriginalFilename();
            String filePath = uploadDir + UUID.randomUUID() + "_" + originalFilename;
            
            File dest = new File(filePath);
            file.transferTo(dest);
            
            // 2. 异步启动转码
            transcodingService.transcodeVideo(materialId, filePath);
            
            return ResponseEntity.ok("视频上传成功,转码中...");
            
        } catch (Exception e) {
            return ResponseEntity.status(500).body("上传失败: " + e.getMessage());
        }
    }
}
java 复制代码
@GetMapping("/status/{materialId}")
public ResponseEntity<Map<String, Object>> getTranscodingStatus(@PathVariable Long materialId) {
    CourseMaterial material = materialRepository.findById(materialId).orElse(null);
    
    if (material == null) {
        return ResponseEntity.notFound().build();
    }
    
    Map<String, Object> response = new HashMap<>();
    response.put("status", material.getTranscodingStatus());
    response.put("filePath", material.getFilePath());
    response.put("duration", material.getDuration());
    
    return ResponseEntity.ok(response);
}
相关推荐
SEONIB_Explorer42 分钟前
跨境电商新手零门槛教程:AI 一键生成 TikTok/Ins 投放短视频,5 步 60 秒出片
人工智能·音视频·跨境电商·视频制作·veonib
AI创界者7 小时前
【AI视频生成】ComfyUI + LTX-Video 2.3 整合包:超低显存实现高帧率AI视频渲染与工作流详解
人工智能·aigc·音视频
开开心心就好10 小时前
Word双击预览图片插件弥补Word功能缺失
人工智能·python·智能手机·ocr·电脑·word·音视频
Yeauty12 小时前
你那条 ffmpeg 命令,一键翻成 Rust builder 代码
开发语言·rust·ffmpeg
tedcloud1231 天前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
潜创微科技1 天前
8K HDMI 2.1 多源切换芯片方案,一颗芯片搞定长线不黑屏
音视频
音视频牛哥1 天前
一款优秀的视频直播软件应具备哪些核心功能?结合 SmartMediaKit 谈实时音视频系统的能力边界
音视频·视频直播·低延迟rtsp播放器·gb28181接入·rtsp服务器·低延迟rtmp播放器·鸿蒙next rtsp
AI小码1 天前
把动作「画」给视频世界模型,跨本体双向推演,李飞飞参与
大数据·人工智能·算法·ai·大模型·音视频·编程
嵌入式-老费1 天前
esp32开发与应用(边采样边播放音频)
音视频
中微极客1 天前
Veo视频生成与Gemini Agent平台集成实践
数据库·人工智能·oracle·音视频