分类目录归档:瞎折腾

tinytinyrss安装教程

 

  • 什么是TinyTiny-rss?

TinyTiny-rss简称tt-rss(某种意义上,这名字不太好)是一种rss阅读器(废话),可以构建在自己的虚拟主机上。如果你没有安全性的需要的话,我建议使用azreader

  • 运行需求

 

  1. cd到网站目录,执行git clone https://tt-rss.org/git/tt-rss.git tt-rss
  2. 访问http://你的网站/tt-rss/install/以确认正常
  3. 新建一个表(可以用phpmyadmin)
  4. 然后填入信息。记住usermane和password填的是数据库的。
  5. 如果出现无法写入的错误,将文本框内的内容写入本地的config.php并上传到服务器。
  6. chmod -R 777 tt-rss    #权限改为777

#EOF

[笔记]学习视频压制0514

源:

http://vcb-s.nmm-hd.org/Twilight%20Council/[VCB-Studio][%E6%95%99%E7%A8%8B00]%E8%A7%86%E9%A2%91%E6%A0%BC%E5%BC%8F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/[VCB-Studio][%E6%95%99%E7%A8%8B00]%E8%A7%86%E9%A2%91%E6%A0%BC%E5%BC%8F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.pdf

首先是第九页

空间上的低频与高频:平面,纹理和线条
在视频处理中,空间(spatial)
的概念指的是一帧图片以内。跟时间(temporal)相对;时间的概念就强调帧与帧之间的变换。
于是我们重新来看这张亮度的图:亮度变化较快,变动幅度大的区域,我们称之为高频区域。否则,亮度变化缓慢且不明显的区域,我们称为低频区域。
图中的蓝圈就是一块典型的低频区域。亮度几乎没有变化
绿圈中,亮度呈现跳跃式的突变,通常是一般亮度较高,但是线条部分的一排像素亮度明显低于周围,这种高频区域我们称之为线条。
红圈中,亮度频繁变化,幅度有高有低,这种高频区域我们称为纹理。有时候,线条和纹理统称为线条,平面又叫做非线条。
这里我的理解是
0.这张图片是黑白的
1.低频区域:就像一张全黑或者全白的图片,它在一个区间内的亮度是固定的,这时我们叫它低频区域。
2.线条:就像是我们在上面那张全黑的图片上挖了几个块,这几个块的颜色与原先的图片差别不大,是灰色的。
3.纹理:这时候我们撤销那张图片,然后把它弄成条形码,As we know,一块区域内亮度的变化很大,那么我们就叫他纹理。
4.因为线条和纹理看起来很像,所以我们认为这俩玩意差不多,于是我们叫它们线条。
然后是码率高低:
高码率:像是战斗番,噼里啪啦看的很爽,那么一般细节较多,码率较高。
低码率:像是日常番,看下来亮度都差不多,那么光影变化较少,那么就叫码率较低。
源2:http://vcb-s.nmm-hd.org/Twilight%20Council/[VCB-Studio][%E6%95%99%E7%A8%8B01]%E5%82%BB%E7%93%9C%E5%BC%8F%E8%A7%A3%E7%A0%81%E5%8C%85%28%E5%AE%8C%E7%BE%8E%E8%A7%A3%E7%A0%81%29%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/[VCB-Studio][%E6%95%99%E7%A8%8B01]%E5%82%BB%E7%93%9C%E5%BC%8F%E8%A7%A3%E7%A0%81%E5%8C%85%28%E5%AE%8C%E7%BE%8E%E8%A7%A3%E7%A0%81%29%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B.pdf

各种ffmpeg

笔记一类的东西

http://www.cnblogs.com/shakin/p/3965941.html //大部分是编程方面的详解

http://a280606790.iteye.com/blog/907099 //simple

http://www.xuehuile.com/blog/25bd19f586eb4554a9962844e6f5ee7d.html //simple

http://blog.csdn.net/axdc_qa_team/article/details/4204358 //参数写的很详细

http://diyland.biz/index.php?opt=detail&topic=68&id=15093 //简单的应用

http://blog.sina.com.cn/s/blog_73813e0f01013npj.html //比较有条理

https://segmentfault.com/a/1190000002502526 //经验和见解.

http://blog.csdn.net/leixiaohua1020/article/details/15811977 //代码详解

http://www.jianshu.com/p/7ed3be01228b //见解

 

//update 20160215

https://wanglongqi.github.io/tools/2014/12/23/ffmpegdoc/  //中文文档

https://wanglongqi.github.io/tools/2014/12/26/ffmpegdoc2/  //中文文档2

https://wanglongqi.github.io/tools/2015/01/07/ffmpegdoc3/   //x3

//这几个文档有点旧了……

https://xdsnet.gitbooks.io/other-doc-cn-ffmpeg/content/index.html    //文档,罗嗦

http://davidaq.com/tutorial/2014/11/20/ffmpeg-commands.html  //简单的…..

http://blog.openlg.net/index.php/archives/767   //感觉好专业…

http://www.cnblogs.com/ohmytime/archive/2013/05/12/ffmpeg-build-help.html  //configure翻译

config of x264: https://forer.cn/archives/58

几个软件:

1.mediainfo:主要用于查看视频信息.和ffmpeg的ffprobe作用差不多.

2.ffmpeg:重要的编码器.

3.mpv:linux上一个不错的播放器

 

简单的参数解释:

-preset:指定编码配置;预设值有ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo.从快到慢.//update:2/15:直接指定vcodec为libx265时似乎不支持这个选项

-crf:指定质量;取值范围为0~51.数字越小,视频质量越高.反过来同样的.480p(480×640)一般取20,720p(1280×720(16:9,不建议直接指定视频分辨率),也有的是960×720(4:3))一般取16-18.1080p(1920×1080)需要取更低的参数.

-i:(input)指定视频输入源

-threads n :指定线程数,一般为cpu核数即可.

-y:覆盖与输出文件名同名的文件.

-formats show available formats显示可用的格式
-devices show available devices显示可用的设备
-codecs show available codecs显示可用的编解码器
-decoders show available decoders显示可用的解码器
-encoders show available encoders显示可用的编码器

-target 设置目标文件类型.有了这个设置以后就无需其他关于目标文件的设置了.

-aspect:指定宽高比.推荐的有16:9,4:3等.

以下没必要别乱动:

-vcodec:指定视频编解码方式.这个选项不一定要有,ffmpeg会自动

-acodec:指定音频编解码方式.同样的这个选项不一定要有,ffmpeg会自动

//————————————————————————————–

//注意:新版本中这两个选项被改为

//-codec:v&-codec:a

//调用他们时需要注意的是,应使用的选项为x264,x265这个前端的选项

//————————————————————————————–

-f 强制指定格式.如psp gif image2 image bmp等

-vol:指定输出音量是输入音量的多少.如100就是100%

-ac:声道数,一般为1或2.

-ar:声音的采样率,以HZ为单位(24000就够了)

-ab:音频数据流量,就是那个128,256xx的

-b:视频数据流量;数字随便改,例如64kbit/s,填64就好.也可1500之类的;也可使用动态码率.越小质量越高.

-r:帧率{fps}.默认25.

-title:视频标题.
-s:输出分辨率,480×640,1080×720,1920×1080这几个算是最常用的了-r:帧数,就是一秒内多少张.个人喜欢用29.97.越高越流畅(详见:https://zh.wikipedia.org/wiki/%E5%B8%A7%E7%8E%87.)

 

 

update0215:删除了旧的说明.新的说明直接从https://xdsnet.gitbooks.io/other-doc-cn-ffmpeg/content/ffmpeg-doc-cn-05.html复制

常规选项

这些常规选项也可以用在ffmpeg项目中其他ff*工具,例如ffplayer

  • -L:显示授权协议
  • -h,-?,-help,--help[arg]:显示帮助,一个附加选项可以指定帮助显示的模式,如果没有参数,则是基本选项(没有特别声明)说明被显示,下面是参数定义
    • long:在基本选项说明基础上增加高级选项说明
    • full:输出完整的选项列表,包括编(解)码器,分离器混合器以及滤镜等等的共享和私有选项
    • decoder=decoder_name:输出指定解码器名的详细信息。可以使用-decoders来获取当前支持的所有解码器名
    • encoder=encoder_name:输出指定编码器名的详细信息。可以使用-encoders来获取当前支持的所有编码器名
    • demuxer=demuxer_name:输出指定分离器名详细信息。可以使用-formats来获取当前支持的所有分离器和混合器
    • muxer=muxer_name:输出指定混合器名详细信息。可以使用-formats来获取当前支持的所有分离器和混合器
    • filter=filter_name:输出指定滤镜名的详细信息。可以使用-filters来获取当前支持的所有滤镜
  • -version:显示版本信息
  • -formats:显示所有有效的格式(包括设备)
  • -devices:显示有效设备
  • -codecs:显示所有已支持的编码(libavcodec中的)格式注意编码/codec仅仅是文档中一个用于指示媒体数据流格式的术语。
  • -decoders:显示所有有效解码器
  • -encoders:显示所有有效的编码器
  • -bsfs:显示有效的数据流(bitstream)滤镜
  • -protocols:显示支持的协议
  • -filters:显示libavfilter中的滤镜
  • -pix_fmts:显示有效的像素(pixel)格式
  • -sample_fmts:显示有效的实例格式
  • -layouts:显示信道名字和信道布局
  • -colors:显示注册的颜色名
  • -sources device[,opt1=val1[,opt2=val]...]:显示自动识别的输入设备源。一些设备可能需要提供一些系统指派的源名字而不能自动识别。返回的列表不能认为一定是完整的(即有可能还有设备没有列出来)ffmpeg -sources pulse,server=192.168.0.4
  • -sinks device[,opt1=val1[,opt2=val]...]:显示自动识别的输出设备。一些设备可能需要提供一些系统指派的源名字而不能自动识别。返回的列表不能认为一定是完整的(即有可能还有设备没有列出来)ffmpeg -sinks pulse,server=192.168.0.4
  • -loglevel [repeat+]loglevel 或者 -v [repeat+]loglevel:设置日志层次。如果附加有repeat+则表示从第一条非压缩行到达到最后消息n次之间的行将被忽略。"repeat"也可以一直使用,如果没有现有日志层级设置,则采用默认日志层级。如果有多个日志层级参数被获取,使用"repeat"不改变当前日志层级。日志层级是一个字符串或数值,有以下可能值:
    • quiet,-8,什么都不输出,是无声的
    • panic,0,仅显示造成进程失败的致命错误,它当前不能使用
    • fatal,8仅仅显示致命错误,这些错误使得处理不能继续
    • error,16显示所有的错误,包括可以回收的错误(进程还可以继续的)
    • warning,24显示所有警告和错误,任何错误或者意外事件相关信息均被显示
    • info,32显示过程中的信息,还包括警告和错误,则是默认值
    • verbose,40类似info,但更冗长
    • debug,48显示所有,包括调试信息
    • trace,56默认的日志输出是stderr设备,如果在控制台支持颜色,则错误和警告标记的颜色将被显示处理,默认日志的颜色设置可以由环境变量的AV_LOG_FORCE_NOCOLOR或者NO_COLOR或者环境变量AV_LOG_RORCE_COLOR覆盖。环境变量NO_COLOR不推荐使用,因为其已经不被新版本支持。
  • -report:复制所有命令行和控制台输出到当前目录下名为program-YYYMMDD-HHMMSS.log文件中。这常用于报告bug,所以一般会同时设置-loglevel verbose设置环境变量FFREPORT可以起到相同的效果。如果值是一个以分隔的关键值对,则将影响到报告效果。值中的特殊符号或者分隔符必须被转义(参考ffmepg-utils手册中”引用逃逸”(“Quoting and escaping”)章节)。以下是选项值范围:
    • file:设置报告文件名字,%p被扩展为程序名字,%t是时间码,%%表示一个字符%
    • level:用数字设定日志信息详略程度(参考-longlevel)例如:

      会把日志信息输出到环境变量定义的文件中, 内容包括简要过程信息,警告和错误。
  • -hide_banner:禁止打印输出banner。所有FFmpeg工具使用中常规都会在前面显示一些版权通知、编译选项和库版本等,这个选项可以禁止这部分的显示。
  • cpuflags flags(global):允许设置或者清除cpu标志性和。当前这个选项主要还是测试特性,不要使用,除非你明确需要:ffmpeg -cpuflags -sse+mmx … ffmpeg -cpuflags mmx … ffmpeg -cpuflags 0 …可能的选项参数有:
    • x86
      • mmx
      • mmxext
      • sse
      • sse2
      • sse2slow
      • sse3
      • atom
      • sse4.1
      • sse4.2
      • avx
      • avx2
      • xop
      • fma3
      • fma4
      • 3dnow
      • 3dnowext
      • bmi1
      • bmi2
      • cmov
    • ARM
      • armv5te
      • armv6
      • armv6t2
      • vfp
      • vfpv3
      • neon
      • setend
    • AArch64
      • armv8
      • vfp
      • neon
    • PowerPC
      • altivec
    • Specific Processors
      • pentium2
      • pentium3
      • pentium4
      • k6
      • athlon
      • athlonxp
      • k8
  • -opencl_bench:输出所有效OpenCL设备的基准测试情况。当前选项仅在编译FFmepg中打开了--enable-opencl才有效。当FFmpeg指定了--enable-opencl编译后,这个选项还可以通过全局参数-opencl_options进行设定,参考OpenCL选项,在ffmpeg-utils手册中对于选项的支持情况,这包括在特定的平台设备上支持OpenCL的能力。默认,FFmpeg会运行在首选平台的首选设备上,通过设置全局的OpenCL则可以实现在选定的OpenCL设备上运行,这样就可以在更快的OpenCL设备上运行(平时节点,需要时才选用性能高但耗电的设备)这个选项有助于帮助用户了解信息以进行有效配置。它将在每个设备上运行基准测试,并以性能排序所有设备,用户可以在随后调用ffmpeg时使用-opencl_options配置合适的OpenCL加速特性。

    一般以下面的步骤使用这个参数:

    注意输出中第一行的平台ID(pidx)和设备ID(didx),然后在选择平台和设备用于命令行:

  • opencl_options options(global):设置OpenCL环境选项,这个选项仅仅在FFmpeg编译选项中打开了--enable-opencl才有效。options必须是一个由:分隔的key=value键值对列表。参考OpenCL选项,在ffmpeg-utils手册中对于选项的支持情况

AV选项

这些选项由特定的库提供(如libavformat,libavdevice以及libavcodec)。为了更多的了解AV选项,使用-help进行进一步了解。它们可以指定下面2个分类:

  • generic(常规):这类选项可以用于设置 容器、设备、编码器、解码器等。通用选项对列在AVFormatContext中的容器/设备以及AVCodecContext中的编码有效。
  • private(私有):这类仅对特定的容器、设备或者编码有效。私有选项由相应的 容器/设备/编码 指定(确定)。

例如要在一个默认为ID3v2.4为头的MP3文件中写入ID3v2.3头,需要使用id3v2_version 私有选项来对MP3混流:

所有编码AV选项是针对单独流的,所以必须详细指定。

注意-nooption语法不能被用于AV选项中的布尔值项目,而必须使用-option 0/-option 1

注意以往使用v/a/s命名指定每个流的AV选项语法已经不建议使用,它们很快就会失效移除。

主要选项

  • -f fmt (input/output) :指定输入或者输出文件格式。常规可省略而使用依据扩展名的自动指定,但一些选项需要强制明确设定。
  • -i filename (input):指定输入文件
  • -y (global):默认自动覆盖输出文件,而不再询问确认。
  • -n (global):不覆盖输出文件,如果输出文件已经存在则立即退出
  • c[:stream_specifier] codec (input/output,per-stream)
  • -codec[:stream_specifier] codec (input/output,per-stream) 为特定的文件选择编/解码模式,对于输出文件就是编码器,对于输入或者某个流就是解码器。选项参数中codec是编解码器的名字,或者是copy(仅对输出文件)则意味着流数据直接复制而不再编码。例如: > ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT是使用libx264编码所有的视频流,然后复制所有的音频流。再如除了特殊设置外所有的流都由c匹配指定: > ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT

    这将在输出文件中第2视频流按libx264编码,第138音频流按libvorbis编码,其余都直接复制输出。

  • -t duration (input/output):限制输入/输出的时间。如果是在-i前面,就是限定从输入中读取多少时间的数据;如果是用于限定输出文件,则表示写入多少时间数据后就停止。duration可以是以秒为单位的数值或者 hh:mm:ss[.xxx]格式的时间值。 注意-to-t是互斥的,-t有更高优先级。
  • -to position (output):只写入position时间后就停止,position可以是以秒为单位的数值或者hh:mm:ss[.xxx]格式的时间值。 注意-to-t是互斥的,-t有更高优先级。
  • -fs limit_size (output):设置输出文件大小限制,单位是字节(bytes)。
  • -ss position (input/output):
    • 当在-i前,表示定位输入文件到position指定的位置。注意可能一些格式是不支持精确定位的,所以ffmpeg可能是定位到最接近position(在之前)的可定位点。当有转码发生且-accurate_seek被设置为启用(默认),则实际定位点到position间的数据被解码出来但丢弃掉。如果是复制模式或者-noaccurate_seek被使用,则这之间的数据会被保留。
    • 当用于输出文件时,会解码丢弃position对应时间码前的输入文件数据。
    • position可以是以秒为单位的数值或者 hh:mm:ss[.xxx]格式的时间值
  • -itsoffset offset (input):设置输入文件的时间偏移。offset必须采用时间持续的方式指定,即可以有-号的时间值(以秒为单位的数值或者 hh:mm:ss[.xxx]格式的时间值)。偏移会附加到输入文件的时间码上,意味着所指定的流会以时间码+偏移量作为最终输出时间码。
  • -timestamp date (output):设置在容器中记录时间戳。date必须是一个时间持续描述格式,即(YYYY-MM-DD|YYYYMMDD)[T|t| ]|(HHMMSS[.m…]]]))[Z] 格式。
  • -metadata[:metadata_specifier] key=value (output,per-metadata):指定元数据中的键值对。流或者章的metadata_specifier可能值是可以参考文档中-map_metadata部分了解。简单的覆盖-map_metadata可以通过一个为空的选项实现,例如:

    设置第1声道语言:

  • -taget type (output):指定目标文件类型(vcd,svcd,dvd,dv,dv50),类型还可以前缀一个pal-,ntsc-或者film-来设定更具体的标准。所有的格式选项(码率、编码、缓冲尺寸)都会自动设置,而你仅仅只需要设置目标类型:

    当然,你也可以指定一些额外的选项,只要你知道这些不会与标准冲突,如:

  • -dframes number (output):设定指定number数据帧到输出文件,这是-frames:d的别名。
  • frames[:stream_specifier] framecount (output,per-stream):在指定计数帧后停止写入数据。
  • -q[:stream_specifier] q (output,per-stream)
  • -qscale[:stream_specifier] q (output,per-stream)使用固定的质量品质(VBR)。用于指定q|qscale编码依赖。如果qscale没有跟stream_specifier则只适用于视频。其中值q取值在0.01-255,越小质量越好。
  • -filter[:stream_specifier] filtergraph (output,per-stream):创建一个由filtergraph指定的滤镜,并应用于指定流。filtergraph是应用于流的滤镜链图,它必须有一个输入和输出,而且流的类型需要相同。在滤镜链图中,从in标签指定出输入,从out标签出输出。要了解更多语法,请参考ffmpeg-filters手册。参考-filter_complex选项以了解如何建立多个输入/输出的滤镜链图。
  • -filter_script[:stream_specifier] filename (output,per-stream):这个选项类似于-filter,只是这里的参数是一个文件名,它的内容将被读取用于构建滤镜链图。
  • -pre[:stream_specifier] preset_name (output,per-stream):指定预设名字的流(单个或者多个)。
  • -stats (global):输出编码过程/统计,这是系统默认值,如果你想禁止,则需要采用-nostats
  • -progress url (global):发送友好的处理过程信息到url。处理过程信息是一种键值对(key=value)序列信息,它每秒都输出,或者在一次编码结束时输出。信息中最后的一个键值对表明了当前处理进度。
  • -stdin:允许标准输入作为交互。在默认情况下除非标准输入作为真正的输入。要禁用标准输入交互,则你需要显式的使用-nostdin进行设置。禁用标准输入作为交互作用是有用的,例如FFmpeg是后台进程组,它需要一些相同的从shell开始的调用(ffmpeg ... </dev/null)。
  • -debug_ts (global):打印时间码信息,默认是禁止的。这个选项对于测试或者调试是非常有用的特性,或者用于从一种格式切换到另外的格式(包括特性)的时间成本分析,所以不用于脚本处理中。还可以参考-fdebug ts选项。
  • -attach filename (output):把一个文件附加到输出文件中。这里只有很少文件类型能被支持,例如使用Matroska技术为了渲染字幕的字体文件。附件作为一种特殊的流类型,所以这个选项会添加一个流到文件中,然后你就可以像操作其他流一样使用每种流选项。在应用本选项时,附件流须作为最后一个流(例如根据-map映射流或者自动映射时需要注意)。注意对于Matroska你也可以在元数据标签中进行类型设定: > ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv

(这时要访问到附件流,则就是访问输出文件中的第3个流)

  • -dump_attachment[:stream_specifier] filename (input,per-stream):从输入文件中解出指定的附件流到文件filename: > ffmpeg -dump_attachment:t:0 out.ttf -i INPUT如果想一次性把所有附件都解出来,则 > ffmpeg -dump_attachment:t “” -i INPUT技术说明:附件流是作为编码扩展数据来工作的,所以其他流数据也能展开,而不仅仅是这个附件属性。
  • -noautorotate:禁止自动依据文件元数据旋转视频。

视频(video)选项

  • -vframes number (output):设置输出文件的帧数,是-frames:v的别名。
  • -r[:stream_specifier] fps (input/output,per-stream):设置帧率(一种Hz值,缩写或者分数值)。在作为输入选项时,会忽略文件中存储的时间戳和时间戳而产生的假设恒定帧率fps,即强制按设定帧率处理视频产生(快进/减缓效果)。这不像-framerate选项是用来让一些输入文件格式如image2或者v412(兼容旧版本的FFmpeg)等,要注意这一点区别,而不要造成混淆。作为输出选项时,会复制或者丢弃输入中个别的帧以满足设定达到fps要求的帧率。
  • -s[:stream_specifier] size (input/output,per-stream):设置帧的尺寸。当作为输入选项时,是私有选项video_size的缩写,一些文件没有把帧尺寸进行存储,或者设备对帧尺寸是可以设置的,例如一些采集卡或者raw视频数据。当作为输出选项是,则相当于scale滤镜作用在滤镜链图的最后。请使用scale滤镜插入到开始或者其他地方。

    数据的格式是wxh,即宽度值X高度值,例如320x240,(默认同源尺寸)

  • aspect[:stream_specifier] aspect (output,per-stream):指定视频的纵横比(长宽显示比例)。aspect是一个浮点数字符串或者num:den格式字符串(其值就是num/den),例如”4:3″,”16:9″,”1.3333″以及”1.7777″都是常用参数值。如果还同时使用了-vcodec copy选项,它将只影响容器级的长宽比,而不是存储在编码中的帧纵横比。
  • -vn (output):禁止输出视频
  • -vcodec codec (output):设置视频编码器,这是-codec:v的一个别名。
  • -pass[:stream_specifier] n (output,per-stream):选择当前编码数(1或者2),它通常用于2次视频编码的场景。第一次编码通常把分析统计数据记录到1个日志文件中(参考-passlogfile选项),然后在第二次编码时读取分析以精确要求码率。在第一次编码时通常可以禁止音频,并且把输出文件设置为null,在windows和类unix分别是:ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null
  • -passlogfile[:stream_specifier] prefix (output,per-stream):设置2次编码模式下日志文件存储文件前导,默认是”ffmepg2pass”,则完整的文件名就是”PREFIX-N.log”,其中的N是指定的输出流序号(对多流输出情况)
  • -vf filtergraph (output):创建一个filtergraph的滤镜链并作用在流上。它实为-filter:v的别名,详细参考-filter选项。

高级视频选项

  • -pix_fmt[:stream_specifier] format (input/output,per-stream):设置像素格式。使用-pix_fmts可以显示所有支持的像素格式。如果设置的像素格式不能被选中(启用),则ffmpeg会输出一个警告和并选择这个编码最好(兼容)的像素格式。如果pix_fmt前面前导了一个+字符,ffmepg会在要求的像素格式不被支持时退出,这也意味着滤镜中的自动转换也会被禁止。如果pix_fmt是单独的+,则ffmpeg选择和输入(或者滤镜通道)一样的像素格式作为输出,这时自动转换也会被禁止。
  • -sws_flags flags (input/output):选择SwScaler放缩标志量。
  • -vdt n:丢弃的门限设置。
  • -rc_override[:stream_specifier] override (output,per-stream):在特定时间范围内的间隔覆盖率,override的格式是”int\int\int”。其中前两个数字是开始帧和结束帧,最后一个数字如果为正则是量化模式,如果为负则是品质因素。
  • -ilme:支持交错编码(仅MPEG-2和MPEG-4)。如果你的输入是交错的,而且你想保持交错格式,又想减少质量损失,则选此项。另一种方法是采用-deinterlace对输入流进行分离,但会引入更多的质量损失。
  • -psnr:计算压缩帧的PSNR
  • -vstats:复制视频编码统计分析到日志文件vstats_HHMMSS.log
  • -vstats_file file:复制视频编码统计分析到file所指的日志文件中。
  • -top[:stream_specifier] n (output,per-stream): 指明视频帧数据描述的起点。顶部=1/底部=0/自动=-1(以往CRT电视扫描线模式)
  • -dc precision:Intra_dc_precision值。
  • -vtag fourcc/tag (output):是-tag:v的别名,强制指定视频标签/fourCC (FourCC全称Four-Character Codes,代表四字符代码 (four character code), 它是一个32位的标示符,其实就是typedef unsigned int FOURCC;是一种独立标示视频数据流格式的四字符代码。)
  • -qphist (global):显示QP直方图。
  • -vbsf bitstream_filter:参考-bsf以进一步了解。
  • -force_key_frames[:stream_specifier] time[,time...] (output,per-stream) :(见下)
  • -force_key_frames[:stream_specifier] expr:expr (output,per-stream):强制时间戳位置帧为关键帧,更确切说是从第一帧起每设置时间都是关键帧(即强制关键帧率)。如果参数值是以expr:前导的,则字符串expr为一个表达式用于计算关键帧间隔数。关键帧间隔值必须是一个非零数值。如果一个时间值是”chapters [delta]”则表示文件中从delta章开始的所有章节点计算以秒为单位的时间,并把该时间所指帧强制为关键帧。这个选项常用于确保输出文件中所有章标记点或者其他点所指帧都是关键帧(这样可以方便定位)。例如下面的选项代码就可以使“第5分钟以及章节chapters-0.1开始的所有标记点都成为关键帧”:

    -force_key_frames 0:05:00,chapters-0.1

    其中表达式expr接受如下的内容:

    • n:当前帧序数,从0开始计数
    • n_forced:强制关键帧数
    • prev_forced_n:之前强制关键帧数,如果之前还没有强制关键帧,则其值为NAN
    • prev_forced_t:之前强制关键帧时间,如果之前还没有强制关键帧则为NAN
    • t:当前处理到的帧对应时间。例如要强制每5秒一个关键帧:-force_key_frames expr:gte(t,n_forced*5)

      从13秒后每5秒一个关键帧:

      -force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))

      注意设置太多强制关键帧会损害编码器前瞻算法效率,采用固定GOP选项或采用一些近似设置可能更高效。

  • -copyinkf[:stream_specifier] (output,per-stream):流复制时同时复制非关键帧。
  • -hwaccel[:stream_specifier] hwaccel (input,per-stream):使用硬件加速解码匹配的流。允许的hwaccel值为:
    • none:没有硬件加速(默认值)
    • auto:自动选择硬件加速
    • vda:使用Apple的VDA硬件加速
    • vdpau:使用VDPAU(Video Decode and Presentation API for Unix,类unix下的技术标准)硬件加速
    • dxva2:使用DXVA2 (DirectX Video Acceleration,windows下的技术标准) 硬件加速。这个选项可能并不能起效果(它依赖于硬件设备支持和选择的解码器支持)注意:很多加速方法(设备)现在并不比现代CPU快了,而且额外的ffmpeg需要拷贝解码的帧(从GPU内存到系统内存)完成后续处理(例如写入文件),从而造成进一步的性能损失。所以当前这个选项更多的用于测试。
  • -hwaccel_device:[:stream_specifier] hwaccel_device (input,per-stream):选择一个设备用于硬件解码加速。这个选项必须同时指定了-hwaccel才可能生效。它也依赖于指定的设备对于特定编码的解码加速支持性能。
    • vdpau:对应于VDPAU,在X11(类Unix)显示/屏幕 上的,如果这个选项值没有选中,则必须在DISPLAY环境变量中有设置。
    • dxva2:对应于DXVA2,这个是显示硬件(卡)的设备号,如果没有指明,则采用默认设备(对于多个卡时)。

音频选项

  • -aframes number (output):设置number音频帧输出,是-frames:a的别名
  • -ar[:stream_specifier] freq (input/output,per-stream):设置音频采样率。默认是输出同于输入。对于输入进行设置,仅仅通道是真实的设备或者raw数据分离出并映射的通道才有效。对于输出则可以强制设置音频量化的采用率。
  • -aq q (output):设置音频品质(编码指定为VBR),它是-q:a的别名。
  • -ac[:stream_specifier] channels (input/output,per-stream):设置音频通道数。默认输出会有输入相同的音频通道。对于输入进行设置,仅仅通道是真实的设备或者raw数据分离出并映射的通道才有效。
  • -an (output):禁止输出音频
  • -acode codec (input/output):设置音频解码/编码的编/解码器,是-codec:a的别名
  • -sample_fmt[:stream_specifier] sample_fmt (output,per-stream):设置音频样例格式。使用-sample_fmts可以获取所有支持的样例格式。
  • -af filtergraph (output):对音频使用filtergraph滤镜效果,其是-filter:a的别名,参考-filter选项。

高级音频选项

  • -atag fourcc/tag (output):强制音频标签/fourcc。这个是-tag:a的别名。
  • -absf bitstream_filter:要深入了解参考-bsf
  • -guess_layout_max channels (input,per-stream):如果音频输入通道的布局不确定,则尝试猜测选择一个能包括所有指定通道的布局。例如:通道数是2,则ffmpeg可以认为是2个单声道,或者1个立体声声道而不会认为是6通道或者5.1通道模式。默认值是总是试图猜测一个包含所有通道的布局,用0来禁用。

字幕选项

  • -scodec codec (input/output):设置字幕解码器,是-codec:s的别名。
  • -sn (output):禁止输出字幕
  • -sbsf bitstream_filter:深入了解请参考-bsf

高级字幕选项

  • -fix_sub_duration:修正字幕持续时间。对每个字幕根据接下来的数据包调整字幕流的时间常数以防止相互覆盖(第一个没有完下一个就出来了)。这对很多字幕解码来说是必须的,特别是DVB字幕,因为它在原始数据包中只记录了一个粗略的估计值,最后还以一个空的字幕帧结束。这个选项可能失败,或者出现夸张的持续时间或者合成失败,这是因为数据中有非单调递增的时间戳。注意此选项将导致所有数据延迟输出到字幕解码器,它会增加内存消耗,并引起大量延迟。
  • -canvas_size size:设置字幕渲染区域的尺寸(位置)

高级选项

  • -map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] | [linklabel] (output):设定一个或者多个输入流作为输出流的源。每个输入流是以input_file_id序数标记的输入文件和input_stream_id标记的流序号共同作用指明,它们都以0起始计数。如果设置了sync_file_id:stream_specifier,则把这个输入流作为同步信号参考。命令行中的第一个-map选项指定了输出文件中第一个流的映射规则(编号为0的流,0号流),第二个则指定1号流的,以此类推。如果在流限定符前面有一个-标记则表明创建一个“负”映射,这意味着禁止该流输出,及排除该流。

    一种替代的形式是在复合滤镜中利用[linklabel]来进行映射(参看-filter_complex选项)。其中的linklabel必须是输出滤镜链图中已命名的标签。

    例子:映射第一个输入文件的所有流到输出文件:

    ffmpeg -i INPUT -map 0 output

    又如,如果在输入文件中有两路音频流,则这些流的标签就是”0:0″和”0:1″,你可以使用-map来选择某个输出,例如: > ffmpeg -i INPUT -map 0:1 out.wav

    这将只把输入文件中流标签为”0:1″的音频流单独输出到out.wav中。

    再如,从文件a.mov中选择序号为2的流(流标签0:2),以及从b.mov中选择序号为6的流(流标签1:6),然后共同复制输出到out.mov需要如下写: > ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov

    选择所有的视频和第三个音频流则是: > ffmpeg -i INPUT -map 0:v -map:a:2 OUTPUT

    选择所有的流除了第二音频流外的流进行输出是: > ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT

    选择输出英语音频流: > ffmpeg -i INPUT -map 0:m:language:eng OUTPUT

    注意应用了该选项将自动禁用默认的映射。

  • -ignore_unknown:如果流的类型未知则忽略,而不进行复制。
  • -copy_unknown:复制类型未知的流。
  • -map_channel [input_file_id.stream_specifier.channel_id|-1][:output_file_id.stream_specifier]:从输入文件中指定映射一个通道的音频到输出文件指定流。如果output_file_id.stream_specifier没有设置,则音频通道将映射到输出文件的所有音频流中。使用-1插入到input_file_id.stream_specifier.chnnel_id会映射一个静音通道例如INPUT是一个立体声音频文件,你可以分别选择两个音频通道(下面实际上对于输入是交换了2个音频通道顺序进行输出): > ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT

    如果你想静音第一个通道,而只保留第二通道,则可使用: > ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT

    -map_channel选项指定的顺序在输出文件中输出音频流通道布局,即第一个-map_channel对应输出中第一个音频流通道,第二个对应第二个音频流通道,以此类推(只有一个则是单声道,2个是立体声)。联合使用-ac-map_channel,而且在输入的-map_channel-ac不匹配(例如只有2个-map_channel,又设置了-ac 6)时将使指定音频流通道提高增益。

    你可以详细的对每个输入通道指派输出以分离整个输入文件,例如下面就把有INPUT文件中的两个音频分别输出到两个输出文件中(OUTPUT_CH0 和 OUTPUT_CH1 ): > ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1

    下面的例子则把一个立体声音频的两个音频通道分离输出到两个相互独立的流(相当于两个单声道了)中(但还是放置在同一个输出文件中): > ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg

    注意当前一个输出流仅能与一个输入通道连接,既你不能实现利用-map_channel把多个输入的音频通道整合到不同的流中(从同一个文件或者不同文件)或者是混合它们成为单独的流,例如整合2个单声道形成立体声是不可能的。但是分离一个立体声成为2个独立的单声道是可行的。

    如果你需要类似的应用,你需要使用amerge滤镜,例如你需要整合一个媒体(这里是input.mkv)中的2个单声道成为一个立体声通道(保持视频流不变),你需要采用下面的命令: > ffmpeg -i input.mkv -filter_complex “[0:1] [0:2] amerge” -c:a pcm_s16le -c:v copy output.mkv

  • -map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata):在下一个输出文件中从infile读取输出元数据信息。注意这里的文件索引也是以0开始计数的,而不是文件名。参数metadata_spec_in/out指定的元数据将被复制,一个元数据描述可以有如下的信息块:
    • g:全局元数据,这些元数据将作用于整个文件
    • s[:stream_spec]:每个流的元数据,steam_spec的介绍在流指定章节。如果是描述输入流,则第一个被匹配的流相关内容被复制,如果是输出元数据指定,则所有匹配的流相关信息被复制到该处。
    • c:chapter_index:每个章节的元数据,chapter_index也是以0开始的章节索引。
    • p:program_index:每个节目元数据,program_index是以0开始的节目索引如果元数据指定被省略,则默认是全局的。默认全局元数据会从第一个输入文件每个流每个章节依次复制(流/章节),这种默认映射会因为显式创建了任意的映射而失效。一个负的文件索引就可以禁用默认的自动复制。

      例如从输入文件的第一个流复制一些元数据作为输出的全局元数据 > ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3

      与上相反的操作,例如复制全局元数据给所有的音频流 > ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv

      注意这里简单的0在这里能正常工作是因为全局元数据是默认访问的。

  • -map_chapters input_file_index (output):从输入文件中复制由input_file_index指定的章节的内容到输出。如果没有匹配的章节,则复制第一个输入文件至少一章内容(第一章)。使用负数索引则禁用所有的复制。
  • -benchmark (global):在编码结束后显示基准信息。则包括CPU使用时间和最大内存消耗,最大内存消耗是不一定在所有的系统中被支持,它通常以显示为0表示不支持。
  • -benchmark_all (global):在编码过程中持续显示基准信息,则包括CPU使用时间(音频/视频 的 编/解码)
  • -timelimit duration (global):ffmpeg在编码处理了duration秒后退出。
  • -dump (global):复制每个输入包到标准输出设备
  • -hex (global):复制包时也复制荷载信息
  • -re (input):以指定帧率读取输入。通常用于模拟一个硬件设备,例如在直播输入流(这时是读取一个文件)。不应该在实际设备或者在直播输入中使用(因为这将导致数据包的丢弃)。默认ffmpeg会尽量以最高可能的帧率读取。这个选项可以降低从输入读取的帧率,这常用于实时输出(例如直播流)。
  • -loop_input:循环输入流。当前它仅作用于图片流。这个选项主要用于FFserver自动化测试。这个选项现在过时了,应该使用-loop 1
  • -loop_output number_of_times:重复播放number_of_times次。这是对于GIF类型的动画(0表示持续重复而不停止)。这是一个过时的选项,用-loop替代。
  • -vsync parameter:视频同步方式。为了兼容旧,常被设置为一个数字值。也可以接受字符串来作为描述参数值,其中可能的值是:
    • 0,passthrough:每个帧都通过时间戳来同步(从解复用到混合)。
    • 1,cfr:帧将复制或者降速以精准达到所要求的恒定帧速率。
    • 2,vfr:个别帧通过他们的时间戳或者降速以防止2帧具有相同的时间戳
    • drop:直接丢弃所有的时间戳,而是在混合器中基于设定的帧率产生新的时间戳。
    • -1,auto:根据混合器功能在1或者2中选择,这是默认值。注意时间戳可以通过混合器进一步修改。例如avoid_negative_ts被设置时。利用-map你可以选择一个流的时间戳作为凭据,它可以对任何视频或者音频 不改变或者重新同步持续流到这个凭据。
  • -frame_drop_threshold parameter:丢帧的阀值,它指定后面多少帧内可能有丢帧。在帧率计数时1.0是1帧,默认值是1.1。一个可能的用例是避免在混杂的时间戳或者需要增加精准时间戳的情况下确立丢帧率。
  • -async samples_per_second:音频同步方式。”拉伸/压缩”音频以匹配时间戳。参数是每秒最大可能的音频改变样本。-async 1是一种特殊情况指只有开始时校正,后续不再校正。注意时间戳还可以进一步被混合器修改。例如avoid_negative_ts选项被指定时已不推荐这个选项,而是用aresample音频滤波器代替。
  • -copyts:不处理输入的时间戳,保持它们而不是尝试审核。特别是不会消除启动时间偏移值。注意根据vsync同步选项或者特定的混合器处理流程(例如格式选项avoid_negative_ts被设置)输出时间戳会忽略匹配输入时间戳(即使这个选项被设置)
  • -start_at_zero:当使用-copyts,位移输入时间戳作为开始时间0.这意味着使用该选项,同时又设置了-ss,例如-ss 50则输出中会从50秒开始加入输入文件时间戳。
  • -copytb mode:指定当流复制时如何设置编码时间基准。mode参数是一个整数值,可以有如下可能:
    • 1表示使用分离器时间基准,从分离器中复制时间戳到编码中。复制可变帧率视频流时需要避免非单调递增的时间戳。
    • 0表示使用解码器时间基准,使用解码器中获取的时间戳作为输出编码基准。
    • -1尝试自动选择,只要能产生一个正常的输出,这是默认值。
  • -shortest (output):完成编码时最短输入端。
  • -dts_delta_threshold:时间不连续增量阀值。
  • -muxdelay seconds (input):设置最大 解复用-解码 延迟。参数是秒数值。
  • -maxpreload seconds (input):设置初始的 解复用-解码延迟,参数是秒数值。
  • -streamid output-stream-index:new-value (output):强制把输出文件中序号为output-stream-id的流命名为new-value 的值。这对应于这样的场景:在存在了多输出文件时需要把一个流分配给不同的值。例如设置0号流为33号流,1号流为36号流到一个mpegts格式输出文件中(这相当于对流建立链接/别名):ffmpeg -i infile -streamid 0:33 -streamid 1:36 out.ts
  • -bsf[:stream_specifier] bitstream_filters (output,per-stream):为每个匹配流设置bit流滤镜。bitstream_filters是一个逗号分隔的bit流滤镜列表。可以使用-bsfs来获得当前可用的bit流滤镜。ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264 ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
  • -tag[:stream_specifier codec_tag (input/output,per-stream:为匹配的流设置标签/fourcc。
  • -timecode hh:mm:ssSEDff:指定时间码,这里SEP如果是:则不减少时间码,如果是;或者.则可减少。ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
  • -filter_complex filtergraph (global):定义一个复合滤镜,可以有任意数量的输入/输出。最简单的滤镜链图至少有一个输入和一个输出,且需要相同类型。参考-filter以获取更多信息(更有价值)。filtergraph用来指定一个滤镜链图。关于滤镜链图的语法可以参考ffmpeg-filters相关章节。其中输入链标签必须对应于一个输入流。filtergraph的具体描述可以使用file_index:stream_specifier语法(事实上这同于-map)。如果stream_specifier匹配到了一个多输出流,则第一个被使用。滤镜链图中一个未命名输入将匹配链接到的输入中第一个未使用且类型匹配的流。使用-map来把输出链接到指定位置上。未标记的输出会添加到第一个输出文件。

    注意这个选项参数在用于-lavfi源时不是普通的输入文件。 > ffmpeg -i video.mkv -i image.png -filter_complex ‘[0:v][1:v]overlay[out]’ -map ‘[out]’ out.mkv

    这里[0:v]是第一个输入文件的第一个视频流,它作为滤镜的第一个(主要的)输入,同样,第二个输入文件的第一个视频流作为滤镜的第二个输入。

    假如每个输入文件只有一个视频流,则我们可以省略流选择标签,所以上面的内容在这时等价于:

    ffmpeg -i video.mkv -i image.png -filter_complex ‘overlay[out]’ -map ‘[out]’ out.mkv

    此外,在滤镜是单输出时我们还可以进一步省略输出标签,它会自动添加到输出文件,所以进一步简写为:

    ffmpeg -i video.mkv -i image.png -filter_complex ‘overlay’ out.mkv

    利用lavfi生成5秒的 红color(色块):

    ffmpeg -filter_complex ‘color=c=red’ -t 5 out.mkv

  • -lavfi filtergraph (global):定义一个复合滤镜,至少有一个输入和/或输出,等效于-filter_complex
  • -filter_complex_script filename (global):这个选项类似于-filter_complex,唯一不同就是它的参数是文件名,会从这个文件中读取复合滤镜的定义。
  • -accurate_seek (input):这个选项会启用/禁止输入文件的精确定位(配合-ss),它默认是启用的,即可以精确定位。需要时可以使用-noaccurate_seek来禁用,例如在复制一些流而转码另一些的场景下。
  • -seek_timestamp (input):这个选项配合-ss参数可以在输入文件上启用或者禁止利用时间戳的定位。默认是禁止的,如果启用,则认为-ss选项参数是正式的时间戳,而不是由文件开始计算出来的偏移。这一般用于具有不是从0开始时间戳的文件,例如一些传输流(直播下)。
  • -thread_queue_size size (input):这个选项设置可以从文件或者设备读取的最大排队数据包数量。对于低延迟高速率的直播流,如果不能及时读取,则出现丢包,所以提高这个值可以避免出现大量丢包现象。
  • -override_ffserver (global):对ffserver的输入进行指定。使用这个选项ffmpeg可以把任意输入映射给ffserver并且同时控制很多编码可能。如果没有这个选项,则ffmpeg仅能根据ffserver所要求的数据进行传输。这个选项应用场景是ffserver需要一些特性,但文件/设备不提供,这时可以利用ffmpeg作为中间处理环节控制后输出到ffserver到达所需要求。
  • -sdp_file file (global):输出sdp信息到文件file。它会在至少一个输出不是rtp流时同时输出sdp信息。
  • -discard (input):允许丢弃特定的流或者分离出的流上的部分帧,但不是所有的分离器都支持这个特性。
    • none:不丢帧
    • default:丢弃无效帧
    • noref:丢弃所有非参考帧
    • bidir:丢弃所有双向帧
    • nokey:丢弃所有非关键帧
    • all:丢弃所有帧
  • -xerror (global):在出错时停止并退出

作为一个特殊的例外,你可以把一个位图字幕(bitmap subtitle)流作为输入,它将转换作为同于文件最大尺寸的视频(如果没有视频则是720×576分辨率)。注意这仅仅是一个特殊的例外的临时解决方案,如果在libavfilter中字幕处理方案成熟后这样的处理方案将被移除。

例如需要为一个储存在DVB-T上的MPEG-TS格式硬编码字幕,而且字幕延迟1秒: > ffmpeg -i input.ts -filter_complex \ ‘[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay’ \ -sn -map ‘#0x2dc’ output.mkv

(0x2d0, 0x2dc 以及 0x2ef 是MPEG-TS 的PIDs,分别指向视频、音频和字幕流,一般作为MPEG-TS中的0:0,0:3和0:7是实际流标签)

预设文件

一个预设文件是选项/值对的序列(option=value),每行都是一个选项/值对, 用于指定一系列的选项,而这些一般很难在命令行中指定(限于命令行的一些限制,例如长度限制)。以#开始的行是注释,会被忽略。一般ffmpeg会在目录树中检查presets子目录以获取预设文件。

有两种类型的预设文件:ffpreset 和 avpreset。

ffpreset类型预设文件

采用ffpreset类型预设文件主要包含vpreapresprefpre选项。其中fpre选项的参数可以代替预设的名称作为输入预设文件名,以用于任何一种编码格式。对于vpreaprespre选项参数会指定一个预设定文件用于当前编码格式以替代(作为)同类项的预订选项。

选用预设文件传递vpreaprespre的参数arg有下面一些搜索应用规则:

  • 将在目录$FFMPEG_DATADIR(如果设置了)和$HOME/.ffmpeg目录和配置文件中定义的数据目录(一般是PREFIX/share/ffmpeg),以及ffpresets所在的执行文件目录下ffmpeg搜索对应的预定义文件arg.ffpreset,例如参数是libvpx-1080p,则对应于文件libvpx-1080p.ffpreset
  • 如果没有该文件,则进一步在前述目录下搜索codec_name-arg.ffpreset文件,如果找到即应用。例如选择了视频编码器-vcodec libvpx-vpre 1080p则对应的预设文件名是libvpx-1080p.ffpreset

avpreset类型预设文件

avprest类型预设文件以pre选项引入。他们工作方式类似于ffpreset类型预设文件(即也是选项值对序列),但只对于特定编码器选项,因此一些 选项值 对于不适合的编码器是无效的。根据pre的参数arg查找预设文件基于如下规则:

  • 首先搜索$AVCONV_DATADIR所指目录(如果定义了),其次搜索$HOME/.avconv目录,然后搜索执行文件所在目录(通常是PREFIX/share/ffmpeg),在其下查找arg.avpreset文件。第一个匹配的文件被应用。
  • 如果查找不到,如果还同步还指定了编码(如-vcodec libvpx)再以前面目录顺序,以codec_name-arg.avpreset再次查找文件。例如对于有选项-vcodec libvpx-pre 1080p将搜索libvpx-1080p.avpreset
  • 如果还没有找到,将在当前目录下搜索arg.avpreset文件。

 

补充:滤镜使用指南

http://blog.csdn.net/fireroll/article/details/27992913

目录
1. FFmpeg滤镜文档
2. 示例
2.1 缩放
2.2 视频加速
2.3 滤镜图,链和滤镜关系
2.4 多个输入覆盖同一个2×2 网格
2.5 转义字符
2.6 烧录时间码
2.7 描述命令行参数
2.8 测试源
3. 滤镜列表
4. 其它滤镜示例
5. 开发自己的滤镜

FFmpeg添加了很多滤镜,查看哪些滤镜有效可用命令:
# ./ffmpeg -filters.

1. FFmpeg滤镜文档
更多的信息和每个滤镜的使用示例可查看FFmpeg的滤镜文档:
http://ffmpeg.org/ffmpeg-filters.html

2. 示例
2.1 缩放
将输入的640×480缩小到320×240输出:
# ./ffmpeg -i input -vf scale=iw/2:-1 output

iw  : 是输入的宽度;在本例中,输入宽度为640. 640/2 = 320.
-1  : 通知缩放滤镜在输出时保持原始的宽高比,因此本例中缩放滤镜将选择240.

2.2 视频加速
1. 加速/减慢视频
可以使用 “setpts”(http://ffmpeg.org/ffmpeg.html#asetpts_002c-setpts)滤镜来改变视频速度。

加速视频命令:
# ./ffmpeg -i input.mkv -filter:v “setpts=0.5*PTS” output.mkv

Note : 这个方法在实现你想要的速度时,会采取丢帧策略。
如果想避免丢帧,可以指定输出的帧率比输入的帧率高的办法。
例如,输入的帧率为4, 指定输出的帧率为4x, 即16fps :
# ./ffmpeg -i input.mkv -r 16 -filter:v “setpts=0.125*PTS” -an output.mkv

减慢视频命令:
# ./ffmpeg -i input.mkv -filter:v “setpts=2.0*PTS” output.mkv

2. 加速/减慢音频
可以使用” atempo” 音频滤镜来加速或减慢音频。如双倍速音频命令:
# ./ffmpeg -i input.mkv -filter:a “atempo=2.0” -vn output.mkv

“atempo”滤镜对音频速度调整限制在0.5 到 2.0 之间,(即半速或倍速)。
如果有必要,可以使用多个atempo滤镜来实现,如下面的命令实现四倍速音频:
# ./ffmpeg -i input.mkv -filter:a “atempo=2.0,atempo=2.0” -vn output.mkv

使用更复杂的滤镜图,可以同时加速视频和音频:
# ./ffmpeg -i input.mkv -filter_complex “[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]” -map “[v]” -map “[a]” output.mkv

2.3 滤镜图,链,和滤镜关系
FFmpeg命令行中,跟在 “-vf”之后的就是一个滤镜图。
滤镜图可以包含多个滤镜链,而每个滤镜链又可以包含多个滤镜。

虽然一个完整的滤镜图描述很复杂,但可以简化以避免歧义。
滤镜链使用”;”分隔,滤镜链中滤镜使用”,”分隔;
并且,滤镜链如果没有指定输入或输出,则默认使用前面的滤镜链的输出为输入,并输出给后面的滤镜链做输入。

下面的命令行是相等的:
ffmpeg -i input -vf [in]scale=iw/2:-1[out] output
ffmpeg -i input -vf scale=iw/2:-1 output               # the input and output are implied without ambiguity

对于下面:
ffmpeg -i input -vf [in]yadif=0:0:0[middle];[middle]scale=iw/2:-1[out] output
# 两个链的方式,每个链一个滤镜,链间使用[middle]填充
ffmpeg -i input -vf [in]yadif=0:0:0,scale=iw/2:-1[out] output
# 一个链的方式,链包含两个滤镜,使用默认链接
ffmpeg -i input -vf yadif=0:0:0,scale=iw/2:-1  output  # 输入输出也使用默认链接

2.4. 多个输入覆盖同一个2×2网格
下例中有四个输入,并使用 -filter_complex滤镜链接。
这个例子中四个输入都是 “-f lavfi -i testsrc”, 也可以用别的输入代替。
在滤镜图中,第一个输入被填充到右下角,并设置成高度的两倍。
其它三个输入使用独立的滤镜”hflip, negate,和 edgedetect”。
覆盖视频滤镜被使用多次,后面三个都覆盖到第一个之上。
覆盖滤镜的偏移量在输入上形成一个网格。
# ./ffmpeg -f lavfi -i testsrc -f lavfi -i testsrc -f lavfi -i testsrc -f lavfi -i testsrc
-filter_complex “[0:0]pad=iw*2:ih*2[a];[1:0]negate[b];[2:0]hflip[c];
[3:0]edgedetect[d];[a][b]overlay=w[x];[x][c]overlay=0:h[y];[y][d]overlay=w:h”
-y -c:v ffv1 -t 5 multiple_input_grid.avi

2.5 转义字符
如文档中的描述,滤镜间的”,”分隔符是必须的,但它也会出现在参数中,如下面的”select”滤镜:
# ./ffmpeg -i input -vf select=’eq(pict_type\,PICT_TYPE_I)’ output        # to select only I frames

作为一个选择,在滤镜图中同样可以在双引号中使用空格,这样更方便阅读:
# ./ffmpeg -i input -vf “select=eq(pict_type,PICT_TYPE_I)” output          # to select only I frames
# ./ffmpeg -i input -vf “yadif=0:-1:0, scale=iw/2:-1” output               # deinterlace then resize

2.6 烧录时间码
使用 “drawtext”视频滤镜。

PAL 25 fps non drop frame:
ffmpeg -i in.mp4 -vf “drawtext=fontfile=/usr/share/fonts/truetype/DroidSans.ttf: timecode=’09\:57\:00\:00′: r=25: \
x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000000@1” -an -y out.mp4

NTSC 30 fps drop frame
(change the : to a ; before the frame count)_________________________________________________________
\
ffmpeg -i in.mp4 -vf “drawtext=fontfile=/usr/share/fonts/truetype/DroidSans.ttf: timecode=’09\:57\:00\;00′: r=30: \
x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000000@1″ -an -y out.mp4

2.7 描述命令行参数
构建复杂的滤镜图时,会使命令行看起来一团混乱,如何使滤镜图命令行可管理就变得很有用了。
下面的例子包含三个滤镜,yadif, scale, drawtext的滤镜图的脚本:

#!/bin/bash
# ffmpeg test script

path=”/path/to/file/”

in_file=”in.mp4″
out_file=”out.mp4″

cd $path

filter=”-vf \”yadif=0:-1:0, scale=400:226, drawtext=fontfile=/usr/share/fonts/truetype/DroidSans.ttf: \
text=’tod- %X’:x=(w-text_w)/2:y=H-60 :fontcolor=white :box=1:boxcolor=0x00000000@1\””
codec=”-vcodec libx264  -pix_fmt yuv420p -b:v 700k -r 25 -maxrate 700k -bufsize 5097k”

command_line=”ffmpeg -i $in_file $filter $codec -an $out_file”

echo $command_line
eval $command_line
exit

NOTE: 包含整个滤镜图的双引号需要使用转义符 \”,
eval $command_line变量用于避免转义符丢失。

2.8 测试源
testsrc源滤镜生成一个测试视频源,包含有颜色模式,灰度值和时间戳。它在用于测试目的时很有用。
下面的例子生成一个10秒的输出,30fps,共300帧,帧大小为 1280×720:
# ./ffmpeg -f lavfi -i testsrc=duration=10:size=1280×720:rate=30 output.mpg

使用 smptebars源滤镜的例子:
# ./ffmpeg -f lavfi -i “smptebars=duration=5:size=1280×720:rate=30” output.mp4

ffplay同样能用于查看结果滤镜图:
ffplay -f lavfi -i “testsrc=duration=10:size=1280×720:rate=30”

3. 滤镜列表
滤镜和libavfilter绑定在一起,如 4.3.100(as configured with –enable-gpl).
使用外部库的滤镜并未列在这里,如frei0r.可以查看FFMPEG的滤镜文档。
滤镜列表约定:
T.. = Timeline support
.S. = Slice threading
..C = Commmand support
A = Audio input/output
V = Video input/output
N = Dynamic number and/or type of input/output
| = Source or sink filter

滤镜:
… aconvert         A->A       Convert the input audio to sample_fmt:channel_layout.
T.. adelay           A->A       延迟一个或多个音频通道
… aecho            A->A       给音频添加回音
… aeval            A->A       Filter audio signal according to a specified expression.
T.. afade            A->A       Fade in/out input audio.
… aformat          A->A       Convert the input audio to one of the specified formats.
… ainterleave      N->A       Temporally interleave audio inputs.
… allpass          A->A       Apply a two-pole all-pass filter.
… amerge           N->A       Merge two or more audio streams into a single multi-channel stream.
… amix             N->A       Audio mixing.
… anull            A->A       Pass the source unchanged to the output.
T.. apad             A->A       Pad audio with silence.
… aperms           A->A       Set permissions for the output audio frame.
… aphaser          A->A       Add a phasing effect to the audio.
… aresample        A->A       重采样音频数据
… aselect          A->N       选择音频帧给输出
… asendcmd         A->A       Send commands to filters.
… asetnsamples     A->A       Set the number of samples for each output audio frames.
… asetpts          A->A       Set PTS for the output audio frame.
… asetrate         A->A       Change the sample rate without altering the data.
… asettb           A->A       Set timebase for the audio output link.
… ashowinfo        A->A       Show textual information for each audio frame.
… asplit           A->N       Pass on the audio input to N audio outputs.
… astats           A->A       Show time domain statistics about audio frames.
… astreamsync      AA->AA     Copy two streams of audio data in a configurable order.
..C atempo           A->A       Adjust audio tempo.
… atrim            A->A       Pick one continuous section from the input, drop the rest.
… bandpass         A->A       Apply a two-pole Butterworth band-pass filter.
… bandreject       A->A       Apply a two-pole Butterworth band-reject filter.
… bass             A->A       Boost or cut lower frequencies.
… biquad           A->A       Apply a biquad IIR filter with the given coefficients.
… channelmap       A->A       Remap audio channels.
… channelsplit     A->N       Split audio into per-channel streams.
… compand          A->A       Compress or expand audio dynamic range.
… earwax           A->A       Widen the stereo image.
… ebur128          A->N       EBU R128 scanner.
… equalizer        A->A       Apply two-pole peaking equalization (EQ) filter.
… highpass         A->A       Apply a high-pass filter with 3dB point frequency.
… join             N->A       Join multiple audio streams into multi-channel output.
… lowpass          A->A       Apply a low-pass filter with 3dB point frequency.
… pan              A->A       Remix channels with coefficients (panning).
… replaygain       A->A       ReplayGain scanner.
… silencedetect    A->A       检测静音
… treble           A->A       Boost or cut upper frequencies.
T.C volume           A->A       改变输入音量
… volumedetect     A->A       检测音频音量
… aevalsrc         |->A       Generate an audio signal generated by an expression.
… anullsrc         |->A       Null audio source, return empty audio frames.
… sine             |->A       Generate sine wave audio signal.
… anullsink        A->|       Do absolutely nothing with the input audio.
… alphaextract     V->N       Extract an alpha channel as a grayscale image component.
… alphamerge       VV->V      Copy the luma value of the second input into the alpha channel of the first input.
T.. bbox             V->V       Compute bounding box for each frame.
… blackdetect      V->V       Detect video intervals that are (almost) black.
… blackframe       V->V       检测几乎全黑的帧
TS. blend            VV->V      Blend two video frames into each other.
T.. boxblur          V->V       Blur the input.
T.. colorbalance     V->V       Adjust the color balance.
T.. colorchannelmixer V->V       Adjust colors by mixing color channels.
T.. colormatrix      V->V       Convert color matrix.
… copy             V->V       复制输入视频到输出
… crop             V->V       裁剪输入视频
T.. cropdetect       V->V       自动检测裁剪尺寸
TS. curves           V->V       Adjust components curves.
T.. dctdnoiz         V->V       Denoise frames using 2D DCT.
… decimate         N->V       Decimate frames (post field matching filter).
… dejudder         V->V       Remove judder produced by pullup.
T.. delogo           V->V       去掉输入视频的logo
… deshake          V->V       Stabilize shaky video.
T.. drawbox          V->V       在输入视频上画一个颜色块
T.. drawgrid         V->V       在输入视频上画一个颜色网格
T.. edgedetect       V->V       检测并画边缘
… elbg             V->V       Apply posterize effect, using the ELBG algorithm.
… extractplanes    V->N       Extract planes as grayscale frames.
.S. fade             V->V       Fade in/out input video.
… field            V->V       Extract a field from the input video.
… fieldmatch       N->V       Field matching for inverse telecine.
T.. fieldorder       V->V       Set the field order.
… format           V->V       Convert the input video to one of the specified pixel formats.
… fps              V->V       强制成常量帧率Force constant framerate.
… framepack        VV->V      Generate a frame packed stereoscopic video.
T.. framestep        V->V       每N帧中选择一帧
T.. geq              V->V       Apply generic equation to each pixel.
T.. gradfun          V->V       Debands video quickly using gradients.
TS. haldclut         VV->V      Adjust colors using a Hald CLUT.
.S. hflip            V->V       Horizontally flip the input video.
T.. histeq           V->V       Apply global color histogram equalization.
… histogram        V->V       计算并画直方图
T.. hqdn3d           V->V       Apply a High Quality 3D Denoiser.
T.C hue              V->V       Adjust the hue and saturation of the input video.
… idet             V->V       隔行检测滤镜
T.. il               V->V       去隔行或隔行场
… interlace        V->V       转换逐行视频成隔行视频
… interleave       N->V       Temporally interleave video inputs.
… kerndeint        V->V       Apply kernel deinterlacing to the input.
TS. lut3d            V->V       Adjust colors using a 3D LUT.
T.. lut              V->V       Compute and apply a lookup table to the RGB/YUV input video.
T.. lutrgb           V->V       Compute and apply a lookup table to the RGB input video.
T.. lutyuv           V->V       Compute and apply a lookup table to the YUV input video.
… mcdeint          V->V       Apply motion compensating deinterlacing.
… mergeplanes      N->V       Merge planes.
… mp               V->V       Apply a libmpcodecs filter to the input video.
… mpdecimate       V->V       Remove near-duplicate frames.
T.. negate           V->V       Negate input video.
… noformat         V->V       Force libavfilter not to use any of the specified pixel formats for the input to the next filter.
TS. noise            V->V       Add noise.
… null             V->V       Pass the source unchanged to the output.
T.C overlay          VV->V      Overlay a video source on top of the input.
T.. owdenoise        V->V       Denoise using wavelets.
… pad              V->V       Pad the input video.
… perms            V->V       Set permissions for the output video frame.
T.. perspective      V->V       Correct the perspective of video.
… phase            V->V       Phase shift fields.
… pixdesctest      V->V       Test pixel format definitions.
T.C pp               V->V       Filter video using libpostproc.
… psnr             VV->V      Calculate the PSNR between two video streams.
… pullup           V->V       Pullup from field sequence to frames.
T.. removelogo       V->V       Remove a TV logo based on a mask image.
TSC rotate           V->V       Rotate the input image.
T.. sab              V->V       Apply shape adaptive blur.
… scale            V->V       Scale the input video size and/or convert the image format.
… select           V->N       选择视频帧并传给输出
… sendcmd          V->V       Send commands to filters.
… separatefields   V->V       Split input video frames into fields.
… setdar           V->V       Set the frame display aspect ratio.
… setfield         V->V       Force field for the output video frame.
… setpts           V->V       Set PTS for the output video frame.
… setsar           V->V       Set the pixel sample aspect ratio.
… settb            V->V       Set timebase for the video output link.
… showinfo         V->V       Show textual information for each video frame.
… shuffleplanes    V->V       Shuffle video planes
T.. smartblur        V->V       Blur the input video without impacting the outlines.
… split            V->N       Pass on the input to N video outputs.
T.C spp              V->V       Apply a simple post processing filter.
… stereo3d         V->V       Convert video stereoscopic 3D view.
… super2xsai       V->V       Scale the input by 2x using the Super2xSaI pixel art algorithm.
… swapuv           V->V       Swap U and V components.
… telecine         V->V       Apply a telecine pattern.
… thumbnail        V->V       Select the most representative frame in a given sequence of consecutive frames.
… tile             V->V       Tile several successive frames together.
… tinterlace       V->V       Perform temporal field interlacing.
.S. transpose        V->V       Transpose input video.
… trim             V->V       Pick one continuous section from the input, drop the rest.
T.. unsharp          V->V       Sharpen or blur the input video.
… vflip            V->V       Flip the input video vertically.
T.. vignette         V->V       Make or reverse a vignette effect.
T.. w3fdif           V->V       Apply Martin Weston three field deinterlace.
TS. yadif            V->V       对输入图像去隔行
… cellauto         |->V       Create pattern generated by an elementary cellular automaton.
..C color            |->V       Provide an uniformly colored input.
… haldclutsrc      |->V       Provide an identity Hald CLUT.
… life             |->V       Create life.
… mandelbrot       |->V       Render a Mandelbrot fractal.
… mptestsrc        |->V       Generate various test pattern.
… nullsrc          |->V       Null video source, return unprocessed video frames.
… rgbtestsrc       |->V       Generate RGB test pattern.
… smptebars        |->V       Generate SMPTE color bars.
… smptehdbars      |->V       Generate SMPTE HD color bars.
… testsrc          |->V       Generate test pattern.
… nullsink         V->|       Do absolutely nothing with the input video.
… avectorscope     A->V       Convert input audio to vectorscope video output.
… concat           N->N       Concatenate audio and video streams.
… showspectrum     A->V       Convert input audio to a spectrum video output.
… showwaves        A->V       Convert input audio to a video output.
… amovie           |->N       Read audio from a movie source.
… movie            |->N       Read from a movie source.
… ffbuffersink     V->|       Buffer video frames, and make them available to the end of the filter graph.
… ffabuffersink    A->|       Buffer audio frames, and make them available to the end of the filter graph.
… abuffer          |->A       Buffer audio frames, and make them accessible to the filterchain.
… buffer           |->V       Buffer video frames, and make them accessible to the filterchain.
… abuffersink      A->|       Buffer audio frames, and make them available to the end of the filter graph.
… buffersink       V->|       Buffer video frames, and make them available to the end of the filter graph.
… afifo            A->A       Buffer input frames and send them when they are requested.
… fifo             V->V       Buffer input images and send them when they are requested.

4. 其它滤镜示例
Fancy Filtering Examples (http://trac.ffmpeg.org/wiki/FancyFilteringExamples)
– 各种迷幻效果和怪异滤镜的示例

5. 开发自己的滤镜
See FFmpeg filter HOWTO(http://blog.chinaunix.net/uid-26000296-id-3068068.html)

[学习笔记]python基础


1.多行输入:

”’…….”’

e.g.>>>print(”’112121212

…212121212

”’)

2.转义

把普通字符转义成控制字符,或者将控制字符转义成普通字符.

使用\x来进行转义.后加多个字符如\xzxzxzxzx时,只转义第一个x.

如换行\t,\n

notice:”\\”使用print(‘\\’)

3.与或非:

(不知道有没有c里面那种更便捷的写法)

and运算是与运算,只有所有都为Trueand运算结果才是True

or运算是或运算,只要其中有一个为Trueor运算结果就是True

not运算是非运算,它是一个单目运算符,把True变成FalseFalse变成True:(可以理解成逻辑上的取反)

4.表达式的值:

例如”5>3″,这是一个正确的表达式,所以返回True

notice:”True”的’t要大写’

5.空值

用None来表示

6.常量

可以理解为预先设定好的变量.常用大写字母表示

6.除法

a.浮点除(自创名字233

/

返回的值的类型是浮点数

(question:那么把它赋值给BOOL会发生类型错误吗?)

answer:会发生这样的错误:

 

>>> a=True
>>> a=6/5
File “<stdin>”, line 0

^
SyntaxError: ‘utf8’ codec can’t decode byte 0xc3 in position 2: invalid continuation byte

果然会发生类型错误

b.地板除(说实话我不知道命名的人怎么想的……)

//

这种除法只会返回整形数值(即使实际上除不尽)

c.余数计算

记得在c里面这个经常被作为算那啥用啊

%

返回除后的余数

7.ord()

使用ord()可以将单个字符转化为字符编码

notice:字符要用(‘x’)框住,不能直接输

8.chr()

使用chr()可以将字符编码转化为单个字符

9.str&bytes

bytes比较节约空间,str方便使用.

bytes的数据使用b’xxx’表示

使用len()可以计数

他的.replace(‘原字符’,’要转换成的字符’)可以把一个str的字符串中的某些字符进行替换.

10.encode()

(一般来说)该方法可以将str类型数据(以unicode储存)编码为bytes类型数据(以utf-8储存).

notice:在输入unicode类型字符串时,需要使用u’……’来表示

栗子:

>>’薛定谔’.encode(‘utf-8’)

但是notice:即使是薛定谔,也无法将’薛定谔’转化为ascii编码(但是人家并不在意)

如果强制转换为ascii,会返回以下错误:

 

File “<stdin>”, line 1, in <module>
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-2: ordin
al not in range(128)

总之:

>>'<要转换的东西>’.encode(‘<编码类型>’)

不用打;真是爽

11.decode()

该方法将bytes数据转换为str类型数据

使用方法略,和上面一样(懒得写)

12.代码的编码

请在代码开头插上这两句,pythonforwindows会自动吃掉第一句,不会吐出来.

顺便一提,windows那群傻逼搞了一个东西,他们在文本文件头上写了BOM,因此你必须要确保文本编辑器正在使用UTF-8 without BOM编码;

13.print的格式化输出

栗子:

>>”%s,你欠我%s元钱!” % (“medicine,”666666)

一个愚蠢的方式是,处处使用%s类型,因为py有自动类型转换!

占位符规则与c相同,我可不认为你没上过.

14.数据类型:list(实质上就是一个二维数组)

>>><list名>=[“<成员名>”,”<成员名>”]

成员的类型可以不同,并且一个list可以包含另一个list

栗子:

>>>p=[“xxx”,”yyy”,[“aaa”,”bbb”],”ccc”]#此时使用len返回4,因为套入其中的list被视为p的一个成员

>>>a=[“xzxzx”,”zxzxz”,p]#实际上也等于这样

使用len()可以获得list的成员数量

notice:最后一个成员的编号为len(<name>)-1

notice:当然和c相同,list同样从0开始.

使用<name>[<number>]

来获取成员的数值

不用声明数组,也不用声明类型,这很爽!

a.list的append()方法可以追加成员到末尾.

b.list的insert()方法可以在某编号插入一个成员.

c.要删除成员,可以使用pop方法.如果pop()为空,那么删除该list的最后一个成员.

d.list的sort方法可以令他倒过来

15.数据类型:tuple

它叫做元组,一旦初始化就无法改变.没有方法.

notice:如果要写一个空的元组,应该使用xxx().但是如果要写一个只有一个元素的,应该使用xxx(a, )

16.if

e.g:

if<语句条件>:

<语句>#tab键我这里打不出来

elif<条件判断>:#这个句子可以没有

<语句>

else:

<语句>

简写方式:

只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False

17.input()

该函数可以作为右值.

返回str类型数据

e.g

18.int()

将str类型数值转换为int类型

19.判断示例代码:

 

20.循环:
话说这个没有花括号好不习惯……
第一种:代迭出表的每一个元素
for..(一般是要输出的变量)…in..(被循环的表)..:

notice:记得在需要执行的语句前面打几个空格,否则会出现如下错误:

插曲a.
range(int)
输入一个数字,产生0到这个数字之间的所有数字
插曲b.
list(int)
可以将range的输出值转换为list型值

栗子:range(101)生成0~100的…

第二种:while…..:
循环
……中填写条件
利用缩进标志代码块
参考答案,

# -*- coding: utf-8 -*-
L = [‘Bart’, ‘Lisa’, ‘Adam’]
#请利用循环依次对list中的每个名字打印出Hello, xxx!:
for name in L:
print(“hello,”,name)

#vim在复制出来这方面真难用啊

21.数据结构:dict(字典)

声明:名称 = {项目: 值}

引用:名称[项目]

方法

1.get方法

名称.get(项目)

当该项目不存在时,返回none

OR

名称.get(项目,-1)

当该项目不存在时,返回-1

等价的,用于检测该项目是否为空的方法:

项目 in 名称

如果无则返回flase

2.pop方法

用于删除一个项目

例子:名称.pop(项目)

请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

以下抄的:

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而增加;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象

22.数据结构:set

需要一个list作为输入创建set

其内部是一个无序的结构

会忽略重复对象

xxx={[a,b,c]}

通过xxx.add方法可以添加成员到xxx中,例如:xxx.add(d)

于是会有:

>>>xxx

>>>{a,b,c,d}

由于他在数学上被视为一个集,其可以做交集,并集操作.

例如:xxx & yyy#交集

xxx | yyy #并集

23.调用函数

内置的函数可以直接调用

24.abs以及max

abs()输入一个数,返回一个绝对值

max()输入一组数,逗号隔开,返回其中最大的数.

函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:

e.g

a=abs

此时就可以通过a()的方法来调用abs()

25.函数的定义

使用def name(input):

在缩进中编写函数

而在函数体内部使用return 来返回,可以用return x,y来返回多个值

在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

e.g.x,y=cc(1,2,3)与xx=cc(1,2,3)的cc函数的传出数据是相同的

同时的,在定义时,可以用def xx(x,y)来传入多个参数

也可以用def xx(x,y=123)类似于这样的方式来使用默认参数.默认参数会在参数未指定的情况下来自动代入.

默认参数必须指向类似于None这样的对象(不变对象)

可变对象一般是list var int float这样的变量

noticea:对于像def xx(x,y=123,z=456)这样的参数,我们可以进行类似于xx(1,z=123)这样的调用.

noticeb:必选参数必须放在前面.

26.导入函数

使用

from _file_name(don’t add .py) import _function_ name来导入函数

27.空函数

使用pass来创建一个空函数

28.参数检查

e.g.这里如果不是传入int或者float类型的函数,就会报错,但是这个我也没看懂

和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:

当然,上面复杂的调用可以用简化的写法:

**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra

类似于def xxx(x,y,*,a,b):这样的参数,我们把它叫做命名关键字参数,它使一个函数只接收必要的x y 以及不一定要的a b.

但是记住,传入命名关键字参数时,我们需要这样写:

xxx(1,2,a=3,b=4)

命名关键字关键字参数可以有缺省值,例如def xxx(x,y,*,a=123,b):

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用,除了可变参数无法和命名关键字参数混合。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数/命名关键字参数和关键字参数。

31.递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。<gnu linux x64 py3.4.3测试:最高998次递归>

改造windows的字符界面

感觉失败了

需要的同学请用:http://pan.baidu.com/s/1o6F3lZs

这个是调好的,还加上了MINGW
但是管道之类的功能仍然抽风

 

//——————————————————————————————————————————————

首先是丧心病狂网页列表

XZ:

http://tukaani.org/xz/

http://tukaani.org/xz/xz-5.2.1-windows.7z

Gzip:

http://www.gzip.org/(似乎并没有提供编译好的文件)

 

wget:

http://gnuwin32.sourceforge.net/packages/wget.htm

http://iweb.dl.sourceforge.net/project/gnuwin32/wget/1.11.4-1/wget-1.11.4-1-bin.zip

Bzip2

http://gnuwin32.sourceforge.net/packages/bzip2.htm

http://superb-dca2.dl.sourceforge.net/project/gnuwin32/bzip2/1.0.5/bzip2-1.0.5-bin.zip

Tar:

http://gnuwin32.sourceforge.net/packages/gtar.htm

http://tcpdiag.dl.sourceforge.net/project/gnuwin32/tar/1.13-1/tar-1.13-1-bin.zip

Vim大法:

http://vim.sourceforge.net/download.php#pc

ftp://ftp.vim.org/pub/vim/pc/gvim74.zip

(GUI版本)

ftp://ftp.vim.org/pub/vim/pc/vim74w32.zip

(控制台版本)

Zip:

http://gnuwin32.sourceforge.net/packages/zip.htm

http://skylineservers.dl.sourceforge.net/project/gnuwin32/zip/3.0/zip-3.0-bin.zip

Mawk:

http://gnuwin32.sourceforge.net/packages/mawk.htm

http://iweb.dl.sourceforge.net/project/gnuwin32/mawk/1.3.3-1/mawk-1.3.3-1-bin.zip

M4:

http://gnuwin32.sourceforge.net/packages/m4.htm

http://downloads.sourceforge.net/gnuwin32/m4-1.4.14-1-bin.zip

Make:

http://gnuwin32.sourceforge.net/packages/make.htm

http://tcpdiag.dl.sourceforge.net/project/gnuwin32/make/3.81/make-3.81-bin.zip

最重要的MinGw

http://www.mingw.org/

http://sourceforge.net/projects/mingw/files/

Gawk:

http://gnuwin32.sourceforge.net/packages/gawk.htm

http://iweb.dl.sourceforge.net/project/gnuwin32/gawk/3.1.6-1/gawk-3.1.6-1-bin.zip

info:

http://gnuwin32.sourceforge.net/packages/x86info.htm

http://superb-dca2.dl.sourceforge.net/project/gnuwin32/x86info/1.21/x86info-1.21-bin.zip

man:

http://gnuwin32.sourceforge.net/packages/help2man.htm

http://iweb.dl.sourceforge.net/project/gnuwin32/help2man/1.35.1/help2man-1.35.1-bin.zip

less:

http://gnuwin32.sourceforge.net/packages/less.htm

http://superb-dca2.dl.sourceforge.net/project/gnuwin32/less/394/less-394-bin.zip

calc:

http://gnuwin32.sourceforge.net/packages/calc.htm

http://iweb.dl.sourceforge.net/project/gnuwin32/calc/2.11.10.1/calc-2.11.10.1-bin.zip

 

 

在LFS依赖库检查过程中找不到libgmp.la libmpfr.la libmpc.la的解决方法

章节:https://linux.cn/lfs/LFS-BOOK-7.7-systemd/prologue/hostreqs.html

如果你运行这段命令时得出了下面的结果,那么就是这三个文件丢失了

bennyli@bennyli-fast:~$ cat > library-check.sh << “EOF”

> #!/bin/bash
> for lib in lib{gmp,mpfr,mpc}.la; do
> echo $lib: $(if find /usr/lib* -name $lib|
> grep -q $lib;then :;else echo not;fi) found
> done
> unset lib
> EOF
bennyli@bennyli-fast:~$ bash library-check.sh
libgmp.la: not found
libmpfr.la: not found
libmpc.la: not found


那么我们该如何解决呢?

1.使用apt-get

sudo apt-get install libgmp-dev libgmp10 libgmp3-dev libmpfr-dev libmpfr4 libmpc-dev libmpc3

如果仍然出现开头的情况,请用下面那种方法

2.手工

https://gmplib.org/

http://www.mpfr.org/

http://www.multiprecision.org/index.php?prog=mpc&page=download

我已经放在服务器上了。。。。自己下也行,不过有点慢。

#其实这也挺慢的