ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ffmpeg命令行官网摘要

2022-03-31 05:31:06  阅读:208  来源: 互联网

标签:specifier ffmpeg stream per 命令行 output 过滤器 input 官网


1.官网命令例子

ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi //修改视频码率  视频质量明显下降

ffmpeg -i input.avi -r 24 output.avi //修改帧率    为啥码率反而增大了???

2. ffmpeg转码流程

 _______              ______________
|       |            |              |
| input |  demuxer   | encoded data |   decoder
| file  | ---------> | packets      | -----+
|_______|            |______________|      |
                                           v
                                       _________
                                      |         |
                                      | decoded |
                                      | frames  |
                                      |_________|
 ________             ______________       |
|        |           |              |      |
| output | <-------- | encoded data | <----+
| file   |   muxer   | packets      |   encoder
|________|           |______________|

ffmpeg调用libavformat读取输入文件,得到编码的数据。然后传递给解码器,解码得到原始数据video:yuv, audio:pcm,然后传递给过滤器然后传递给编码器,然后传递给复用器muxer
3.在编码之前,ffmpeg 可以使用 libavfilter 库中的过滤器处理原始音频和视频帧。几个链式过滤器形成一个过滤器图。 ffmpeg 区分两种类型的过滤器图:简单和复杂。
简单的过滤器:

_________ ______________
|         |                      |              |
| decoded |                      | encoded data |
| frames  |\                   _ | packets      |
|_________| \                  /||______________|
             \   __________   /
  simple     _\||          | /  encoder
  filtergraph   | filtered |/
                | frames   |
                |__________|
使用 per-stream -filter 选项配置简单的过滤器图(分别为视频和音频使用 -vf 和 -af 别名)。一个简单的视频过滤图可以看起来像这样:
 _______        _____________        _______        ________
|       |      |             |      |       |      |        |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______|      |_____________|      |_______|      |________|
请注意,某些过滤器会更改框架属性,但不会更改框架内容。例如。上面示例中的 fps 过滤器会更改帧数,但不会触及帧内容。另一个例子是 setpts 过滤器,它只设置时间戳,否则不改变传递帧
复杂过滤器:
 _________
|         |
| input 0 |\                    __________
|_________| \                  |          |
             \   _________    /| output 0 |
              \ |         |  / |__________|
 _________     \| complex | /
|         |     |         |/
| input 1 |---->| filter  |\
|_________|     |         | \   __________
               /| graph   |  \ |          |
              / |         |   \| output 1 |
 _________   /  |_________|    |__________|
|         | /
| input 2 |/
|_________|
复杂过滤器图使用 -filter_complex 选项进行配置。请注意,此选项是全局的,因为复杂的过滤器图就其性质而言,不能明确地与单个流或文件相关联。
-lavfi 选项等效于 -filter_complex。
复杂过滤器图的一个简单示例是叠加过滤器overlay,它有两个视频输入和一个视频输出,其中一个视频叠加在另一个之上。它的音频对应物是 amix 过滤器。
4.流复制-不能使用过滤器功能
流复制是通过将copy参数提供给 -codec 选项来选择的模式,它使 ffmpeg 省略了对指定流的解码和编码步骤,因此它只进行解复用和复用。
它对于更改容器格式或修改容器级元数据很有用。在这种情况下,上图将简化为
_______ ______________ ________
|       |            |              |          |        |
| input |  demuxer   | encoded data |  muxer   | output |
| file  | ---------> | packets      | -------> | file   |
|_______|            |______________|          |________|

 由于没有解码或编码,所以速度非常快,没有质量损失。但是,由于许多因素,它在某些情况下可能不起作用。应用过滤器显然也是不可能的,因为过滤器适用于未压缩的数据。

5.流选择
5.1 自动流选择
在特定输出文件没有任何映射选项的情况下,ffmpeg 检查输出格式以检查其中可以包含哪种类型的流,即。视频、音频和/或字幕。对于每种可接受的流类型,ffmpeg 将从所有输入中选择一个流(如果可用
5.2 手动流选择
使用 -map 时,该输出文件中仅包含用户映射的流,但下面描述的 filtergraph 输出可能有一个例外。
5.3 复杂的过滤器图

ffmpeg -decoders //打印所有的解码器

ffmpeg -encoders //打印所有的编码器
-formats
-filters 
-bsfs
-protocols 
-devices
-demuxers
-muxers
-codecs
-pix_fmts
-sample_fmts
-layouts
-dispositions
-colors
-loglevel
quiet, -8’什么都不显示;安静。
panic, 0’仅显示可能导致进程崩溃的致命错误,例如断言失败。这目前不用于任何事情。
fatal, 8’只显示致命错误。这些是错误,之后该过程绝对无法继续
error, 16’显示所有错误,包括可以从中恢复的错误。
warning, 24’显示所有警告和错误。将显示与可能不正确或意外事件相关的任何消息。
info, 32’在处理过程中显示信息性消息。这是对警告和错误的补充。这是默认值。
verbose, 40’与 info 相同,但更详细
debug, 48’Show everything, including debugging information.
trace, 56’例如要启用重复的日志输出,添加级别前缀,并将日志级别设置为详细:
-report
-hide_banner所有 FFmpeg 工具通常都会显示版权声明、构建选项和库版本。此选项可用于禁止打印此信息。
-f 强制输入或输出文件格式。通常会自动检测输入文件的格式,并根据输出文件的文件扩展名猜测格式,因此在大多数情况下不需要此选项。
-i input file url
-y(global)   无需询问即可覆盖输出文件
-n(global)  不要覆盖输出文件,如果指定的输出文件已经存在则立即退出
-stream_loop number (input)  设置输入流应循环的次数。循环 0 表示无循环,循环 -1 表示无限循环。
-recast_media (global)  允许强制使用与解复用器检测或指定的媒体类型不同的解码器。对于解码混合为数据流的媒体数据很有用。
-c[:stream_specifiercodec (input/output,per-stream)
-codec[:stream_specifiercodec (input/output,per-stream)
为一个或多个流选择编码器(在输出文件之前使用时)或解码器(在输入文件之前使用时)。 codec 是解码器/编码器的名称或特殊值副本(仅输出),用于指示流不会被重新编码。
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
-t duration (input/output)当用作输入选项时(在 -i 之前),限制从输入文件读取数据的持续时间。当用作输出选项时(在输出 url 之前),在其持续时间达到持续时间后停止写入输出。
-to and -t are mutually exclusive and -t has priority.
-to position (input/output) 停止在位置写入输出或读取输入
-fs limit_size (output) 设置文件大小限制,以字节表示。超出限制后不再写入更多字节块。输出文件的大小略大于请求的文件大小。
-ss position (input/output) 当用作输入选项时(在 -i 之前),在此输入文件中查找位置。请注意,在大多数格式中,不可能精确查找,因此 ffmpeg 将查找位置之前最近的查找点。当转码和 -accurate_seek 启用(默认)时,搜索点和位置之间的这个额外段将被解码并丢弃。在进行流复制或使用 -noaccurate_seek 时,它将被保留。 当用作输出选项时(在输出 url 之前),解码但丢弃输入,直到时间戳到达位置
-sseof position (input)与 -ss 选项类似,但相对于“文件结尾”。也就是说,负值在文件中较早,0 在 EOF 处。
-itsoffset offset (input)设置输入时间偏移
-itsscale scale (input,per-stream) 重新调整输入时间戳。 scale 应该是一个浮点数。
-timestamp date (output) 在容器中设置录制时间戳。
-metadata[:metadata_specifier] key=value (output,per-metadata) 设置元数据键/值对。
可以给出一个可选的 metadata_specifier 来设置流、章节或程序的元数据。有关详细信息,请参阅 -map_metadata 文档。
ffmpeg -i in.avi -metadata title="my title" out.flv-disposition[:stream_specifier] value (output,per-stream) Sets the disposition for a stream.-program [title=title:][program_num=program_num:]st=stream[:st=stream...] (output) 创建具有指定标题 program_num 的程序并将指定的流添加到它
-target type (output)  指定目标文件类型(vcd、svcd、dvd、dv、dv50)。 type 可以以 pal-、ntsc- 或 film- 为前缀以使用相应的标准。然后自动设置所有格式选项(比特率、编解码器、缓冲区大小)。您只需键入:
-dn(input/output) 作为输入选项,阻止文件的所有数据流被过滤或被自动选择或映射以用于任何输出。请参阅 -discard 选项以单独禁用流。
-dframes number (output) 设置要输出的数据帧数。这是 -frames:d 的过时别名,您应该改用它。
-frames[:stream_specifierframecount (output,per-stream) Stop writing to the stream after framecount frames.
-q[:stream_specifierq (output,per-stream)-qscale[:stream_specifierq (output,per-stream)使用固定质量等级 (VBR)。 q/qscale 的含义取决于编解码器。如果 qscale 在没有 stream_specifier 的情况下使用,则它仅适用于视频流,这是为了保持与先前行为的兼容性,并且为 2 个不同的编解码器指定相同的编解码器特定值,即音频和视频通常不是没有 stream_specifier 时的预期用来
-filter[:stream_specifierfiltergraph (output,per-stream) 创建由 filtergraph 指定的 filtergraph 并使用它来过滤流。
-filter_script[:stream_specifierfilename (output,per-stream) 此选项类似于 -filter,唯一的区别是它的参数是要从中读取 filtergraph 描述的文件的名称
-reinit_filter[:stream_specifierinteger (input,per-stream)
-filter_threads nb_threads (global) 定义用于处理过滤器管道的线程数。每个管道都会产生一个线程池,其中有这么多线程可用于并行处理。默认值是可用 CPU 的数量
-pre[:stream_specifierpreset_name (output,per-stream) 指定匹配流的预设。
-stats (global) 打印编码进度/统计信息。默认情况下它处于启用状态,要显式禁用它,您需要指定 -nostats。
-stats_period time (global) 设置更新编码进度/统计信息的周期。默认值为 0.5 秒。
-progress url (global)
-stdin 在标准输入上启用交互。默认情况下打开,除非标准输入用作输入。要显式禁用交互,您需要指定 -nostdin
-debug_ts (global)打印时间戳信息。默认情况下它是关闭的。此选项主要用于测试和调试目的,输出格式可能会从一个版本更改为另一个版本,因此可移植脚本不应使用它。
-attach filename (output) 将附件添加到输出文件。这得到了一些格式的支持,比如 Matroska,例如用于渲染字幕的字体。附件被实现为特定类型的流,因此此选项将向文件添加新流。然后可以以通常的方式在此流上使用每个流选项。使用此选项创建的附件流将在所有其他流之后创建(即使用 -map 或自动映射创建的那些流)。
-dump_attachment[:stream_specifierfilename (input,per-stream)将匹配的附件流提取到名为 filename 的文件中。如果文件名为空,则将使用文件名元数据标记的值。
-vframes number (output) Set the number of video frames to output. This is an obsolete alias for -frames:v, which you should use instead.
-r[:stream_specifierfps (input/output,per-stream) 设置帧速率
-fpsmax[:stream_specifierfps (output,per-stream) 设置最大帧速率
-s[:stream_specifiersize (input/output,per-stream)
设置帧大小
-aspect[:stream_specifieraspect (output,per-stream) 设置 aspect 指定的视频显示宽高比。
-vn (input/output) 作为输入选项,阻止文件的所有视频流被过滤或被自动选择或映射以用于任何输出 作为输出选项,禁用视频录制,即自动选择或映射任何视频流。
-vcodec codec (output)  设置视频编解码器。这是 -codec:v 的别名。
-pass[:stream_specifiern (output,per-stream)
选择通行证编号(1 或 2)。它用于进行两遍视频编码。视频的统计信息在第一次传递中记录到日志文件中(另请参见选项 -passlogfile),在第二次传递中,该日志文件用于以确切请求的比特率生成视频。在第 1 阶段,您可以只停用音频并将输出设置为 null,Windows 和 Unix 的示例:
-passlogfile[:stream_specifierprefix (output,per-stream) 设置两遍日志文件名前缀为prefix,默认文件名前缀为“ffmpeg2pass”。完整的文件名将是 PREFIX-N.log,其中 N 是特定于输出流的数字
-vf filtergraph (output) 创建由 filtergraph 指定的 filtergraph 并使用它来过滤流。
-autorotate 根据文件元数据自动旋转视频。默认启用,使用 -noautorotate 禁用它
-autoscale 根据第一帧的分辨率自动缩放视频。默认启用,使用 -noautoscale 禁用它。禁用自动缩放时,过滤器图的所有输出帧可能不会具有相同的分辨率,并且对于某些编码器/复用器可能不合适。因此,除非您真的知道自己在做什么,否则不建议禁用它。禁用自动缩放需要您自担风险。
5.6






-h, -?, -help, --help 【arg】
long
full
decoder=decoder_name
encoder=encoder_name
demuxer=demuxer_name
muxer=muxer_name
filter=filter_name
bsf=bitstream_filter_name
protocol=protocol_name

ffmpeg -h encoder=mpeg //打印编码器mpeg4

 

标签:specifier,ffmpeg,stream,per,命令行,output,过滤器,input,官网
来源: https://www.cnblogs.com/xpylovely/p/16080049.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有