使用ffmpeg对视频指定时间点加入指定音频

本文介绍了如何在工作场景中使用ffmpeg结合语音合成接口,将文本转换为音频并按时间点插入到教学视频中。首先,通过调用阿里语音合成接口生成音频文件。然后,使用ffmpeg进行音视频处理,包括增强音频音量,根据时间点插入音频,以及添加片头、片尾和背景音乐。文章详细讲解了ffmpeg命令和处理步骤。
摘要由CSDN通过智能技术生成

前言

在工作之中,遇到这样的一个场景,在录制教学视频(只有系统声音)时,由于其他原因无法录制音频,后期需要进行视频音频的合成,当时的想法是调用各大厂的语音合成接口进行文字转音频的合成。音频有了,接下来就是把音频以及在视频中的时间点发给视频剪辑的同事,一个一个音频进行加入,最后发现这种重复的工作效率很低,就直接使用ffmpeg进行音视频处理,要求:视频按照指定时间点插入音频,添加片头片尾,添加背景音乐

一、调用接口语音合成生成音频文件

首先通过excel将所有的要合成的文本以及其对应的时间点读取,我的excel文件类似这样的。

在这里插入图片描述使用POI将excel中的数据读取

 public HashMap<String,List<String>> readXls(String path) throws Exception {
   
        InputStream is = new FileInputStream(path);
        // HSSFWorkbook 标识整个excel
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
        HashMap<String,List<String>> result = new HashMap<String, List<String>>();
        int size = hssfWorkbook.getNumberOfSheets();
        // 循环每一页,并处理当前循环页
            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);
        List<String> rowList = new ArrayList<String>();
        List<String> rowList2 = new ArrayList<String>();
        List<String> rowList3 = new ArrayList<String>();
            // 处理当前页,循环读取每一行
            for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
   
                // HSSFRow表示行
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                int minColIx = hssfRow.getFirstCellNum();
                int maxColIx = hssfRow.getLastCellNum();

                // 遍历改行,获取处理每个cell元素
                HSSFCell cell = hssfRow.getCell(0);
                if (cell != null) {
   
                    rowList.add(getStringVal(cell));
                }

                HSSFCell cell2 = hssfRow.getCell(1);
                if (cell2 != null) {
   
                    rowList2.add(getStringVal(cell2));
                }

                HSSFCell cell3 = hssfRow.getCell(2);
                if (cell3 != null) {
   
                    rowList3.add(getStringVal(cell3));
                }

            }
        result.put("time",rowList);
        result.put("text",rowList2);
        result.put("name",rowList3);
        return result;
    }

在读取数据后,使用阿里语音合成接口将这些文本,转换为音频文件,并且以时间点命名;

/**
     * 通过阿里巴巴语音合成进行单线程语音合成
     * @param list_time
     * @param list_text
     * @param list_name
     * @throws InterruptedException
     */
    public static void buildWavByAlibaba(List<String> list_time,List<String> list_text,List<String> list_name,String title) throws InterruptedException {
   
        String appKey = "";		//在阿里巴巴控制台中输入自己的appKey
        String id = "";			//自己的id
        String secret = "";		//自己的秘钥
        String url = ""; // 默认即可,默认值:wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1
        AlibabaTts alibabaTts = new AlibabaTts(appKey, id, secret, url);
        for(int i=0;i<list_time.size();i++){
   
            alibabaTts.process(list_name.get(i).toString(),list_time.get(i).toString(),list_text.get(i).toString());
            Thread.sleep(1000);
        }
        alibabaTts.process(list_name.get(
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Ffmpeg是一款开源的视频处理软件,可以通过Filter进行视频处理。Filter可以对视频进行裁剪、缩放、色彩调整、添加水印等各种处理。下面是使用Filter的一些示例命令: 1. 裁剪视频: ``` ffmpeg -i input.mp4 -vf "crop=720:480:20:20" output.mp4 ``` 该命令将输入视频裁剪为720x480的大小,左边和上边各留出20像素的边距。 2. 缩放视频: ``` ffmpeg -i input.mp4 -vf "scale=320:240" output.mp4 ``` 该命令将输入视频缩放为320x240的大小。 3. 调整视频色彩: ``` ffmpeg -i input.mp4 -vf "eq=brightness=0.2:saturation=1.5" output.mp4 ``` 该命令将输入视频亮度降低20%,饱和度增加50%。 4. 添加水印: ``` ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4 ``` 该命令将输入视频和水印图片叠加在一起,水印位置为视频左上角偏移10像素。 以上仅是Filter的一些示例,Ffmpeg支持更多的Filter,可根据需要自行查阅文档使用。 ### 回答2: FFmpeg是一款开源的多媒体处理工具,可以实现视频音频的录制、转码、编辑等功能。在使用FFmpeg进行视频处理时,Filter是一项重要的功能,可以用来对视频进行各种处理和效果的添加FFmpeg的Filter是通过-vf(video filter)参数来实现的。在命令行中加入-vf参数后,可以添加各种不同的Filter,以达到不同的视频效果。例如,可以使用Filter来实现对视频的裁剪、旋转、缩放等操作。 具体使用Filter的语法如下: -vf "filter_name=parameter1:value1,parameter2:value2,..." 其中,filter_name表示要使用的Filter名称,parameter表示该Filter的具体参数,value表示参数的值。不同的Filter会有不同的参数,需要根据具体需求进行设置。 例如,要对视频进行旋转的话,可以使用rotate Filter。具体使用方法如下: -vf "rotate=angle=30" 通过以上命令,即可将视频旋转30度。同样的方式,对于其他Filter,只需要将filter_name和parameter替换为对应的值即可。 另外,在Filter中还可以使用Filter链,即将多个Filter串联使用,实现复杂的效果。通过在-vf参数中添加多个Filter,并使用逗号分隔,可以将多个Filter依次执行。 总之,FFmpeg中的Filter功能强大且灵活,可以实现对视频进行各种处理和效果的添加。通过适当的命令行参数设置,可以轻松实现对视频进行裁剪、旋转、缩放等操作,丰富视频的视觉效果。 ### 回答3: FFmpeg 是一款功能强大的多媒体处理工具,可以用于音视频文件的转换、剪辑、处理等。Filter 是 FFmpeg 的一个重要功能,可以用来对音视频进行各种滤镜处理。 使用 FFmpeg 进行滤镜处理一般需要以下几个步骤: 1. 首先,需要了解 FFmpeg 支持的滤镜和其参数。可以通过命令 `ffmpeg -filters` 查看所有可用滤镜列表,以及命令 `ffmpeg -h filter=<滤镜名称>` 查看特定滤镜的详细参数信息。 2. 选择合适的滤镜后,需要通过命令行指定输入文件和输出文件,以及滤镜参数。下面是一个使用 FFmpeg 添加文本水印的命令示例: ``` ffmpeg -i input.mp4 -vf "drawtext=text='Hello World':fontfile=Arial.ttf:fontsize=24:fontcolor=white:x=10:y=10" output.mp4 ``` 这个命令会将输入文件 `input.mp4` 进行滤镜处理,添加一个文本水印,输出为 `output.mp4`。其中,`drawtext` 是指定滤镜为文本水印,后面的参数是具体的水印文字内容、字体文件、字体大小、字体颜色以及位置等信息。 3. 根据需要,可以添加多个滤镜和参数。可以通过 `;` 或者 `,` 分隔多个滤镜。例如: ``` ffmpeg -i input.mp4 -vf "scale=640:480,rotate=30*PI/180" output.mp4 ``` 这个命令会先将输入文件 `input.mp4` 进行尺寸缩放,然后再旋转一定角度后输出为 `output.mp4`。 4. 最后,运行命令进行滤镜处理。运行命令后,FFmpeg 会按照指定参数进行滤镜处理,并生成输出文件。 需要注意的是,在使用 FFmpeg 进行滤镜处理时,可以根据实际需求选择不同的滤镜和参数,也可以自定义滤镜,以实现特定的效果。同时,滤镜的顺序也可能会影响最终的效果,所以需要根据具体情况进行调整。 总之,FFmpeg 的滤镜功能强大且灵活,可以应用于音视频的各种处理场景,帮助我们实现更多的创意和效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值