FFmpeg在JAVA中的使用-音频提取&字幕压缩
2017-10-12 14:57
701 查看
由于项目需求中涉及到视频中音频提取,以及字幕压缩的功能,一直在研究ffmpeg,仅仅两个功能,却深受ffmpeg的折磨。
今天谈谈ffmpeg在java中的简单使用,首先下载FFmpeg包,官方地址:http://ffmpeg.org/download.html,这里建议下载Linux Static Builds版本的,轻小而且解压后可以直接使用,我使用的版本是ffmpeg-git-20170922-64bit-static.tar.xz。
解压之后,文件夹中有一个可执行文件ffmpeg,在linux上可以直接运行./ffmpeg -version,可以查看ffmpeg的版本信息,以及configuration配置信息。
现在,可以使用ffmpeg的相关命令来进行一些操作:
1.视频中音频提取:ffmpeg -i [videofile] -vn -acodec copy [audiofile]
2.字幕压缩至视频中:ffmpeg -i [videofile] -vf subtitles=[subtitle.srt] [targetvideofile]
3.其它相关命令可以查阅:http://ffmpeg.org/ffmpeg.html
说明:
videofile是需要提取音频的视频源文件,可以是本地文件,也可以是网络文件url。
subtitle.srt是字幕文件(中文字幕即把英文变为中文,其它格式一致),这边就使用最简单的srt标准格式,如下所示:
特别注意:srt文件写入的字符编码需要是UTF-8,否则压缩的时候会报无法读取srt文件;
若想压缩中文字幕,需要系统中有中文字体,使用fc-list查询系统支持的字体,fc-list :lang=zh查询支持的中文字体
相关java代码如下:
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff }
今天谈谈ffmpeg在java中的简单使用,首先下载FFmpeg包,官方地址:http://ffmpeg.org/download.html,这里建议下载Linux Static Builds版本的,轻小而且解压后可以直接使用,我使用的版本是ffmpeg-git-20170922-64bit-static.tar.xz。
解压之后,文件夹中有一个可执行文件ffmpeg,在linux上可以直接运行./ffmpeg -version,可以查看ffmpeg的版本信息,以及configuration配置信息。
现在,可以使用ffmpeg的相关命令来进行一些操作:
1.视频中音频提取:ffmpeg -i [videofile] -vn -acodec copy [audiofile]
2.字幕压缩至视频中:ffmpeg -i [videofile] -vf subtitles=[subtitle.srt] [targetvideofile]
3.其它相关命令可以查阅:http://ffmpeg.org/ffmpeg.html
说明:
videofile是需要提取音频的视频源文件,可以是本地文件,也可以是网络文件url。
subtitle.srt是字幕文件(中文字幕即把英文变为中文,其它格式一致),这边就使用最简单的srt标准格式,如下所示:
特别注意:srt文件写入的字符编码需要是UTF-8,否则压缩的时候会报无法读取srt文件;
若想压缩中文字幕,需要系统中有中文字体,使用fc-list查询系统支持的字体,fc-list :lang=zh查询支持的中文字体
相关java代码如下:
public class FFMpegUtil { private static final Logger logger = Logger.getLogger(FFMpegUtil.class); // ffmpeg命令所在路径 private static final String FFMPEG_PATH = "/ffmpeg/ffmpeg"; // ffmpeg处理后的临时文件 private static final String TMP_PATH = "/tmp"; // home路径 private static final String HOME_PATH; static { HOME_PATH = System.getProperty("user.home"); logger.info("static home path : " + HOME_PATH); } /** * 视频转音频 * @param videoUrl */ public static String videoToAudio(String videoUrl){ String aacFile = ""; try { aacFile = TMP_PATH + "/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + UUID.randomUUID().toString().replaceAll("-", "") + ".aac"; String command = HOME_PATH + FFMPEG_PATH + " -i "+ videoUrl + " -vn -acodec copy "+ aacFile; logger.info("video to audio command : " + command); Process process = Runtime.getRuntime().exec(command); process.waitFor(); } catch (Exception e) { logger.error("视频转音频失败,视频地址:"+videoUrl, e); } return ""; } /** * 将字幕烧录至视频中 * @param videoUrl */ public static String burnSubtitlesIntoVideo(String videoUrl, File subtitleFile){ String burnedFile = ""; File tmpFile = null; try { burnedFile = TMP_PATH + "/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + UUID.randomUUID().toString().replaceAll("-", "") + ".mp4"; String command = HOME_PATH + FFMPEG_PATH + " -i "+ videoUrl + " -vf subtitles="+ subtitleFile +" "+ burnedFile; logger.info("burn subtitle into video command : " + command); Process process = Runtime.getRuntime().exec(command); process.waitFor(); } catch (Exception e) { logger.error("视频压缩字幕失败,视频地址:"+videoUrl+",字幕地址:"+subtitleUrl, e); } return ""; } }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff }
相关文章推荐
- FFmpeg进行视频帧提取&音频重采样-Process.waitFor()引发的阻塞超时
- java 使用正则Pattern等实现【搜索 -> 提取 -> 分割 -> 替换】功能
- ffmpeg 提取 视频,音频,字幕 方法
- 在windows系统上使用java代码在ffmpeg环境对音频进行转换wav,pcm,ogg
- 音频压缩工具——Speex的使用(Android&iOS语音录音技术预演)
- Java 压缩类库的使用(转)
- java 使用正则Pattern等实现【搜索 -> 提取 -> 分割 -> 替换】功能
- 音频压缩工具——Speex的使用(Android&iOS语音录音技术预演)
- 使用ffmpeg提取视频中的音频和视频画面
- ffmpeg提取音频&拼接音频
- 使用java自带的zip api压缩解压缩文本
- 使用CODECs压缩Wave音频
- Java Q&A: 使用Observer模式
- Java Q&A: 使用Factory Method模式
- 使用java.util.zip实现zip压缩和解压
- ffmpeg提取音频、转换为mp3
- ffmpeg&mencoder使用说明
- Java Q&A: 使用Observer模式
- Java 程序破解初步 -> 使用帮助类(注入)技术
- java2D使用(2)-->使用Servlet生成JPEG图像