java 使用 mencoder 视频处理
mencoder 是一款命令行方式的视频处理软件,是Mplayer自带的编码工具(Mplayer是Linux下的播放器,开源,支持几乎所有视频格式的播放,有windows和Mac版本)。
一 : Mplayer的安装
音频编码器名称 | 描述 |
---|---|
mp3lame | 通过LAME编码为VBR,ABR或CBR格式的MP3文件 |
lavc | 利用libavcodec中的一个编码器 |
faac | FAAC AAC音频编码器 |
toolame | MPEG音频Layer 2编码器 |
twolame | 基于tooLAME的MPEG音频Layer 2编码器 |
pcm | 未压缩的PCM音频 |
copy | 不要重新编码,这是复制已压缩的各桢 |
视频编码器名称 | 描述 |
---|---|
lavc | 使用libavcodec中的一个是频编码器 |
xvid | Xvid, MPEG-4高级简单格式(ASP)编码器 |
x264 | x264, MPEG-4高级视频编码(AVC), AKA H.264编码器 |
nuv | nuppel视频,为一些实时程序所用 |
raw | 未压缩的视频桢 |
copy | 不要重新编码,只是复制已压缩的各桢 |
frameno | 用于三通道编码(不推荐) |
-x264encopts bitrate=440 设置x264的相关参数,设置码率440
-vf scale=648:460 设置视频宽度和高度 648是宽度, 460是高度, 这也可以压缩视频, 如果不想压缩, 可以不加这一段.
补充: 以上参数为常规参数,资料有限无法全部收集起来,需自行百度,末尾会补充一些关于mencoder其他博主的博客,供大家参考
2. 图片合并成视频
命令格式: mencoder mf://*.jpg -mf fps=1:type=jpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -audiofile aduio.mp3 -mc 0 -o file.avi
mencoder mf://*.JPG -mf fps=1:type=JPG -ovc x264 -x264encopts bitrate=440 -vf scale=640:480 -oac mp3lame -audiofile aduio.mp3 -mc 0 -o jpgR.mp4
mencoder mf://*.JPG -mf fps=1:type=JPG -ovc x264 -x264encopts bitrate=440 -vf scale=640:480 -o jpgR.mp4
说明:
mf://*.jpg 是指当前目录下要合并的图片后缀名
-mf 内置参数
fps=1 是帧数,
type=jpg 要合并的图片的后缀名
-ovc 指定视频编码器
lavc 使用libavcodec中的一个视频编码器
-lavcopts 内置参数
vcodec=mpeg4 指定视频编码器
-oac 指定音频编码器
copy 复制原音频编码器和音频流
-o 输出文件
-ovc x264 指定视频编码器为x264,即mp4编码
-x264encopts 设置x264的参数。
bitrate=440 设置x264的视频的码率为440。
-vf scale=640:480 设置视频的宽度为640,高度为480
-audiofile aduio.mp3 输入一个音频文件
-mc 0 设置音视频同步,增这个参数可防止音频和视频出现不同步现象
mencoder -oac mp3lame -lameopts vol=10 -ovc lavc -vf rotate=1 VID_20130807_094228.3gp -o VID_20130807_094228.avi
mencoder -oac mp3lame -lameopts vol=10 -ovc x264 -x264encopts bitrate=440 -vf scale=640:480 rotate=1 VID_20130807_094228.3gp -o VID_20130807_094228.mp4
说明:
-oac 指定音频编码器
mp3lame mp3的编码器
-lameopts 指定mp3编码器的参数
vol=10 音量放大
rotate=1 翻转方向,应该是顺时针的, 1为90度右转, 2为180度右转.....
4. 截取视频
命令格式: mencoder -ss 开始时间 -oac copy -ovc copy -endpos 截取时间长 文件名 -o 目标文件名
mencoder -ss 开始时间 -oac aac -ovc x264 -x264encopts bitrate=440 -vf scale=640:480 -mc 0 -endpos 截取时间长 文件名 -o 目标文件名
说明:
-ss 设置转换开始时间,如:-ss 15 代表从视频的15秒开始截取
-oac 指定音频编码器 copy 复制,不作改变 ; aac 指定音频编码器为aac
-ovc 指定视频编码器 x264 mp4编码器
-x264encopts 指定x264参数 bitrate=440 设置视频码率为440
-vf scale=640:480 设置视频的宽度为640,高度为480
-mc 0 设置音视频同步,增这个参数可防止音频和视频出现不同步现象
-endpos 设置转换结束时间,如:-endpos 60 在视频的60秒处结束
-o 输出选项
5. 提取音频
命令格式: mencoder -oac mp3lame -ovc copy -of rawaudio 视频文件 -o 音频文件
说明:
-of rawaudio 原始音频流
-ovc copy 这个是复制视频, 但这里并没有复制视频, 因为-of rawaudio这个参数, 视频被放弃了.
6. 提取视频
命令格式: mencoder -oac copy -ovc x264 -of rawvideo 视频文件 -o 输出的视频文件
说明:
这个和提取音频类似, 但这个的音频被丢弃了. 没声音的. -of rawvideo 这个只用视频流
7. 合成视频
命令格式: mencoder -ovc x264 -x264encopts bitrate=440 -vf scale=640:480 -oac mp3lame -mc 0 02.3gp 03.3gp -o updtp.mp4
mencoder 02.3gp 03.3gp -o updtp.mp4 -of lavf -vf lavcdeint -vf scale=640:480 -oac mp3lame
说明:
mp3lame mp3编码器
aac 指定音频编码器为aac
-ovc 指定视频编码器
x264 mp4编码器
-x264encopts 指定x264参数
bitrate=440 设置视频码率为440
-vf scale=640:480 设置视频的宽度为640,高度为480
-mc 0 设置音视频同步,增这个参数可防止音频和视频出现不同步现象
02.3gp 第一个文件
03.3gp 第二个文件
-o updtp.mp4 输出合并后的文件
-vf lavcdeint 参数用于去除视频中的拉丝条纹
三 . 使用 java 执行 mencoder 命令操作视频
一个简单的demo代码如下:(以视频格式转换为例)
private String videoConv() { List<String> commend = new java.util.ArrayList<String>(); commend.add("mencoder.exe"); // mencoder 路径,linux下可直接使用 mencoder commend.add("D:/input.avi"); // 源视频路径 commend.add("-o"); commend.add("D:/output.avi"); //输出视频路径 commend.add("-oac"); //设置音频编码 commend.add("mp3lame"); //设置音频编码器为mp3lame commend.add("-lameopts"); //设置 mp3lame参数 commend.add("preset=64"); //具体的音频编码器参数 commend.add("-ovc"); //设置视频编码器 commend.add("xvid"); //设置视频编码器为 xvid commend.add("-xvidencopts"); //设置xvid参数 commend.add("bitrate=600"); //具体xvid参数 commend.add("-srate"); //设置音频采样率 commend.add("22050"); //设置音频采样率值22050 try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); Process p = builder.start(); doWaitFor(p); } catch (Exception e) { e.printStackTrace(); return null; } }
关于视频转换的具体代码: 更好的封装请访问我的gitee,里面也包含了使用ffmpeg转换视频的方法,地址如下:
https://gitee.com/huaixiaonian/java-video
四. 更多资料
关于java方式的视频转换,本人也是刚入门,如有错误,欢迎留言!
开发过程中参考了一下的博客,链接如下,供大家参考:
https://www.myzhenai.com.cn/post/2689.html
http://www.cqyy.net/360/2022/0218/97998.html
http://t.zoukankan.com/LUO257316-p-3220809.html
https://www.cnblogs.com/bcfx/articles/2975419.html
https://blog.csdn.net/yhguo2008/article/details/5940717