当前位置: 首页 > article >正文

FFmpeg - 音视频文件编码

FFmpeg - 音视频文件编码(Window下浅用)

下载地址:https://www.gyan.dev/ffmpeg/builds/

安装配置

1. 下载需要版本到本地;(example:ffmpeg-yyyy-MM-dd-git-full_build.7z)
2. 解压到合你心意路径;(重命名一下外部文件夹为:ffmpeg)
3. 注册到环境变量;(此电脑->属性->高级系统设置->环境变量->系统变量->path 新建:xxx\ffmpeg\bin)
4. Win + R-> cmd,输入 ffmpeg -version 检验是否成功;

在这里插入图片描述
在这里插入图片描述

DEMO1: 合并 音频、视频文件,输出为视频;(Bilibili 下载)

1. 创建工作区
1. 新建一个文件夹(FFmpeg);
2. 进入新建的文件夹内,新建文件 merge.bat;(内容如下)
@echo off
@chcp 936

@rem v.m4s: 视频文件; a.m4s: 音频文件;out.mp4: 输出文件;
ffmpeg.exe -i v.m4s -i a.m4s -codec copy -y out.mp4
2. 搬运、处理文件
1. 将下载的 .m4s 文件复制到该目录下:
	视频文件重命名为: v.m4s;
	音频文件重命名为: a.m4s;
2. 删除两个文件内的额外内容:(文件头,不删除合并会报错)
	"000000000";	
	小文件直接用记事本打开处理;
	大文件使用"virgoT.exe"工具处理;(这个放不下)
3. 合并文件
1. 点击运行 merge.bat 文件:
	成功后输出为 "out.mp4" 文件,大小应为上面两个文件大小之和;
	删除 v.m4s、a.m4s,移动或重命名 out.mp4;

在这里插入图片描述

DEMO2: 拆分;(.mp4 -> .m3u8)

#方法一:Win+R -> cmd (灵活性差)
ps:
D:\Media\test.mp4 			: 目标文件路径;
D:\Media\test				: 目标文件同名文件夹(新建)
D:\Media\test\index.m3u8 	: index.m3u8文件
D:\Media\test\video%05d.ts	:拆分生成的 ts 文件
-segment_time 10			: 每段时长

ffmpeg -i D:\Media\test.mp4 -c:v copy -c:a copy -f ssegment -segment_format mpegts -segment_list D:\Media\test\index.m3u8 -segment_time 10 D:\Media\test\video%05d.ts

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

//方法二:java程序 (一劳永逸)

 /***
     * 使用ffmpeg 将mp4 文件 拆分为 ts 文件组
     * 文件名不能有空格
     * @param path 文件路径
     * @return 输出 .m3u8
     */
    public static String cutDownByFFMPEG(String path) {
        File file = new File(path);
        if (!file.exists()) {
            return "文件不存在!";
        }

        File dir = new File(file.getParent(), file.getName().substring(0, file.getName().lastIndexOf(".")));
        if (!dir.exists()) {
            dir.mkdir();
        }
        String m3u8 = dir.getPath() + File.separator + "index.m3u8";
        String com = "ffmpeg -i " + path + " -c:v copy -c:a copy -f ssegment -segment_format mpegts -segment_list " + m3u8 + " -segment_time 10 " + dir.getPath() + "\\video%05d.ts";
        //通过命令行使用 ffmpeg 进行拆分
        System.out.println(com);
        try {
            Runtime rn = Runtime.getRuntime();
            rn.exec(com);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return m3u8;
    }

http://www.kler.cn/a/386127.html

相关文章:

  • ubuntu下openssl签名证书制作流程及验证demo
  • C语言编程练习:验证哥德巴赫猜想 进制转换 rand函数
  • Python期末复习 | 列表、元组、字典、集合与字符串 | 代码演示
  • 【服务器】本地安装X11 服务器-Windows
  • 容器技术在持续集成与持续交付中的应用
  • RabbitMQ轻松构建高效可靠的消息队列系统
  • lua入门教程:ipairs
  • DevExpress JS ASP.NET Core v24.1亮点 - 支持DateOnly/TimeOnly类型
  • linux强制修改mysql的root账号密码
  • Elasticsearch的数据类型
  • Zookeeper运维秘籍:四字命令基础、详解及业务应用全解析
  • 机器学习—sigmoid的替代品
  • 开发中使用UML的流程_01概述
  • Go:接口和反射
  • 机器学习-倒数5个项目(05)
  • 文件上传和下载
  • 带宽与下载速度的对应关系
  • c#使用COM接口设置excel单元格宽高匹配图片,如何计算?
  • 关于stm32中IO映射的一些问题
  • 想买开放式耳机如何挑选?5款高人气开放式耳机分享
  • OSPF动态路由配置实验:实现高效网络自动化
  • FreeSWITCH Ubuntu 18.04 源码编译
  • (Go语言)初上手Go?本篇文章帮拿捏Go的数据类型!
  • FineBI漏斗图分析转化率计算,需要获取当前节点和上一节点的转化率,需要获取错行值实现方案
  • 将一个二维矩阵,螺旋遍历展开为一维列表
  • YOLOv6-4.0部分代码阅读笔记-inferer.py