最近打算把我电脑上的一些视频文件转换成x264格式的mp4,从而实现和平板&电脑间的共享。由于WinMEncoder对高清视频有些力不从心,便用MeGui实现视频转换。MeGui本身还算比较容易上手,但是它有一个问题,那就是无法像WinMencoder那样根据设置的规则实现批量转换,需要对每一个文件进行设置,如果文件较多便会觉得很累,容易出错。

MeGui本身就是一个Gui,具体转换的工作还是靠外部程序实现的,它主要是生成外部命令行所需要的参数。而其中参数主要有两种——avs脚本和命令行参数。对于那些转换视频的老手来说,自然可以手动编写avs脚本,并手动配置相应命令行参数,写一个批处理文件即可实现批量转换,但对于我这种门外汉来说几乎是不可能任务。我的实现方案是:

  1. 用MeGui转换一个视频文件,截取其生成的avs脚本和命令行参数,并转换为批处理文件,使之可以脱离MeGui批量执行。
  2. 修改其avs脚本和批处理文件中的输入和输出文件,使之可以批量应用于其它文件。

PS:本文只是给了一个通用的方案,使用该方案也需要较强的动手能力和一定的编程经验。由于转换任务配置有很大差异,我这里并没有给出一个可以直接使用的傻瓜程序,请不要留言索求程序,具体根据自己的配置参数来实现。

由于视频文件较大,这里我用网上下的一个flv短片演示这一过程。

转换完后,可以通过Job项查看该转换过程结果了哪几步,

这里由于我是采用的二次编码,因此有两次视频转换,其总共分四步:

  1. 分离出音频文件,输出"3.m4a"
  2. 第一次视频转换
  3. 第二次视频转换,输出视频文件"3.264"
  4. 将视频和音频混合起来,输出mp4文件"3-混合文件.mp4"

Job项写得比较简单,从中我们看不出具体的调用了那些外部程序,参数是啥,详细信息需要进一步查看日志:

下面我们来一一分析这些过程,并将其转换为命令行。

第一步:分离出音频文件

其中高亮部分表示的是通过R:\1\MeGUI\tools\eac3to\neroAacEnc.exe -ignorelength -q 0.5 -if - -of "R:\2\3.m4a"命令,分离出"3.m4a"音频文件。

NeroAAC的参数说明可以参考这个地址:http://wiki.hydrogenaudio.org/index.php?title=NeroAAC。 它的输入参数是一个wav格式文件,当输入为-的时候表示stdin中获取。从这里的参数来看是通过stdin中获取wav数据的。从日志中我们无法看出是如何将视频格式转换为wav并输出到stdin中共neroaac调用的,但能发现图中所示的一个脚本:

LoadPlugin("R:\1\MeGUI\tools\ffms\ffms2.dll")
    FFAudioSource("R:\2\3.flv")
    Normalize()
    return last

这个脚本的功能就是将音频信息转换为wav格式,如何执行的这个脚本,在日志中并没有找到相应的外挂命令行,可能是MeGUI自己的内部实现,不过可以通过dshow2wav.exe(在http://sourceforge.net/projects/direct264/下载)来实现,它的命令格式如下:dshow2wav.exe "audio.avs"(PS:不要单独在控制台执行这个命令,大量非法输出会把控制台挂死)其中它的输入参数"audio.avs"就是我将前面的脚本保存成的avs文件。

综上所述,最终的组合命令如下:

dshow2wav.exe "audio.avs" | R:\1\MeGUI\tools\eac3to\neroAacEnc.exe -ignorelength -q 0.5 -if - -of "R:\2\3.m4a"

执行完这个命令行,就可以获取音频文件"3.m4a"了。

注: 有时dshow2wav.exe无法正确解析出wav文件来,这时可以试一下wavi这个程序,不过它不支持输出到stdout,需要中间有个临时wav文件。不过这个程序是开源的,有空的话我改一下这个程序。

第二步:第一次视频转换

从它的日志类型-任务命令行(前面的那个转换音频的日志类型是CommandLine,表示是一个组合的命令行),这一步命令行化就比较简单了,直接将它的命令行执行输出即可:

"R:\1\MeGUI\tools\x264\avs4x264mod.exe" --tune animation --pass 1 --bitrate 1000 --stats "R:\2\3.stats" --keyint 150 --sar 1:1 --output NUL "R:\2\3.avs"

这里有一个avs脚本作为输入参数,它是MeGUI自动生成的,内容如下:

DirectShowSource("R:\2\3.flv", fps=15.000, audio=false, convertfps=true).AssumeFPS(15.000)
    #deinterlace
    #crop
    #resize
    #denoise
    ConvertToYV12()

第三步:第二次视频转换

这一步也是直接执行命令行:

"R:\1\MeGUI\tools\x264\avs4x264mod.exe" --tune animation --pass 2 --bitrate 1000 --stats "R:\2\3.stats" --keyint 150 --sar 1:1 --output "R:\2\3.264" "R:\2\3.avs"

这个里面的输入脚本和前面一样,就不多介绍了。执行完这一步后,就生成了视频文件"3.avs"。

第四步:混流

这一步也是直接执行命令行:

"R:\1\MeGUI\tools\mp4box\mp4box.exe" -add "R:\2\3.264:fps=15" -add "R:\2\3.m4a#trackID=1" -tmp "R:\\2" -new "R:\2\3-混合文件.mp4"

执行这个命令行后,就生成了我们要的mp4文件了。

综合:

最后把这四步综合起来,形成一个批处理文件:

R:\1\direct264\dshow2wav.exe "audio.avs" | R:\1\MeGUI\tools\eac3to\neroAacEnc.exe -ignorelength -q 0.5 -if - -of "R:\2\3.m4a"
    "R:\1\MeGUI\tools\x264\avs4x264mod.exe" --tune animation --pass 1 --bitrate 1000 --stats "R:\2\3.stats" --keyint 150 --sar 1:1 --output NUL "R:\2\3.avs"
    "R:\1\MeGUI\tools\x264\avs4x264mod.exe" --tune animation --pass 2 --bitrate 1000 --stats "R:\2\3.stats" --keyint 150 --sar 1:1 --output "R:\2\3.264" "R:\2\3.avs"
    "R:\1\MeGUI\tools\mp4box\mp4box.exe" -add "R:\2\3.264:fps=15" -add "R:\2\3.m4a#trackID=1" -tmp "R:\\2" -new "R:\2\3-混合文件.mp4"

del *.stats
    del *.m4a
    del *.ffindex
    del *.264
    del *.mbtree

PS: 由于删除临时文件的命令行在日志中找不到,这里是我根据我的命令的输出加入的,根据命令不同,输出的临时文件也会有所不同。

其中用到了两个输入脚本audio.avs和3.avs,这些都是MeGui创建的:

Auido.avs

LoadPlugin("R:\1\MeGUI\tools\ffms\ffms2.dll")
    FFAudioSource("R:\2\3.flv")
    Normalize()
    return last

3.avs

DirectShowSource("R:\2\3.flv", fps=15.000, audio=false, convertfps=true).AssumeFPS(15.000)
    #deinterlace
    #crop
    #resize
    #denoise
    ConvertToYV12()

到了这一步后,我们已经成功实现纯命令行转换视频了,直接执行这个批处理文件就可以获取转换后的mp4文件了。下一步就是把这些命令行应用到其它视频文件中,以实现批量转换的目的。

我的批量转换方式实现比较简单:写了一个程序导入所有待转换的文件,然后每次转换前直接把输入和输出文件(上面脚本中标红的部分)的命令行在bat和avs脚本中替换,调用bat文件获取转换输出。

由于转换任务配置有很大差异,所以我这里的分析过程还是手动完成的,因此并不能给出一个通用的批量转换。实际上,如果能实现一个智能分析日志的的功能,把我这里的分析过程自动化,是可以实现直接根据MeGui日志自动批量转换的。我最开始本打算实现一下的,后来发现如果要弄一个比较完善的版本还有些工作量,就没弄了,等闲下来时再看看。

利用MeGUI实现批量转换视频相关推荐

  1. 如何快速批量转换视频的格式

    当我们在网络上下载的视频文件格式不正常,导致无法正常播放,这时候要怎么解决这一难题呢?如果我们知道如何利用剪辑软件来批量转换视频格式的话,就能轻松解决这个问题了,今天小编就来分享如何一键批量转换视频格 ...

  2. python批量音频转格式_GitHub - shede333/SWConvertVideoToAudio: Python批量转换 视频 为 音频MP3(即提取音频文件)...

    Python批量转换 视频 为 音频MP3(即提取音频文件) 输入文件格式:ffmpeg支持的视频文件 输出格式格式:mp3文件 使用方法: 注意:使用前需要先安装 ffmpeg 才行(Python最 ...

  3. FFmpeg批量转换视频格式

    FFmpeg 批量转换视频格式 1.新建一个.bat文件(如新建"视频转换.bat"),将下列代码复制进去后保存. 2.将该文件放在含有视频的文件夹类,双击运行即可.运行完成后视频 ...

  4. 如何批量转换视频格式不会的赶紧来看看

    当我们需要将视频进行批量转换的时候,我们该如何进行操作呢?这里推荐一个辅助软件操作简单,感兴趣的小伙伴一起来看看吧. 准备工具: 视频剪辑高手 多段视频素材 开始步骤: 先下载并安装一个软件[视频剪辑 ...

  5. 无损批量转换视频文件的格式的方法

    有时候在工作生活中,我们需要用到特点的一些视频格式,那当我们下载或者原创的视频文件格式不满足需求的时候,怎么才能快速批量地转换这些视频文件并且不损坏视频画质清晰度呢?其实方法并不难,跟着小编来看看操作 ...

  6. linux mp4转h264工具,在Ubuntu下批量转换视频为H.264编码的mp4格式

    是目前比较流行的视频编码方式,比起MPEG2在画质大致相同的情况下能再压缩2-4倍,即如果一个DVD视频大小是1GB,用H264编码后能缩小到250MB左右,同时H264视频还能用时髦的浏览器(比如F ...

  7. 利用FFmpeg在macOS中批量转换视频格式

    find ./ -name '*.mov' -exec sh -c 'ffmpeg -i "$0" "${0%%.mov}.mp4"' {} \;

  8. win10:dos调用ffmpeg批量转换视频格式

    简介:在某些特定场景中,测试数据的输入有格式要求,例如需要将目录下所有3gp文件转成mp4,那么我们可以通过dos命令操作ffmpeg进行转换,其他场景以此类推. 相关攻略: 利用ffmpeg将avi ...

  9. 使用 FFmpeg 批量转换视频格式 mp4转ts(bat命令行)

    第一步:官网下载 FFmpeg 打开 http://ffmpeg.org/ 点 download 按钮,找到自己的系统对应格式(比如我的Windows 64位下载之后是个压缩包ffmpeg-20181 ...

  10. js数组对象递归转换树_使用手刹批量转换视频目录树以递归流式传输到Xbox360

    js数组对象递归转换树 I've got many many gigs of 640x480 video of the kids and family taken on my Flip Ultra a ...

最新文章

  1. iOS性能优化:Instruments使用实战
  2. 叹西安2014中秋节雨天
  3. 神策数据埋点大升级,一站式埋点,360° 满足你的不同场景需求
  4. 路由器安置(Routing)
  5. Linux操作系统总结
  6. php页面增加自选项,php - 添加自定义设置选项卡,Woocommerce的设置客户列表内容 - SO中文参考 - www.soinside.com...
  7. 机器学习实战教程(四):朴素贝叶斯基础篇之言论过滤器
  8. springboot上传文件及文件上传限制大小异常捕获
  9. windows中使用scrapyd遇到的问题
  10. wifi协议_物联网网关智能家居工业4G路由器通用的物联网WiFi模块 MQTT/TCP协议 Linux嵌入式...
  11. C#开发:openfiledialog的使用
  12. html计算一个数组所有元素的和,函数bsxfun,两个数组间元素逐个计算的二值操作...
  13. (自然语言处理)语料、文本数据集清单
  14. hMailServer之发送附件大小限制
  15. 融合7大领域!Apache Flink 在开源生态下的应用实践
  16. 机器学习数学基础(1)-回归、梯度下降
  17. lenovo 笔记本ideapad 320c-15改装win7问题
  18. 关于空间域到频率域的转换
  19. java判断日期是否是同一周_java中如何判断两个日期是否是同一周
  20. 百度GOALS比赛总结

热门文章

  1. GNSS精密轨道产品sp3与精密钟差产品clk批量下载(Linux Shell)
  2. Beyond Accuracy:Behavioral Testing of NLP Models with Checklist 论文阅读
  3. 服装尺寸 html,国家标准规范服装尺寸表.doc
  4. (三十一)树莓派3B+获取ADS1115 ADC转换的数据
  5. postgresql中实现按周统计详解
  6. java 一年有多少周_Java8根据一年中的第几周获得Monday
  7. 环境微生物学练习题及答案
  8. linux mipi接口驱动,rp3399之mipi接口ov4689摄像头驱动
  9. 获取计算机用户名 方法
  10. 盛德奇嘉提醒冬季对爱车养护全攻略:保养洗车均要注意