mencoder

合集下载

ffmpeg编译、使用与常见问题

ffmpeg编译、使用与常见问题

FFMPEG编译、使用与常见问题一. Linux下FFMPEG的安装与测试 (1)二. FFMPEG编译中出现的一些问题与解决方法 (4)三. FFMpeg简介及命令选项参数 (8)四. FFMPEG与x264的编译 (13)一.Linux下FFMPEG的安装与测试a. 先装mp3在linux下的包:lame-3.97.tar.gz;tar -xvzf lame-3.97.tar.gz;cd lame-3.97;./configure --enable-shared --prefix=/usr/;make;make install;b. 支持Ogg Vorbis:as4自带相应的rpm包,你可以安装一下如下rpm包:libvorbis, libvorbis-devel,libogg, libogg-devel 一般情况下as4都会安装c. 支持xvid x264,现在最流行的两种高质量的压缩格式xvid的编译安装wget /downloads/xvidcore-1.1.0.tar.gztar zvxf xvidcore-1.1.0.tar.gzcd xvidcore-1.1.2/build/generic./configure --prefix=/usr --enable-sharedmakemake installx264的获取用git:git clone git:///x264.gitcd x264./configure --prefix=/usr --enable-sharedmakemake install3d. AC3和dts编码的支持as4系统似乎已经支持ac3编码,编译的时候只要加--enable-a52 --enable-gpl参数就行libdts编译参数tar zxvf libdts-0.0.2.tar.gz./configure --prefix=/usrmakemake installe. mpg4 aac格式支持,由于服务器还针对手机用户服务,所以,类似aac,mpg4铃声格式的支持,我们也得做。

java实现视频转码工具类

java实现视频转码工具类

java实现视频转码⼯具类废话不多说,直接上代码:这是转码⼯具类:package com.gcsoft.pyas.sysbase.utils;import com.gcsoft.pyas.AppProperties;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import ponent;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import java.util.UUID;/*** 视频转码⼯具类** @author jwc*/@Componentpublic class ConverVideoUtils {@Autowiredprivate AppProperties appProperties;protected final Logger logger = LoggerFactory.getLogger(this.getClass());/*** 转换视频格式** @param sourceVideoPath 视频地址* @return*/public String beginConver(String sourceVideoPath) {//转码格式String targetExtension = appProperties.getVideoFormat();//是否删除原⽂件Boolean isDeleteResult = appProperties.getIsDeleteResult();File fi = new File(sourceVideoPath);String fileName = fi.getName();//⽂件名不带扩展名String fileRealName = fileName.substring(0, stIndexOf("."));("接收到⽂件(" + sourceVideoPath + ")需要转换");if (!checkfile(sourceVideoPath)) {logger.error(sourceVideoPath + "⽂件不存在" + " ");return "";}long beginTime = System.currentTimeMillis();("开始转⽂件(" + sourceVideoPath + ")");String path = process(fileRealName, sourceVideoPath, targetExtension, isDeleteResult);if (StringUtil.isNotEmpty(path)) {("转换成功");long endTime = System.currentTimeMillis();long timeCha = (endTime - beginTime);String totalTime = sumTime(timeCha);("转换视频格式共⽤了:" + totalTime + " ");if (isDeleteResult) {deleteFile(sourceVideoPath);}return path;} else {return "";}}/*** 实际转换视频格式的⽅法** @param fileRealName ⽂件名不带扩展名* @param sourceVideoPath 原⽂件地址* @param targetExtension ⽬标视频扩展名* @param isDeleteResult 转换完成后是否删除源⽂件* @returnprivate String process(String fileRealName, String sourceVideoPath, String targetExtension, boolean isDeleteResult) { int type = checkContentType(sourceVideoPath);String path = "";if (type == 0) {//如果type为0⽤ffmpeg直接转换path = processVideoFormat(sourceVideoPath, fileRealName, targetExtension, isDeleteResult);} else if (type == 1) {//如果type为1,将其他⽂件先转换为avi,然后在⽤ffmpeg转换为指定格式String aviFilePath = processAVI(fileRealName, sourceVideoPath);if (aviFilePath == null) {// avi⽂件没有得到return "";} else {("开始转换:");path = processVideoFormat(aviFilePath, fileRealName, targetExtension, isDeleteResult);if (isDeleteResult) {deleteFile(aviFilePath);}}}return path;}/*** 检查⽂件类型** @param sourceVideoPath 原⽂件地址* @return*/private int checkContentType(String sourceVideoPath) {String type = sourceVideoPath.substring(stIndexOf(".") + 1).toLowerCase();// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)if (type.equals("avi")) {return 0;} else if (type.equals("mpg")) {return 0;} else if (type.equals("wmv")) {return 0;} else if (type.equals("3gp")) {return 0;} else if (type.equals("mov")) {return 0;} else if (type.equals("mp4")) {return 0;} else if (type.equals("asf")) {return 0;} else if (type.equals("asx")) {return 0;} else if (type.equals("flv")) {return 0;}// 对ffmpeg⽆法解析的⽂件格式(wmv9,rm,rmvb等),// 可以先⽤别的⼯具(mencoder)转换为avi(ffmpeg能解析的)格式.else if (type.equals("wmv9")) {return 1;} else if (type.equals("rm")) {return 1;} else if (type.equals("rmvb")) {return 1;}return 9;}/*** 检查⽂件是否存在** @param path ⽂件地址* @return*/private boolean checkfile(String path) {File file = new File(path);if (!file.isFile()) {return false;} else {return true;}}* 对ffmpeg⽆法解析的⽂件格式(wmv9,rm,rmvb等), 可以先⽤别的⼯具(mencoder)转换为avi(ffmpeg能解析的)格式.** @param fileRealName ⽂件名不带扩展名* @param sourceVideoPath 原⽂件地址* @return*/private String processAVI(String fileRealName, String sourceVideoPath) {/*** mencoder.exe的地址*/String menCoderPath = appProperties.getMencoderPath();/*** 转码后的存放视频地址 avi格式*/String videoFolder = appProperties.getUploadAndFormatPath();List<String> commend = new java.util.ArrayList<>();commend.add(menCoderPath);commend.add(sourceVideoPath);commend.add("-oac");commend.add("mp3lame");commend.add("-lameopts");commend.add("preset=64");commend.add("-ovc");commend.add("xvid");commend.add("-xvidencopts");commend.add("bitrate=600");commend.add("-of");commend.add("avi");commend.add("-o");commend.add(videoFolder + fileRealName + ".avi");try {ProcessBuilder builder = new ProcessBuilder();mand(commend);Process p = builder.start();doWaitFor(p);return videoFolder + fileRealName + ".avi";} catch (Exception e) {e.printStackTrace();return null;}}/*** 转换为指定格式* ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)** @param oldFilePath 源⽂件地址* @param fileRealName ⽂件名不带扩展名* @param targetExtension ⽬标格式扩展名 .xxx* @return*/private String processVideoFormat(String oldFilePath, String fileRealName, String targetExtension, Boolean isDeleteResult) { /*** ffmpeg.exe的地址*/String ffmpegPath = appProperties.getFfmpegPath();/*** 转码后的存放视频地址 mp4格式*/String targetFolder = appProperties.getUploadAndFormatPath();if (!checkfile(oldFilePath)) {logger.error(oldFilePath + "⽂件不存在");return "";}List<String> commend = new ArrayList<>();commend.add(ffmpegPath);commend.add("-i");commend.add(oldFilePath);commend.add("-vcodec");commend.add("mpeg4");commend.add("-q");commend.add("0");commend.add("-y");commend.add(targetFolder + fileRealName + targetExtension);try {ProcessBuilder builder = new ProcessBuilder();Process p = builder.start();doWaitFor(p);p.destroy();String videoPath = targetFolder + fileRealName + targetExtension;String path = this.processVideoFormatH264(videoPath, ffmpegPath, targetFolder, targetExtension, isDeleteResult);return path;} catch (Exception e) {e.printStackTrace();return "";}}/*** 将mpeg4转为h264编码为了⽀持播放器** @param path* @param ffmpegPath* @return*/private String processVideoFormatH264(String path, String ffmpegPath, String targetFolder, String targetExtension, Boolean isDeleteResult) { if (!checkfile(path)) {logger.error(path + "⽂件不存在");return "";}String newFilePath = targetFolder + UUID.randomUUID().toString() + targetExtension;List<String> commend = new ArrayList<>();commend.add(ffmpegPath);commend.add("-i");commend.add(path);commend.add("-vcodec");commend.add("h264");commend.add("-q");commend.add("0");commend.add("-y");commend.add(newFilePath);try {ProcessBuilder builder = new ProcessBuilder();mand(commend);Process p = builder.start();doWaitFor(p);p.destroy();if (isDeleteResult) {deleteFile(path);}return newFilePath;} catch (Exception e) {e.printStackTrace();return "";}}public int doWaitFor(Process p) {InputStream in = null;InputStream err = null;int exitValue = -1;try {in = p.getInputStream();err = p.getErrorStream();boolean finished = false;while (!finished) {try {while (in.available() > 0) {in.read();}while (err.available() > 0) {err.read();}exitValue = p.exitValue();finished = true;} catch (IllegalThreadStateException e) {Thread.sleep(500);}}} catch (Exception e) {logger.error("doWaitFor();: unexpected exception - " + e.getMessage());} finally {try {in.close();}} catch (IOException e) {(e.getMessage());}if (err != null) {try {err.close();} catch (IOException e) {(e.getMessage());}}}return exitValue;}/*** 删除⽂件⽅法** @param filepath*/public void deleteFile(String filepath) {File file = new File(filepath);if (file.delete()) {("⽂件" + filepath + "已删除");}}/*** 计算转码时间** @param ms* @return*/public String sumTime(long ms) {int ss = 1000;long mi = ss * 60;long hh = mi * 60;long dd = hh * 24;long day = ms / dd;long hour = (ms - day * dd) / hh;long minute = (ms - day * dd - hour * hh) / mi;long second = (ms - day * dd - hour * hh - minute * mi) / ss;long milliSecond = ms - day * dd - hour * hh - minute * mi - second* ss;String strDay = day < 10 ? "0" + day + "天" : "" + day + "天";String strHour = hour < 10 ? "0" + hour + "⼩时" : "" + hour + "⼩时";String strMinute = minute < 10 ? "0" + minute + "分" : "" + minute + "分";String strSecond = second < 10 ? "0" + second + "秒" : "" + second + "秒";String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : ""+ milliSecond;strMilliSecond = milliSecond < 100 ? "0" + strMilliSecond + "毫秒" : ""+ strMilliSecond + " 毫秒";return strDay + " " + strHour + ":" + strMinute + ":" + strSecond + " "+ strMilliSecond;}}⼯具类⽤到的参数#视频上传和转码后存放的位置video.trans.coding=D:/PYAS/TMS/upload/video/#ffmpeg地址tool.ffmpeg.path=D:/FFmpeg/ffmpeg.exe#mencoder地址tool.mencoder.path=D:/FFmpeg/mencoder.exe#转码格式video.format=.mp4#是否删除源⽂件video.isdelete.result=false⼯具类⽤到的转码⼯具分别是: ffmpeg、mencoder到此这篇关于java实现视频转码的⽂章就介绍到这了,更多相关java视频转码内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章。

光盘DV(DVD式摄像机)格式转换指南

光盘DV(DVD式摄像机)格式转换指南

光盘DV(DVD式摄像机)格式转换指南1、拍完的碟能否在DVD机上直接播放?答案是肯定的,但必须使用编辑不太方便的Video格式,这种格式下,想删除片断不太方便,只能删除刚拍完的一段,并且必须是拍完立即回放的时候才能删。

这样一来,想拍出一张精选碟真是不容易。

不过只有在这种模式下,拍完后选择“封口”后,才可以直接在DVD 机中播放。

封口大概需要5分钟,如果光盘只拍了一小部分空间,可能只要1分多钟。

2、能否中途将某些片断传到电脑上?可以的。

以Video模式拍摄时,每次需要封口后再将DV用USB线连到电脑上,或者直接将光盘取出放入DVD光驱,就可以读取DVD格式的文件。

有很多工具来提取DVD格式中的片断,如DVDx、SmartRipper等等。

传完后,用DV还可以重新解除封口,以继续拍摄直到光盘满。

解除封口大概需要3分钟。

不过我想主要讲的是更为方便的VR格式(Video Recording),只要封口之后(大概只需要1分钟),就可以传到电脑上(通过USB或放入DVD光驱),并且继续拍摄不需要解除封口,继续拍摄后也可直接传到电脑上。

简单地说,就是刚拍完第一段就可以封口,以便以后的操作。

在任意时刻,都可以删除任一个片断,这样,就比较容易拍出一个精选集,在这一点上,方便性最接近DC。

VR格式拍出来的光盘在根目录中会是一个DVD_RTA V目录,里面有两个文件:VR_MANGR.IFO和VR_MOVIE.VRO ,前者是导航信息,用于记录每个片断的位置,后者是录像内容,所有的片断合在这个大文件中。

目前我发现能识别 VR_MANAGER.IFO 格式(不同于普通DVD中的VIDEO_TS.IFO格式)的软件不多,分别描述如下:PowerDVD 5.0,可预览VR格式中的和个片断缩略图来选择播放。

下载:/html_2/1/124/id=1060&pn=0&linkPage=1.htmlWinDVD 6.0,同PowerDVD一样,支持VR格式的DVD摄像光盘,可以象普通DVD一样导航播放。

java 视频处理 mencoder

java 视频处理 mencoder

Mencoder是Mplayer自带的编码工具(Mplayer是Linux下的播放器,开源,支持几乎所有视频格式的播放,现在有windows和Mac版本)。

Mplayer的获得与配置:Mplayer windows版本下载列表:[url]http://www5.mplayerhq.hu/MPlayer/releases/win32/[/url]列表中会有版本发布日期,可以挑选最新的版本,也可以选择old/去下载老的版本,笔者用的是6月份的版本。

下载后解压到某个文件夹中即可。

Codecs下载列表:[url]http://www5.mplayerhq.hu/MPlayer/releases/codecs/[/url]选择windows-all-********.zip(*表示年月日)下载,将zip包中的文件夹下所有文件,包括*.dll、*.acm、*.ax等等全部copy到Mplayer根目录下的codecs文件夹中。

此时最好把Mplayer.exe所在路径,同时也是Mencoder.exe所在路径添加到环境变量path 中。

现在可以试试用Mplayer播放视频,比如有个视频位于D:\music\APerfectMatch.wmv,那么可以打开一个cmd窗口,输入 mplayer “D:\music\APerfectMatch.wmv”,感受一下来自Linux 的播放器吧,可以通过键盘来操纵。

Mencoder转换视频格式:以将各种格式转换为flv格式为例(flv格式是flash支持的视频格式):mencoder "E:\test.m2p" -o "E:\output.flv" -of lavf -lavfoptsi_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcoptsvcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strateg y=1 -vf scale=512:-3 -ofps 12 -srate 22050在命令行中输入这行代码(注意:windows的命令行是不支持换行的),按回车运行,一段时间之后就可以得到一个.flv文件,播放一下看看品质如何(可以直接用Mplayer播放)。

UbuntuLinux下Ffmpeg及Mencoder安装使用小结

UbuntuLinux下Ffmpeg及Mencoder安装使用小结

UbuntuLinux下Ffmpeg及Mencoder安装使用小结近段时间在学习Ffmpeg、Mencoder音视频转换,大概在Ubuntu 10.04、Ubuntu 10.10、Ubuntu Natty 测试版上安装和使用过。

重点是针对低分辨率的普通手机视频,测试的手机为Bird V780,主要参数为,视频编码:mpeg4、h263,音频编码:faac、amrnb,容器格式:mp4、3gp,分辨率:176×144;音乐文件格式:mp3 。

下面对 Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用作个小结。

1、安装:安装Ubuntu 软件仓库里的版本是很容易的,用sudo apt-get install 命令就可以自动安装上。

但是官方仓库里面的版本比较陈旧,可能缺失一些功能和存在一些bug 没有解决,更重要的是,一些需要的编码支持没有被官方版本编译进去,如用于普通手机视频的faac、amr 音频编码支持等。

而且,两个软件官方网站均推荐使用其svn 或git 开发版本。

所以,下面着重总结编译安装 ffmpeg 和 mencoder。

为了避免可能的冲突,在开始之前,我卸载了仓库版本的相关软件:sudo apt-get remove ffmpeg mencoder mplayer获取Ffmpeg 开发版本:git clone git:///ffmpeg.git ffmpeg获取Mplayer 开发版本(包含了mencoder):svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer实际上 ./configure 配置 Mplayer 时会自动从 Ffmpeg 的开发库中下载 ffmpeg 最新开发版源码供编译 Mplayer 使用,因为 Mplayer 和 Mencoder 会调用 Ffmpeg 的库。

而且,在当前的 Mplayer 编译中,如果没有特别设定,Mplayer 会把 Ffmpeg 的库编译成静态库编入Mplayer 或Mencoder 的二进制文件中,使这两个文件达到约14M左右。

Java实现视频网站的视频上传及视频播放功能

Java实现视频网站的视频上传及视频播放功能

Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash 制作的播放器来播放该文件.项目中用制作的player.swf播放器.多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

1.能支持的格式ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)2.不能支持的格式对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg 能解析的)格式.实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具.数据库MySQL5.5实例所需要的数据库脚本drop database if exists db_mediaplayer;create database db_mediaplayer;use db_mediaplayer; create table tb_media(id int not null primary key auto_increment comment '主键' ,title varchar(50) not null comment '视频名称' ,src varchar(200) not null comment '视频存放地址' ,picture varchar(200) not null comment '视频截图' ,descript varchar(400) comment '视频描述' ,uptime varchar(40) comment '上传时间');desc tb_media;项目结构图:上传视频界面设计在上传文件时,Form表单中enctype属性值必须为"multipart/form-data".模块界面设计如下图:enctype属性值说明application/x-www-form-urlencoded表单数据被编码为名称/值对,这是标准的编码格式multipart/form-data表单数据被编码为一条消息,页面上每个控件对应消息中的一部分text/plain表单数据以纯文本形式进行编码,其中不含任何控件格式的字符业务接口定义面向接口编程,接口中定义系统功能模块.这样方便理清业务,同时接口的对象必须由实现了该接口的对象来创建.这样就避免编码中的某些业务遗漏等,同时扩展性也增强了.package com.webapp.dao;import java.util.List;import com.webapp.entity.Media;/**** MediaDao.java** @version: 1.1** @author:苏若年<ahref="mailto:****************">发送邮件</a>** @since: 1.0 创建时间: 2013-2-07 上午10:19:54** TODO : interface MediaDao.java is used for ...**/public interface MediaDao {/*** 视频转码* @param ffmpegPath 转码工具的存放路径* @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件* @param codcFilePath 格式转换后的的文件保存路径* @param mediaPicPath 截图保存路径* @return* @throws Exception*/public boolean executeCodecs(String ffmpegPath,String upFilePath, String codcFilePath, String mediaPicPath)throws Exception;/*** 保存文件* @param media* @return* @throws Exception*/public boolean saveMedia(Media media)throws Exception;/*** 查询本地库中所有记录的数目* @return* @throws Exception*/public int getAllMediaCount()throws Exception;/*** 带分页的查询* @param firstResult* @param maxResult* @return*/public List<Media> queryALlMedia(int firstResult, int maxResult)throws Exception;/*** 根据Id查询视频* @param id* @return* @throws Exception*/public Media queryMediaById(int id)throws Exception;}接口的实现,这里列出ffmpeg视频转码与截图模块/*** 视频转码* @param ffmpegPath 转码工具的存放路径* @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件* @param codcFilePath 格式转换后的的文件保存路径* @param mediaPicPath 截图保存路径* @return* @throws Exception*/public boolean executeCodecs(String ffmpegPath, String upFilePath, String codcFilePath,String mediaPicPath) throws Exception {// 创建一个List集合来保存转换视频文件为flv格式的命令List<String> convert = new ArrayList<String>();convert.add(ffmpegPath); // 添加转换工具路径convert.add("-i"); // 添加参数"-i",该参数指定要转换的文件convert.add(upFilePath); // 添加要转换格式的视频文件的路径convert.add("-qscale"); //指定转换的质量convert.add("6");convert.add("-ab"); //设置音频码率convert.add("64");convert.add("-ac"); //设置声道数convert.add("2");convert.add("-ar"); //设置声音的采样频率convert.add("22050");convert.add("-r"); //设置帧频convert.add("24");convert.add("-y"); // 添加参数"-y",该参数指定将覆盖已存在的文件convert.add(codcFilePath);// 创建一个List集合来保存从视频中截取图片的命令List<String> cutpic = new ArrayList<String>();cutpic.add(ffmpegPath);cutpic.add("-i");cutpic.add(upFilePath); // 同上(指定的文件即可以是转换为flv格式之前的文件,也可以是转换的flv文件)cutpic.add("-y");cutpic.add("-f");cutpic.add("image2");cutpic.add("-ss"); // 添加参数"-ss",该参数指定截取的起始时间cutpic.add("17"); // 添加起始时间为第17秒cutpic.add("-t"); // 添加参数"-t",该参数指定持续时间cutpic.add("0.001"); // 添加持续时间为1毫秒cutpic.add("-s"); // 添加参数"-s",该参数指定截取的图片大小cutpic.add("800*280"); // 添加截取的图片大小为350*240cutpic.add(mediaPicPath); // 添加截取的图片的保存路径boolean mark = true;ProcessBuilder builder = new ProcessBuilder();try {mand(convert);builder.redirectErrorStream(true);builder.start();mand(cutpic);builder.redirectErrorStream(true);// 如果此属性为 true,则任何由通过此对象的 start() 方法启动的后续子进程生成的错误输出都将与标准输出合并,//因此两者均可使用 Process.getInputStream() 方法读取。

mencoder

mencoder

编码为双通道MPEG-4 ("DivX")
• 这种编码两次对文件进行编码。第一次编码(配音通道)生成一些几 兆大的临时文件(*.log),先不要删除它们(你可以删除AVI或者通过重 定向到/dev/null 而不生成视频)。第二次编码时,生成了双通道输出 文件,使用的即是从临时文件提供的比特律数据。生成文件会有更好 的图像质量。 • 复制音轨 • 双通道编码在复制音轨时将DVD的第二个轨道转换成MPEG-4 ("DivX") AVI。 • mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o /dev/null mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \ -oac copy -o output.avi •
编码为Sony PSP视频格式
遵循要求: • 比特律:不应超过每秒1500kb,然而过去 的版本 几乎支持任何比特律只要头文件声 明其不是太高。 • 维数:PSP视频的长宽应是16的倍数,并 且长*宽的 积应<= 64000。 在一些情况下, PSP可能播放更高分辨率的文件。 • 音频:其采样率针对MPEG-4应为24kHz, 针对H.264 为48kHz。
mencoder
Mencorder的简介
• mencoder 是一款命令行方式的视频处理软 件,是Mplayer自带的编码工具(Mplayer 是Linux下的播放器,开源,支持几乎所有 视频格式的播放,现在有windows和Mac版 本)。 (图片截图)
Mencoder的强大功能
• 任意格式→任意格式,转换功能相当强大! • 目前市面上流行的格式转换器,都是基于 mencoder开发,比如暴风转码,格式工厂 等。 • (暴风影音和格式工厂的图片及提及一下)

FFmpeg+mencoder视频批量转码及加水印(图文教程)

FFmpeg+mencoder视频批量转码及加水印(图文教程)

FFmpeg+mencoder视频批量转码及加水印(图文教程)由于公司项目需要,在windows2008 64bit环境下研究了一下如何用ffmpeg+mencoder实现全自动大批理多视频格式相互转换,花了点心思,整理整理,写出给大家分享下。

思路baidu一下立马就发现了ffmpeg,网上讲解用ffmpeg来进行视频转换的文章也不在少数,我自己在开发可视教程网http://www。

Kesjc。

com/时整理了一套方法,非常合适大批量视频格式的转码和加水印工作。

这里总结下视频转码和视频转换的主要步骤:核心是利用ffmpeg进行视频转换,我们自己并不写转换视频的代码,只是调用ffmpeg,它会帮我们完成视频的转换。

ffmpeg支持的类型有:asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等,这些类型,可以利用ffmpeg进行直接转换。

ffmpeg不支持的类型有:wmv9,rm,rmvb等,这些类型需要先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式,再用ffmpeg将avi转码成flv.或者可直接用mencoder将avi转码成flv格式。

1)下载ffmpeg2)安装ffmpeg3)FFmpeg视频转码实例教程(附截图)4)mencoder下载和安装方法5)mencoder视频转码实例教程(附截图)6)用批处理实现FFmpeg自动批量视频转码加水印7)用批处理实现mencoder自动批量视频转码加水印8)ffmpeg参数详细解释9)Mencoder参数详细解释1.下载FFmpeg打开/download.html下载ffmpeg如下图:本文以下载windows版的FFmpeg为例进行讲解。

如下图:点上图中的ffmpeg builds进入下图页进行FFmpeg 64-bit下载下载FFmpeg成功如下:2.安装FFmpeg解压FFmpeg将C:\DrMeng_video_convert\ffmpeg-20140528-git-bbc10a1-win64-static.7z解压到当前文件夹安装FFmpeg运行C:\DrMeng_video_convert\ffmpeg-20140528-git-bbc10a1-win64-static\ff-prompt.bat 如下图:安装FFmpeg成功!3.FFmpeg视频转码实例说明:准备工作如下:首先在转码之前运行C:\DrMeng_video_convert\ffmpeg-20140528-git-bbc10a1-win64-static\ff-prompt.bat 如下图:在dos命令窗口中执行2次cd ..Cd ..Cd ..Dir确保dos窗口中的当前路径和当前目录是:C:\DrMeng_video_convert\并在C:\DrMeng_video_convert\目录下建三个文件夹:并放入不同格式的文件如下:C:\DrMeng_video_convert\avi\avi1.aviC:\DrMeng_video_convert\mp4\mp41.mp4C:\DrMeng_video_convert\wmv\wmv1.wmv等.....开始转码:案例1:将avi格式视频转码成flv格式视频C:\DrMeng_video_convert>ffmpeg.exe -i avi/avi1.avi -y -b 1500 -qscale 4 avi/avi1.flv视频数据流量,用-b xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale 6,4的质量比6高给视频加水印:-vf "movie=tai.png [logo],[in][logo] overlay=20:20 [out]"ffmpeg.exe -i avi/avi1.avi-vf "movie=tai.png [logo],[in][logo] overlay=20:20 [out]" -y -b 1500 -qscale 4 avi/avi1.flv以下这行命令更通用:ffmpeg -i avi/avi1.avi -vf "movie=tai.png [logo],[in][logo] overlay=20:20 [out]" -y -ab 56 -ar 22050 -b 500 -qscale 4 avi/avi2.flv-b 500可是1000或1500值越大视频文件就大,就很清晰。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
der能以两种方式处理输入媒体流: 编码或复制。 • 视频流 (选项-ovc copy): 把FLI或VIVO或MPEG-1视频放入(不是转 换)到 一个AVI文件中!当然,只有MPlayer能播放这样的文件并且 也许它并没有生活上的实际价值。实际意义上:当只有音频流要被编 码( 例如从无压缩的PCM到MP3)时,视频流才可能有用。 • 音频流 (选项-oac copy): 直接的。你可能提取一个外部音频文件 (MP3,WAV)并将其合成到一个输出媒体流里。 为此可使用audiofile 文件名选项。 • 使用-oac copy从一种容器格式复制到另一种容器格式时,你可能需 要使用-fafmttag选项以保持原始文件的音频格式标签。例如,如果你 将一个使用AAC音频的NSV文件转换到AVI容器中,音频格式文件标 签可能是错误的,需要被转换。对于详细的音频格式标签,查看 codecs.conf。 • 例子: • mencoder input.nsv -oac copy -fafmttag 0x706D \ -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -o output.avi

• • • • •
将DVD子标题提取到VOBsub文件
• MEncoder能将DVD子标题提取到VOBsub 格式的文件中。它们是一对由.idx及.sub结 尾的文件组成。并且经常被压缩成一个.rar 文件。 MPlayer可通过 -vobsub及vobsubid选项播放这些文件。 • 你可以通过-vobsubout指定输出文件的基础 名(例如不包括 .idx或.sub后缀),对于生 成文件子标题的索引使用-vobsuboutindex。
Mencoder的强大功能
• 可以说转换器能办到的,mencoder都能办 到,但mencoder能办到的,转换器就不一 定能办到了。 • mencoder >转换器 • 很多初学者宁可去用转换器,也不用 mencoder的很大原因是mencoder只支持在 命令行下操作,令很多初学都无所适从,不 知如何开始.这也是mencoder不能流行开来 的原因 ,但今天我们就来挑战一下!
改变电影大小
• 经常出现要改变电影图片大小的需求。原因可能 是多样的:减小文件大小,网络带宽等等。 • 变换过程由scale视频滤镜处理: -vf scale=宽:高。 输出质量可由-sws选项调节。如果没有设置, MEncoder将使用2:双三次。 • 用法: • mencoder input.mpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \ -vf scale=640:480 o output.avi
编码为Sony PSP视频格式
• 例 6.4. 编码到PSP • mencoder -ofps 30000/1001 -af lavcresample=24000 -vf harddup -oac lavc \ -ovc lavc -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:acodec=libf aac \ -of lavf -lavfopts format=psp \ input.video o output.psp 注意你可以通过 -info name=MovieTitle为视频摄者标题。
编码为双通道MPEG-4 ("DivX")
• 例 6.3. 对音轨编码 • 将一个DVD编码成MPEG-4 ("DivX") AVI,音轨采 用MP3格式使用这个方法的时候要当心,因为有 时它可能造成音/视频不同步。 • mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \ -oac mp3lame lameopts vbr=3 -o /dev/null mencoder dvd://2 ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \ -oac mp3lame -lameopts vbr=3 -o output.avi •
将DVD子标题提取到VOBsub文件
• 例 6.5. 在做双通道编码时从DVD复制子标题 • rm subtitles.idx subtitles.sub mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \ -vobsubout subtitles -vobsuboutindex 0 -sid 2 mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \ -vobsubout subtitles -vobsuboutindex 1 -sid 5 • 例 6.6. 从一个MPEG文件复制法文子标题 • rm subtitles.idx subtitles.sub mencoder movie.mpg -ifo movie.ifo -vobsubout subtitles -vobsuboutindex 0 \ vobsuboutid fr -sid 1 -nosound -ovc copy
编码为Sony PSP视频格式
遵循要求: • 比特律:不应超过每秒1500kb,然而过去 的版本 几乎支持任何比特律只要头文件声 明其不是太高。 • 维数:PSP视频的长宽应是16的倍数,并 且长*宽的 积应<= 64000。 在一些情况下, PSP可能播放更高分辨率的文件。 • 音频:其采样率针对MPEG-4应为24kHz, 针对H.264 为48kHz。
从多个输入图像文件进行编码 (JPEG, PNG, TGA等)
• • • • • 例子. 关于-mf选项的解释在man页中。 使用当前目录下所有JPEG文件生成MPEG-4文件。 mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc lavc \ -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi 使用当前目录中的一些JPEG文件生成MPEG-4文件。 mencoder mf://frame001.jpg,frame002.jpg -mf w=800:h=600:fps=25:type=jpg \ -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi 使用显示指示的一系列JPEG文件生成MPEG-4文件(当前目录下的list.txt包含被用做 源的文件列表,一个一行): mencoder mf://@list.txt -mf w=800:h=600:fps=25:type=jpg \ -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi 使用当前目录下所有JPEG文件生成移动JPEG(MJPEG)文件: mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc copy -oac copy -o output.avi 使用当前目录下所有PNG文件生成未压缩的文件: mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc raw -oac copy -o output.avi
编码为MPEG格式
• MEncoder可生成MPEG (MPEG-节目流)格 式的文件。 • 要改变MEncoder的输出文件格式,使用 of mpeg选项。 例如: mencoder input.avi -of mpeg -ovc lavc lavcopts vcodec=mpeg1video \ -oac copy other_options -o output.mpg
编码为双通道MPEG-4 ("DivX")
• 这种编码两次对文件进行编码。第一次编码(配音通道)生成一些几 兆大的临时文件(*.log),先不要删除它们(你可以删除AVI或者通过重 定向到/dev/null 而不生成视频)。第二次编码时,生成了双通道输出 文件,使用的即是从临时文件提供的比特律数据。生成文件会有更好 的图像质量。 • 复制音轨 • 双通道编码在复制音轨时将DVD的第二个轨道转换成MPEG-4 ("DivX") AVI。 • mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o /dev/null mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \ -oac copy -o output.avi •
mencoder
Mencorder的简介
• mencoder 是一款命令行方式的视频处理软 件,是Mplayer自带的编码工具(Mplayer 是Linux下的播放器,开源,支持几乎所有 视频格式的播放,现在有windows和Mac版 本)。 (图片截图)
Mencoder的强大功能
• 任意格式→任意格式,转换功能相当强大! • 目前市面上流行的格式转换器,都是基于 mencoder开发,比如暴风转码,格式工厂 等。 • (暴风影音和格式工厂的图片及提及一下)
第 6 章 MEncoder的基础用法
• • • • • • • • • • 6.1. 选择编解码器及容器格式 6.2. 选择输入文件或设备 6.3. 编码为双通道MPEG-4 ("DivX") 6.4. 编码为Sony PSP视频格式 6.5. 编码为MPEG格式 6.6. 改变电影大小 6.7. 媒体流复制 6.8. 从多个输入图像文件进行编码(JPEG, PNG, TGA等) 6.9. 将DVD子标题提取到VOBsub文件 6.10. 保持视频画面比例
相关文档
最新文档