x264是一个开源的H.264视频编码器库。是目前最好的有损视频编码器。

基本用法是

x264 [options]-o outfile infile

主页: http://www.videolan.org/developers/x264.html

目录

[隐藏

[编辑]H.264和x264

H.264是ITU(International Telecommunication Unite 国际通信联盟)MPEG(Motion Picture Experts Group 运动图像专家组)联合制定的视频编码标准。在ITU的标准里称为H.264,在MPEG的标准里是MPEG-4的一个组成部分:MPEG-4 Part 10,又叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。

H.264编码能实现非常好的压缩比,有广泛的适用码率(适于从超低码率低延迟的电话会议到高码率的BluRay光盘和HDTV码流),良好的硬件支持(以PSP、iPod和显卡DXVA为代表)和众多强大的厂商作后盾。

[编辑]获取x264

有很多人在编译x264,特别是Win32平台的编译版。

[编辑]命令行界面的x264

我们下载到的x264.exe是一个命令行工具,不需要安装,x264.exe需要在命令行里输入命令,没有GUI。

不可否认有GUI的工具用来很方便,更容易上手,比如用的最广泛的MeGUI,此外还有ripbot、staxrip等GUI。MeGUI可以自动更新编码常用的软件,作为自动下载的工具倒是不错。本教程主要讲解命令行参数,GUI也是调用同一个x264,因此都用对应的选项。

[编辑]命令行的操作

输入“x264 --help”会显示帮助信息。

输入“--longhelp”或“--fullhelp”查看详细选项或所有的选项。

x264.exe的用法是,在命令行里输入形如

>x264 [--参数名 参数值 ...] --output 输出文件 输入文件 

其中方括号里是可选的,“...”是可以输很多个的意思。每个参数名之前要加“--”,空格后跟此参数名的参数值;一定要有“--output”指定输出文件;一定要指定输入文件,但前面没有“--”之类的提示符号。

此外,还有短参数模式。这是为了简化某些常用参数名设计的。一个“-”加一个字母构成一个短参数名,和与之对应的普通参数名效果一样。注意此时这个字母区分大小写。在--fullhelp列表里,有短参数的参数其相应的短参数都列在此参数的前面。

实际命令实例:

>x264 --crf 22 --profile main --tune animation --preset medium --b-pyramid none -o output.mp4 input.avs 

调用x264编码当前目录下的"input.avs"文件,输出"output.264"。

如果文件路径有空格需要加上引号。

在Windows XP和Windows 7中,可以直接把输入文件拖拽到cmd里。

[编辑]64bit的x264

如果用了64位的Windows Vista或Windows 7,就可以用64位的x264。64位的x264大约能比32位的x264快上10%左右。但是用AviSynth输入时,64位的x264只接受64位的AviSynth输入,32位的x264只接受32位的AviSynth。虽然现在有64位的AviSynth和不少常用的滤镜,但是大多数人还是愿意用32位的AviSynth。如何让64位的x264配合32位的AviSynth呢?

方法是用pipe。用命令行工具(如ffmpeg、mencoder或avs2yuv)打开avs,让输出的raw yuv画面直接输入给x264,期间不产生中间文件。这个操作也是在命令行里实现的。

[编辑]用ffmpeg输入

先下载ffmpeg的Windows编译版(参见FFmpeg(Windows版)),可以用static link版本。目前ffmpeg在Windows上只有32位的编译版。和x264一样,ffmpeg放在任何目录里都能运行,假设和x264、要进行编码的input.avs放在一个目录里。

>ffmpeg -i input.avs -f yuv4mpegpipe -an -v 0 - | x264 [options] --demuxer y4m -o output.264 - 

先用ffmpeg打开input.avs,并不指定输出的文件,而是以“-”代替输出的文件。后面写“|”,再写x264,x264的选项和输出文件写法不变,但是输入文件写“-”。

[编辑]用mencoder输入

mencoder有很多有价值的滤镜,用起来也很方便。libx264可以编译进mencoder本身,和单独的x264效果一样。mencoder也可以打开avs文件,pipe给64位的x264。mplayer-ww的命令行版里就带有mencoder。

同样假设mencoder、x264和要编码的的input.avs(1280x720)在一个目录里。

>mencoder input.avs -vf format=yv12 -of rawvideo -ovc raw -nosound -o - | x264 [options] --input-res 1280x720 --input-csp yv12 -o output.264 -  

mencoder部分不同,x264部分和用ffmpeg时一样。

[编辑]用avs2yuv输入

avs2yuv本来是为了给linux上wine来用的,因为AviSynth是运行在Windows的,在linux里必须wine avs2yuv来打开avs,再pipe给x264。当然也可以用来pipe给64位的x264。

同样假设avs2yuv、x264和要编码的的input.avs在一个目录里。

>avs2yuv input.avs - | x264 [options] --demuxer y4m -o output.264 - 

avs2yuv的输出格式默认是yuv4mpeg,x264用y4m格式解码即可从中读取分辨率,所以无须再用--input-res指定分辨率。

以上介绍了3种方法,个人比较倾向于用ffmpeg。2pass的编码也是像上面所讲的方法一样。

[编辑]艺搜参考

H.264与MP4

X264使用指南的更多相关文章

  1. ffmpeg与H264编码指南

    注:本文属于转载译文,原文地址:http://blog.csdn.net/vblittleboy/article/details/8982857. 英文地址:https://trac.ffmpeg.o ...

  2. 黄聪:FFmpeg视频转码技巧之-crf参数(H.264篇)

    昨天,有个朋友给我出了个难题:他手上有一个视频,1080P的,49秒,200多兆:要求在确保质量的情况下把文件压缩到10M以内. 这是什么概念呢?按照文件大小10M来计算,码率是:10 x 8 / 4 ...

  3. FFmpeg X264 H264编码指南[译]

    本文目标:如何创建一个高质量的H.264视频 x264 是一个 H.264 编码器. 通常有2种码率控制(rate control)模式:Constant Rate Factor (CRF) or T ...

  4. Java使用FFmpeg处理视频文件指南

    Java使用FFmpeg处理视频文件指南 本文主要讲述如何使用Java + FFmpeg实现对视频文件的信息提取.码率压缩.分辨率转换等功能: 之前在网上浏览了一大圈Java使用FFmpeg处理音视频 ...

  5. (原)理解码率控制模式(x264,x265,vpx)

    理解码率控制模式(x264,x265,vpx) 原文链接:https://slhck.info/video/2017/03/01/rate-control.html 翻译:lihaiping1603@ ...

  6. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  7. UE4新手之编程指南

    虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...

  8. JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...

  9. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

随机推荐

  1. 集合框架(02)List

    List的类型和特点: ArrayList:底层的数据结构使用的是数组结构.特点:查询的速度很快,但是增删稍慢 线程不同步 LinKedList:底层使用的链表数据结构.特点:增删的速度很快,查询稍慢 ...

  2. stack栈和Queue队列

    1.push将对象插入 System.Collections.Generic.Stack<T> 的顶部. Stack st = new Stack(); //栈是先进后出 st.Push( ...

  3. JAVA常见算法题(十六)

    package com.xiaowu.demo; //猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个: //第二天早上又将剩下的桃子吃掉一半,而且又多吃了一个. //以后 ...

  4. json格式在线解析

    地址:https://www.bejson.com/ { "PN": "123456", "DomainName": ".gxyc ...

  5. 直方图均衡(HE)与局部色调映射(LTM) .

    直方图均衡(Histogram Equalization)是图像处理中一个十分基础的概念,具有调整图像灰度,增强对比度的作用.    限制对比度自适应直方图均衡(Contrast Limited Ad ...

  6. 浅谈C#委托和事件(转载)

    委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本 ...

  7. selenium 的页面对象模型Page Object

    页面对象模型page object model是selenium中的一种脚本设计模式,它能将页面元素封装起来,与业务操作分隔开, 在页面变化改变时,无需去修改业务逻辑代码,提高脚本维护的效率. 1.p ...

  8. Angular 学习笔记——$interpolateProvide

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  9. 经典的排序算法java实现版

    /** * * @author yuzhiping * @version 1.0 * 功能说明:计算机领域经典的算法 * */ public class sortAlgorithm<T exte ...

  10. openlayers对接百度地图新方法

    上次给大家提供的openlayers对接百度地图有些问题,是因为没有进行分辨率设置,也没有进行相应的平面坐标转换,获取getURL的方法还是没有变化的 getURL: function (bounds ...