ffmpeg命令行工具
对于ffmpeg命令行的使用 之前一直都是通过百度(惭愧),一边找 一边用 感觉写起来比较麻烦 就在这记录下 方便以后温习
我们都知道从官网下来的可以直接运行的程序有三个 一个是ffmpeg.exe ffplay.exe ffprobe.exe
关于ffmpeg的官网里边 一般是提供三种(static shared dev)
第一个static是提供了之前说的那三个程序 并且人家把各个dll集成了进去 导致程序的大小比较大
第二个shared 也提供了那三个程序 只不过大小就小得多 因为它还提供了各种dll
第三个就完全适用于开发人员 提供了lib以及头文件
这边我们就直接来说说提供的那三个程序怎么用(直接点是没用的哈 直接在命令行里边用就好)
ffmpeg是用来转码的工具 ffplay是用来播放的 ffprobe是用来查看文件格式的
**************************************************************************************************************************************
首先我们来看下ffmpeg
http://ffmpeg.org/ffmpeg.html 官方说明
我自己输入 ffmpeg -h
首先会显示ffmpeg的版本 以及编译这个用的GCC的版本 以及编译之前configure的选项 之后就是依赖各种库的版本
基本的信息显示完了以后 就会告诉你怎么使用
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
当然我们也可以活用help信息
Getting help:
-h -- print basic options 会打印基本的选项
-h long -- print more options 会打印更多的选项
-h full -- print all options (including all format and codec specific options, very long) 打印所有的选项(包括所有格式和编解码器特定选项,很长)
-h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter 可以打印指定的选项
See man ffmpeg for detailed description of the options. 当然了你要想看得仔细 有关选项的详细描述,请参阅man ffmpeg。
下面我们就来看看各个选项(之后再来一个个试)
Print help / information / capabilities:
-L show license
-h topic show help
-? topic show help
-help topic show help
--help topic show help
-version show version
-buildconf show build configuration
-formats show available formats 显示所支持的格式
-muxers show available muxers 显示所有可用的封装格式
-demuxers show available demuxers 显示所有可用的解封装格式
-devices show available devices 显示支持的设备(这里显示的只是很大的范围 并不会显示具体的设备 比如我输入ffmpeg -devices 只会像是下面输出的那样)
Devices:
D. = Demuxing supported 可以理解为输入设备(我们可以这么理解 解封装是获取流 这个设备其实干的也是获取流的事)
.E = Muxing supported 可以理解为输出设备(同理 输出设备是使用流的 和封装类似)
--
E caca caca (color ASCII art) output device
D dshow DirectShow capture
D lavfi Libavfilter virtual input device
E sdl,sdl2 SDL2 output device
D vfwcap VfW video capture
-codecs show available codecs 显示支持的编解码器(看清楚 是编解码器)
需要注意的就是前面的那些什么 D,E,V,A,S,I,L,S的一类的意思
D..... = Decoding supported 解码
.E.... = Encoding supported 编码
..V... = Video codec 视频
..A... = Audio codec 音频
..S... = Subtitle codec 字幕
...I.. = Intra frame-only codec 帧内编解码器
....L. = Lossy compression 有损
.....S = Lossless compression 无损
-decoders show available decoders 显示支持的解码器
-encoders show available encoders 显示支持的编码器
-bsfs show available bit stream filters 显示可用的比特流过滤器
-protocols show available protocols 显示支持的协议
-filters show available filters 显示可用的过滤器(需要注意下下面的几个的意思 现在我还是没有搞懂什么意思 要去找找代码看看了)
Filters:
T.. = Timeline support
.S. = Slice threading
..C = Command support
A = Audio input/output
V = Video input/output
N = Dynamic number and/or type of input/output
| = Source or sink filter
-pix_fmts show available pixel formats 显示可用像素格式
Pixel formats:
I.... = Supported Input format for conversion 支持转换的输入格式
.O... = Supported Output format for conversion 支持的转换输出格式
..H.. = Hardware accelerated format 硬件加速格式
...P. = Paletted format 调色格式
....B = Bitstream format 位流格式
下面这个是输出的格式
FLAGS NAME (标志名称)NB_COMPONENTS (组成数量 yuv420 就是有三个组成的) BITS_PER_PIXEL(每个像素占得位数)
-layouts show standard channel layouts 显示标准通道布局
-sample_fmts show available audio sample formats 显示可用的音频示例格式
-colors show available color names 显示可用颜色名称
-sources device list sources of the input device 列出输入设备的源(这个 还不清楚怎么用 到时看看官方文档)
-sinks device list sinks of the output device 列出输出设备的接收器
-hwaccels show available HW acceleration methods 显示可用的硬件加速方法
Global options (affect whole program instead of just one file: 全局选项-----影响整个程序,而不仅仅是一个文件:
-loglevel loglevel set logging level 设定log等级 "quiet" "panic" "fatal" "error" "warning" "info" "verbose" "debug" "trace"
补充说明: Flags can also be used alone by adding a ’+’/’-’ prefix to set/reset a single flag without affecting other flags or changing loglevel. When setting both flags and loglevel, a ’+’ separator is expected between the last flags value and before loglevel.
意思就是----还可以单独使用标志,添加‘+’/‘-’前缀来设置/重置单个标志,而不影响其他标志或更改日志级别。当同时设置标志和日志级别时,需要在最后一个标志值之间和日志级别之前使用。
eg:ffmpeg -loglevel repeat+level+verbose -i input output
-v loglevel set logging level 和上面一样的
-report generate a report 生成报表
-max_alloc bytes set maximum size of a single allocated block 设置单个分配块的最大大小
-y overwrite output files 覆盖输出文件
-n never overwrite output files 永远不要覆盖输出文件
-ignore_unknown Ignore unknown stream types 忽略未知流类型
-filter_threads number of non-complex filter threads 非复杂过滤线程数 (后边要加数字)
-filter_complex_threads number of threads for -filter_complex 过滤器复合体的线程数 (后边要加数字)
-stats print progress report during encoding 在编码期间打印进度报告
-max_error_rate ratio of errors (0.0: no errors, 1.0: 100% error maximum error rate 错误率(0:无错误,1:100%错误最大错误率)
-bits_per_raw_sample number set the number of bits per raw sample 设置每个原始样本的位数
-vol volume change audio volume (256=normal) 改变音频音量(256=正常)
Per-file main options: 每个文件的主要选项
-f fmt force format 强迫使用格式‘fmt’
-c codec codec name
-codec codec codec name
-pre preset preset name 预先设定名称
-map_metadata outfile[,metadata]:infile[,metadata] set metadata information of outfile from infile 依据输入文件设置输出文件的元数据信息
-t duration record or transcode "duration" seconds of audio/video 编码或转码音频/视频的“ duration”秒
-to time_stop record or transcode stop time 记录或转码停止时间
-fs limit_size set the limit file size in bytes 设置限制文件大小(以字节为单位)
-ss time_off set the start time offset 设置起始时间偏移量
-sseof time_off set the start time offset relative to EOF 设置相对于eof的起始时间偏移量。
-seek_timestamp enable/disable seeking by timestamp with -ss 使用-ss启用/禁用时间戳查找
-timestamp time set the recording timestamp ('now' to set the current time) 设置录制时间戳(“立即”设置当前时间)
-metadata string=string add metadata 添加元数据
-program title=string:st=number... add program with specified streams 添加具有指定流的程序
-target type specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-") 指定目标文件类型( "vcd", "svcd", "dvd", "dv" or "dv50",可选前缀为 "pal-", "ntsc-" or "film-")
-apad audio pad 音频垫
-frames number set the number of frames to output 将帧数设置为输出
-filter filter_graph set stream filtergraph 设置流滤波器
-filter_script filename read stream filtergraph description from a file 从文件中读取流过滤图描述
-reinit_filter reinit filtergraph on input parameter changes 输入参数变化的 reinit滤波图
-discard discard 丢弃
-disposition disposition 配置
Video options: 视频选项
-vframes number set the number of video frames to output 设置输出视频的帧数
-r rate set frame rate (Hz value, fraction or abbreviation) 设置帧速率(Hz值、分数或缩写)
-s size set frame size (WxH or abbreviation) 设置帧大小(WXH或缩写——Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576)
-aspect aspect set aspect ratio (4:3, 16:9 or 1.3333, 1.7777) 设定高宽比(4:3,16:9或1.3333,1.7777)
-bits_per_raw_sample number set the number of bits per raw sample 设置每个原始样本的位数。
-vn disable video 禁用视频
-vcodec codec force video codec ('copy' to copy stream) 强制视频编解码器(“复制流)
-timecode hh:mm:ss[:;.]ff set initial TimeCode value. 设置初始时间码值
-pass n select the pass number (1 to 3) 选择通行证号码(1到3)
-vf filter_graph set video filters 设置视频滤波器
-ab bitrate audio bitrate (please use -b:a) 音频比特率(请使用-b:a)
-b bitrate video bitrate (please use -b:v) 视频比特率(请使用-b:v)
-dn disable data 禁用数据
Audio options: 音频选项
-aframes number set the number of audio frames to output 设置输出音频流的帧数
-aq quality set audio quality (codec-specific) 设置音频质量(特定编解码器)
-ar rate set audio sampling rate (in Hz) 设置音频采样率(以赫兹为单位)
-ac channels set number of audio channels 设置音频通道数
-an disable audio 禁用音频
-acodec codec force audio codec ('copy' to copy stream) 强制音频编解码器(“复制流)
-vol volume change audio volume (256=normal) 改变音频音量(256=正常)
-af filter_graph set audio filters 设置音频过滤器
Subtitle options: 字幕选项
-s size set frame size (WxH or abbreviation) 设置帧大小(WxH或省略)
-sn disable subtitle 禁用字幕
-scodec codec force subtitle codec ('copy' to copy stream) 强制字幕编解码器(“复制流)
-stag fourcc/tag force subtitle tag/fourcc 强制字幕标签/fourcc码
-fix_sub_duration fix subtitles duration 修正字幕持续时间
-canvas_size size set canvas size (WxH or abbreviation) 设置画布大小(WXH或缩写)
-spre preset set the subtitle options to the indicated preset 将字幕选项设置为指定的预置
好了 我们就开始用实例进行巩固
ffmpeg -i cyq.avi out.avi
这个是最简单的转码命令 转码的内部参数都是取的默认值
我们来看下相关的参数
后来才意识到之前为什么会写错 现在 我们再来重温一遍ffmpeg的书写格式
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
ffmpeg + 全局的选项(可省略)+{输入文件选项 -i 文件} +{输出文件选项 文件}
**************************************************************************************************************************************
ffplay 是用SDL来写的一个播放器
(官方的解释:ffplay是一个非常简单和可移植的媒体播放器,使用ffmpeg库和SDL库。它主要用作各种ffmpeg API的测试床。)
他的功能可谓是很强大 但是就是没有图形化的操作界面 只能通过键盘来操作
这边就分 快捷键以及选项来进行说明
http://ffmpeg.org/ffplay.html 官网的使用说明
我们先来看下ffplay -h
因为显示的东西太多 我这边就来挑选着记录
前边显示的和ffmpeg的差不多
我们先看下他的用法:ffplay [options] input_file
接下来看下主选项:
Main options:
-L show license
-h topic show help
-? topic show help
-help topic show help
--help topic show help
-version show version
-buildconf show build configuration
-formats show available formats
-muxers show available muxers
-demuxers show available demuxers
-devices show available devices
-codecs show available codecs
-decoders show available decoders
-encoders show available encoders
-bsfs show available bit stream filters
-protocols show available protocols
-filters show available filters
-pix_fmts show available pixel formats
-layouts show standard channel layouts
-sample_fmts show available audio sample formats
-colors show available color names
-loglevel loglevel set logging level
-v loglevel set logging level
-report generate a report
-max_alloc bytes set maximum size of a single allocated block
-sources device list sources of the input device 显示输入设备的自动检测源。
-sinks device list sinks of the output device 显示输出设备的自动检测接收器。
-x width force displayed width
-y height force displayed height
-s size set frame size (WxH or abbreviation)
-fs force full screen 强制全屏(和ffmpeg中的fs是不一样的用法)
-an disable audio
-vn disable video
-sn disable subtitling
-ss pos seek to a given position in seconds 以秒为单位寻找给定位置
-t duration play "duration" seconds of audio/video 播放音频/视频的“ duration”秒
-bytes val seek by bytes 0=off 1=on -1=auto 按字节查找 0=OFF 1=ON -1=AUTO
-nodisp disable graphical display 禁用图形显示
-noborder borderless window 无边界窗口
-volume volume set startup volume 0=min 100=max 设置启动 volume0=min 100=max
-f fmt force format
-window_title window title set window title 窗口标题集窗口标题
-af filter_graph set audio filters 设置音频过滤器
-showmode mode select show mode (0 = video, 1 = waves, 2 = RDFT) 选择显示模式(0=视频,1=波形,2=RDFT)
-i input_file read specified file 读取指定文件
-codec decoder_name force decoder
-autorotate automatically rotate video 自动旋转视频
下面是几个高级选项:
Advanced options:
-cpuflags flags force specific cpu flags 强制特定CPU标志
-hide_banner hide_banner do not show program banner 不要显示程序横幅
-ast stream_specifier select desired audio stream 选择所需的音频流
-vst stream_specifier select desired video stream 选择所需视频流
-sst stream_specifier select desired subtitle stream 选择想要的字幕流
-pix_fmt format set pixel format 设置像素格式
-stats show status 显示当前状态
-fast non spec compliant optimizations 不符合规范的优化
-genpts generate pts 生成PTS
-drp let decoder reorder pts 0=off 1=on -1=auto 让解码器重新排序0=OFF 1=ON -1=AUTO
-lowres
-sync type set audio-video sync. type (type=audio/video/ext) 设置音视频同步类型(type=音频/视频/ext)
-autoexit exit at the end 最后退出
-exitonkeydown exit on key down 按下键退出
-exitonmousedown exit on mouse down 鼠标向下退出
-loop loop count set number of times the playback shall be looped 设置回放的次数
-framedrop drop frames when cpu is too slow CPU太慢时丢弃帧
-infbuf don't limit the input buffer size (useful with realtime streams) 不要限制输入缓冲区的大小(对实时流有用)
-vf filter_graph set video filters 设置视频滤波器
-rdftspeed msecs rdft speed rdft速度
-default generic catch all option 捕获通用所有选项
-acodec decoder_name force audio decoder
-scodec decoder_name force subtitle decoder
-vcodec decoder_name force video decoder
接下来就是快捷键了(其实就是在已经在播放的时候 有什么功能)
While playing:
q, ESC quit 退出
f toggle full screen 全屏
p, SPC pause 暂停
m toggle mute 切换静音
9, 0 decrease and increase volume respectively 减少量和增加量
/, * decrease and increase volume respectively 减少量和增加量
a cycle audio channel in the current program 循环当前程序中的音频通道
v cycle video channel 循环视频信道
t cycle subtitle channel in the current program 循环当前程序中的字幕通道
c cycle program 循环程序
w cycle video filters or show modes 循环视频过滤器或显示模式
s activate frame-step mode 激活帧步模式(逐帧显示)
left/right seek backward/forward 10 seconds 先后/向前10S
down/up seek backward/forward 1 minute 先后/向前1minute
page down/page up seek backward/forward 10 minutes 先后/向前10minute
right mouse click seek to percentage in file corresponding to fraction of width 在文件中寻求与宽度分数相对应的百分比
left double-click(双击) toggle full screen 切换全屏
**************************************************************************************************************************************
ffprobe
http://ffmpeg.org/ffprobe.html 官方说明
ffprobe -h 显示的太多 我这边就不全贴上来了 就把主选项写一下
开始 和之前的ffmpeg显示的是一样的
我们来看下用法: ffprobe [OPTIONS] [INPUT_FILE]
下面的就是主选项:
Main options:
-L show license
-h topic show help
-? topic show help
-help topic show help
--help topic show help
-version show version
-buildconf show build configuration
-formats show available formats
-muxers show available muxers
-demuxers show available demuxers
-devices show available devices
-codecs show available codecs
-decoders show available decoders
-encoders show available encoders
-bsfs show available bit stream filters
-protocols show available protocols
-filters show available filters
-pix_fmts show available pixel formats
-layouts show standard channel layouts
-sample_fmts show available audio sample formats
-colors show available color names
-loglevel loglevel set logging level
-v loglevel set logging level
-report generate a report
-max_alloc bytes set maximum size of a single allocated block
-cpuflags flags force specific cpu flags 强制特定CPU标志
-hide_banner hide_banner do not show program banner 不要显示程序横幅
-sources device list sources of the input device
-sinks device list sinks of the output device
-f format force format
-unit show unit of the displayed values 显示所显示值的单位
-prefix use SI prefixes for the displayed values 对显示的值使用si前缀
-byte_binary_prefix use binary prefixes for byte units 字节单位使用二进制前缀
-sexagesimal use sexagesimal format HOURS:MM:SS.MICROSECONDS for time units 使用六十进制格式小时:毫米:单位时间的微秒
-pretty prettify the format of displayed values, make it more human readable 美化显示值的格式,使其更具可读性。
-print_format format set the output printing format (available formats are: default, compact, csv, flat, ini, json, xml) 设置输出打印格式(可用格式有:默认格式、紧凑格式、csv格式、平面格式、ini格式、json格式、xml格式)
-of format alias for -print_format 别名-打印格式
-select_streams stream_specifier select the specified streams 选择指定的流
-sections print sections structure and section information, and exit 打印区段结构和区段信息,并退出
-show_data show packets data 显示数据包数据
-show_data_hash show packets data hash 显示数据包数据散列
-show_error show probing error 显示探测误差
-show_format show format/container info 显示格式/容器信息
-show_frames show frames info 显示帧信息
-show_format_entry entry show a particular entry from the format/container info 显示格式/容器信息中的特定条目
-show_entries entry_list show a set of specified entries 显示一组指定的条目
-show_log show log
-show_packets show packets info 显示数据包信息
-show_programs show programs info 显示程序信息
-show_streams show streams info 显示流信息
-show_chapters show chapters info 展示章节信息
-count_frames count the number of frames per stream 计算每个流的帧数。
-count_packets count the number of packets per stream 计算每个流的数据包数。
-show_program_version show ffprobe version 显示 ffprobe版本
-show_library_versions show library versions 显示库版本
-show_versions show program and library versions 显示程序和库版本
-show_pixel_formats show pixel format descriptions 显示像素格式描述
-show_private_data show private data 显示私有数据
-private same as show_private_data 类似 show_private_data
-bitexact force bitexact output 强制位数输出
-read_intervals read_intervals set read intervals 设定读间隔
-default generic catch all option 通用捕获所有选项
-i input_file read specified file 读取指定文件