Chinaunix首页 | 论坛 | 博客
  • 博客访问: 846185
  • 博文数量: 321
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 936
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-23 11:25
文章分类

全部博文(321)

文章存档

2017年(1)

2016年(10)

2015年(61)

2014年(187)

2013年(62)

分类: WINDOWS

2015-05-27 11:00:29

压制MP4(AVC/H264视频编码+AAC/MP4A音频编码)的工具现在有很多而且很方便,常用的有格式工厂,WinAVI Video Converter, MEncoder+前端GUI界面(比如WinMEnc),MeGUI,x264.exe+ffmpeg+neroaaccoder,等等...

试用了格式工厂 v2.7和WinMEnc v0.81,
WinMEnc的缺点:
1. 很久没有更新了,最新的版本是0.81 是09年更新的。要知道X264可是几乎每天都在更新的。

格式工厂的缺点:
1. 压制出来的FPS竟然是动态的...这很让人无语。

(从MediaInfo从查看到的媒体信息-FPS部分)
正常情况下FPS应该是这样的


2. 压制出来的音频码率和预设的码率总是有较大的误差,即使我预设成52kbps,压出来的音频码率还是有100kbps多。


最近有重新研究了一下,发现之前自己在WinMEnc和格式工厂上设定的参数很有问题,源生的x264视频压制程序并不推荐指定码率的压缩方式,因为这样很不科学,x264推荐使用crf(这是对于1-pass压缩。2-pass压缩太费时间,还没时间测试),在crf设置恰当以及正确使用其他参数的时候,1-pass的效果不比2-pass差多少。


X264+FFmpeg+neroaac最原汁原味的X264压制方式

简介:介绍使用原版官方软件,以命令行的方式压制X264,可以更好的了解X264的基础,并且进行轻度的日常压制。

下面是具体方法:
先下载3个软件
: 一般使用8-bit版



这3个软件的说明:x264.exe用来压制x264视频,FFMpeg用来提取源文件的音频和最后的MP4合成,NeroAACEnc用来压制AAC音频。它们都是以命令行方式来工作的。

压制的第一步:压制视频
d:\x264\x264 --crf 24 --preset medium --me umh --tune film -o d:\video\sample_video.264 d:\video\sample.avi
    --crf 24指定了视频压缩期望质量为24,数值越高,面质越低;数值越低,面质越高。不指定的话默认是23。
    --preset medium,指定了压制速度,在相同的crf参数下,压制速度placebo    --tune film,指定了压缩的是真人演出的电影。动画片的话用animation。
    -o d:\video\sample_video.264 指定了压缩视频的输出文件名。x264.exe是通过这里的后缀名来判断文件输出格式的,.264即X264视频raw格式。
    d:\video\sample.avi 指定了源文件。


压制的第二步:压制音频
d:\x264\ffmpeg -i d:\video\sample.avi -vn -f wav - | d:\x264\neroAacEnc -q 0.32 -if - -ignorelength -of d:\video\sample_audio.264
    ffmpeg提取源文件中的音频,并且以wav的格式输出给neroAacEnc
    -i d:\video\sample.avi 指定了音频源文件
    -vn 无画面输出,这里加上这个参数是为了加快转换
    -f wav 转成wav,因为neroAacEnc只能接受wav源
    -q 指定了AAC音频文件质量,编码形式为VBR。数值(范围0-1)越高,编码质量越高。
    -of d:\video\sample_audio.264 指定了音频输出文件。


压制的第三步:将X264视频和AAC音频合成为MP4
d:\x264\ffmpeg -i d:\video\sample_video.264 -i d:\video\sample_audio.264 -vcodec copy -acodec copy d:\video\sample_x264.mp4
    最后ffmpeg将前面2步压制的x264视频和AAC音频合成MP4文件

一些有趣的参数选择
1. X264.exe中crf和码率的关系
对于相同的视频源,crf越低,面质越高,视频码率也越高。
对于620x336的画面
--crf 23,视频码率基本在558kbps
--crf 24,视频码率基本在490kbps
--crf 28,视频码率基本在287kbps
--crf 30,视频码率基本在219kbps
由于源视频品质不高,画面不清晰,导致--crf 28和--crf 23的画质人眼看不出区别。

2. NeroAACEnc的参数选择:
对于音频部分主要需要关心的是-q这个参数,
-q 指定音频质量,以VBR编码,数值越低,质量越低,一般用0.32(建议用0.04的倍数)
简单的测试了-q的压缩效率,对同一个128kbps的音源使用不同的-q参数,得到以下结果对比
    -q 0.28,平均码率为77.1kbps,最高92.4kbps
    -q 0.32,平均码率为101kbps,最高117kbps
    -q 0.52,平均码率为181kbps,最高203kbps
不要在NeroAACEnc.exe中使用-br参数,因为这是以CBR的方式压制音频。

3. 除非明白那些繁琐的参数,否则x264只需要--crf  --preset --tune这三个参数即可。
    crf指定了编码后的画面质量:--crf 20的画面质量要比--crf 24高,但是压制速度基本上相同
    tune指定片源的类型(电影或者动画)
    preset指定了编码后的码率:在相同的crf下,--preset medium要比--preset fast压制慢,但是压制后的码率低,也就是说在同等画质下降低了码率。一般推荐使用--preset medium。如果想进一步了解preset各个参数的压制速度,可以参考这里http://blogs.motokado.com/yoshi/ ... on-of-x264-presets/,或者这个列表直接显示了对比结果



BAT文件制作
CD /D "%~dp0"
d:\x264\x264 --crf 24 --preset medium --me umh --tune film -o "%~dpn1_video.264" "%~1"
d:\x264\ffmpeg -i "%~1" -vn -f wav - | d:\x264\neroAacEnc -q 0.32 -if - -ignorelength -of "%~dpn1_audio.264"
d:\x264\ffmpeg -i "%~dpn1_video.264" -i "%~dpn1_audio.264" -vcodec copy -acodec copy "%~dpn1_x264.mp4"
pause&exit

把源视频文件拖放到BAT文件图标上,就可以开始压制了,注意调整x264, ffmpeg, neroAacEnc的路径。

其他
1. 查看x264完整帮助手册
x264 --fullhelp > x264_help.txt
然后打开这个x264_help.txt文件慢慢查看。

2. 个人用的压制BAT
压制电视剧
CD /D "%~dp0"
d:\x264\x264 --crf 26 --preset medium --me umh --tune film -o "%~dpn1_video.264" "%~1"
d:\x264\ffmpeg -i "%~1" -vn -f wav - | d:\x264\neroAacEnc -q 0.28 -if - -ignorelength -of "%~dpn1_audio.264"
d:\x264\ffmpeg -i "%~dpn1_video.264" -i "%~dpn1_audio.264" -vcodec copy -acodec copy "%~dpn1_x264.mp4"
del "%~dpn1_video.264"
del "%~dpn1_audio.264"
pause&exit

压制DVD源(720x480或者720x576)
CD /D "%~dp0"
d:\x264\x264 --crf 24 --preset medium --me umh --tune film -o "%~dpn1_video.264" "%~1"
d:\x264\ffmpeg -i "%~1" -vn -f wav - | d:\x264\neroAacEnc -q 0.32 -if - -ignorelength -of "%~dpn1_audio.264"
d:\x264\ffmpeg -i "%~dpn1_video.264" -i "%~dpn1_audio.264" -vcodec copy -acodec copy "%~dpn1.mp4"
del "%~dpn1_video.264"
del "%~dpn1_audio.264"
pause&exit

压制HD源(1920×1080或者1280×720)
CD /D "%~dp0"
d:\x264\x264 --crf 22 --preset medium --me umh --tune film -o "%~dpn1_video.264" "%~1"
d:\x264\ffmpeg -i "%~1" -vn -f wav - | d:\x264\neroAacEnc -q 0.52 -if - -ignorelength -of "%~dpn1_audio.264"
d:\x264\ffmpeg -i "%~dpn1_video.264" -i "%~dpn1_audio.264" -vcodec copy -acodec copy "%~dpn1.mp4"
del "%~dpn1_video.264"
del "%~dpn1_audio.264"
pause&exit


参考
X264命令参数Wiki英文版


X264命令参数Wiki中文版
http://wmnmtm.blog.163.com/blog/static/3824571420115673052227/

X264使用介绍 :讲解清晰 ... D&variant=zh-cn


高阶
这篇只是入门教程,让大家对X264有个清晰的认识。更高阶的内容还有Avisynth的使用,如何从不同的源中提取视频和音频,如何将多音轨封装到容器中,等等。对这方面有兴趣的朋友可以自己Google一下。

在压制的时候,需要根据片源适当的调整参数,否则把一个VCD片源的《A计划》压成5G就不好玩了。

感想
X264对于画面细节的处理还是很不错的。这让我想到了RMVB通过雾化来降低码率,这种手法很坑人,以前用RMVB压制黑客帝国,有一幕机器章鱼从破口处一拥而上进入锡安,画面中有N多的章鱼,结果RMVB展现的只是一个个色块。

阅读(3265) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~