从视频中提取音频

首先,需要在网上下载一个方法ffmpeg.exe工具来处理视频、音频的转换。

 

 

1、Flash格式像其他格式进行转换

(1)、转换成wmv/asf格式

ffmpeg -i (要转换的flv文件完整路径) -f asf -vcodec (wmv1或wmv2) [-b 视频码率] -acodec mp3

[-ab 音频码率] (输出的asf/wmv文件完整路径)

(2)、转换成mpeg格式

ffmpeg -i (要转换的flv文件完整路径) -f mpeg -vcodec mpeg1video [-b 视频码率] -acodec mp2

[-ab 音频码率] (输出的mpg文件完整路径)

(3)、转换成avi格式

ffmpeg -i (要转换的flv文件完整路径) -f avi -vcodec (msmpeg4或msmpeg4v1或msmpeg4v2) [-b 视频码

率] -acodec mp3 [-ab 音频码率] (输出的avi文件完整路径

2、ffmpeg的七个技巧

(1)、音频转换

ffmpeg -i my_audio.wav my_audio.mp3-i 后为要转换的音频文件,my_audio.mp3为目的音频文件
(2)、视频转换
ffmpeg -i my_video.mpeg -s 500×500 my_video.flv-i 后为源视频文件, -s 表示设置目标视频文件的

分辨率 my_video.flv为目的视频文件
(3)、从视频中截取图片
ffmpeg -i test.mpg image%d.jpg默认1s截取25张图片,可以通过-r设置每秒截取的图片数量-r fps 设置

帧率,也就是每秒截取图片的数量(默认25)
ffmpeg -i test.mpg -r 1 image%d.jpg这样子每1s截取1张图片还可以设置截取间隔,起止-ss 设定时间

位置,语法:hh:mm:ss[.xxx]-t 时长:限制转码/捕获视频的时间,语法:hh:mm:ss[.xxx]
ffmpeg -i test.mpg -r 25 -ss 00:00:10 -t 00:00:05 images%05d.png在第10秒开始,以每秒截取

25张

图片的速度,截取5秒时长的图片
(4)、从视频中采集音频
ffmpeg -i video.avi -f mp3 audio.mp3-f 强制选择格式
ffmpeg -i video.avi -vn audio.mp3-vn 取消截取视频(也就是只输出音频文件)
(5)、创建截屏视频
ffmpeg -f x11grab -r 25 -s wxga -i :0.0 /tmp/outputFile.mpg0.0 是你X11 server的屏幕

显示号码,和DISPLAY一样样的.
此条命令以每秒25帧的速率来截取wxga屏幕视频,当然这里可以用-s 来设置视频分辨率,输出文件

是/tmp/outputFile.mpg。

(6)、用图片制作视频
ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg
将`img001.jpg’, `img002.jpg'这种顺序排列的图片文件转制作为视频
(7)从webcam中截取视频
ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 out.mpg
同时截取音频和视频:
ffmpeg -f oss -i /dev/dsp -f video4linux2 -s 320x240 -i /dev/video0 out.mpg/dev/video0为

视频设备 /dev/dsp为音频设备

[D:\software\MediaCoder\codecs\ffmpeg.exe, -i, d:\test\a.mp4, -ab, 64, -ac, 2, -ar, 22050, 

-b, 230, -r, 29.97, -y, d:\test\b.flv]

 

package pkg;  
  
import java.io.File;  
import java.util.ArrayList;  
import java.util.List;  
  
public class VideoToVoice {  
    public static List<String> L=new ArrayList<String>();  
    //获取一个文件夹路径dir下所有的子目录地址(子目录不是文件夹形式)  
    public static void listDirectory(File dir) {  
        if (!dir.exists()) {  
            throw new IllegalArgumentException("目录" + dir + "不存在");  
        }  
        if (!dir.isDirectory()) {  
            throw new IllegalArgumentException(dir + "不是目录");  
        }  
  
        File[] files = dir.listFiles();// 返回的是直接子目录的抽象  
        if (files != null && files.length > 0) {  
            for (File file1 : files) {  
                if (file1.isDirectory()) {  
                    listDirectory(file1);  
                } else {  
                    L.add(file1.toString());  
                }  
            }  
        }  
    }  
  
    private static boolean processMP3(String path) {  
        String voiceName = path.substring(path.lastIndexOf("\\") + 1,  
                path.lastIndexOf("\\") + 3);  
        System.out.println(voiceName);  
        switch (voiceName) {  
        case "愤怒":  
            ffmpeg_process(voiceName, path);  
            break;  
        case "伤心":  
            ffmpeg_process(voiceName, path);  
            break;  
        case "惊讶":  
            ffmpeg_process(voiceName, path);  
            break;  
        case "快乐":  
            ffmpeg_process(voiceName, path);  
            break;  
        case "恐惧":  
            ffmpeg_process(voiceName, path);  
            break;  
        case "厌恶":  
            ffmpeg_process(voiceName, path);  
            break;  
        case "自然":  
            ffmpeg_process(voiceName, path);  
            break;  
        default:  
            break;  
        }  
  
        return true;  
    }  
  
    public static boolean ffmpeg_process(String Name, String path) {  
        String voiceNameNum = path.substring(path.lastIndexOf("\\") + 1,  
                path.indexOf("."));  
        String voiceName = path.substring(path.lastIndexOf("\\") + 1,  
                path.lastIndexOf("\\") +3);  
        String number = voiceNameNum.replaceAll(voiceName, "");  
        System.out.println(number);  
        int num = Integer.parseInt(number);  
        System.out.println(num);  
        List<String> commend = new java.util.ArrayList<String>();  
        commend.add("ffmpeg.exe");  
        commend.add("-i");  
        commend.add(path);  
        commend.add("-vn");  
        commend.add("D:\\迅雷下载\\多模态资源\\视频中截取的音频" +"\\"+ Name + "\\" + Name + num  
                + ".mp3");  
        System.out.println(commend);  
        try {  
            ProcessBuilder builder = new ProcessBuilder();  
            builder.command(commend);  
            builder.start();  
            return true;  
        } catch (Exception e) {  
            e.printStackTrace();  
            return false;  
        }  
    }  
  
    public static void main(String[] args) {  
        listDirectory(new File("D:\\迅雷下载\\多模态资源\\人脸表情"));  
        System.out.println(L.size());  
        for (int i = 0; i < L.size(); i++) {  
            System.out.println(L.get(i));  
            processMP3(L.get(i));  
        }  
//      processMP3("D:\\迅雷下载\\多模态资源\\人脸表情\\伤心\\伤心10.avi");  
    }  
}  


 

 

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值