ffmpeg命令行使用
Posted StoneLiu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg命令行使用相关的知识,希望对你有一定的参考价值。
- 要什么要使用命令行呢?
ffmpeg提供的功能几乎都能通过命令行使用,ffmpeg提供了丰富的选项可以对每一个环节进行配置。在写代码之前先用命令行参数验证可行性 - 如何知道具体的选项还有哪些可选的配置呢?
通过ffmpeg -h full 2>/dev/null > ffmpeg.txt
导出所有选项的详细说明,可以在里面找到每个选项的详细说明,也可以直接阅读官方文档 ffmpeg-all
想要知道ffmpeg的常规用法可以通过命令man ffmpeg
或者阅读官方文档 ffmpeg
关于日期格式、时间格式、视频大小缩写、帧率缩写、颜色、音频通道含义等可以通过命令man ffmpeg-utils
或者阅读官方文档 ffmpeg-utils
下载
- MacOS
$ brew install ffmpeg
- Ubuntu
$ sudo apt install ffmpeg
Bash自动补全
Help
我使用的FFmpeg版本如下:
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
built with Apple clang version 12.0.5 (clang-1205.0.22.9)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4_2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-avresample --enable-videotoolbox
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
命令 | 说明 |
---|---|
ffmpeg -L | 显示License |
ffmpeg -version | 显示当前版本 |
ffmpeg help -buildconf | 显示编译此ffmpeg的configuration |
ffmpeg help -formats | 显示支持的文件格式,同时显示muxers和demuxers |
ffmpeg help -muxers | 显示支持的muxers格式 |
ffmpeg help -demuxers | 显示支持的demuxers格式 |
ffmpeg help -devices | 显示支持的设备,包括音视频设备 |
ffmpeg help -codecs | 显示支持的格式,同时显示视频、音频、字幕、帧内编码、有损压缩和无损压缩的解编码支持情况 |
ffmpeg help -decoders | 显示支持的解码器 |
ffmpeg help -encoders | 显示支持的编码器 |
ffmpeg help -bsfs | 显示支持的二进制流过滤器,例如h264_metadata、h264_mp4toannexb、hevc_mp4toannexb等 |
ffmpeg help -protocols | 显示支持的可用的协议,区分Input和Output,例如file、http、hls、rtmp、rtp、pipe、tee等 |
ffmpeg help -filters | 显示支持的可用的过滤器 |
ffmpeg help -pix_fmts | 显示支持的可用的像素格式 |
ffmpeg help -layouts | 显示支持的声道布局,例如mono、stereo、2.1、2.0、3.0、5.0、5.1等 |
ffmpeg help -sample_fmts | 显示支持的音频采样格式,例如u8、s16、s32、flt等 |
ffmpeg help -colors | 显示支持的颜色 |
ffmpeg help -sources device | 列出输入设备的源 |
ffmpeg help -sinks device | 列出输出设备的槽(节点) |
ffmpeg help -hwaccels | 显示可用的硬件加速方法 |
Usage
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
options
全局参数infile options
输入文件参数infile
输入文件outfile options
输出文件参数outfile
输出文件
全局选项
参数 | 说明 |
---|---|
-loglevel loglevel | 设置日志登记,具体用法可以通过man ffmpeg查看,例如ffmpeg -loglevel verbose -i 1080p.mp4 ,可选:quiet panic fatal error warning info verbose debug trace |
-v loglevel | 设置日志登记,具体用法可以通过man ffmpeg查看,例如ffmpeg -v verbose -i 1080p.mp4 ,可选:quiet panic fatal error warning info verbose debug trace |
-report | 生成一个报告,报告的名字是ffmpeg自动生成的,例如ffmpeg -report -i 1080p.mp4 ,想要自定义文件以及日志等级可以使用宏FFREPORT ,例如FFREPORT=file=ffreport.log:level=32 ffmpeg -i 1080p.mp4 |
-max_alloc bytes | 设置通过ffmpeg的malloc函数系列设置在堆上分配块的最大大小限制。嵌入式设备可能会用到这个选项 |
-y | 覆盖输出文件 |
-n | 切勿覆盖输出文件 |
-ignore_unknown | 忽略未知的流类型 |
-filter_threads | 定义用于处理过滤器管道的线程数。每个管道将生成一个线程池,其中包含许多可用于并行处理的线程。默认是可用CPU的数量 |
-filter_complex_threads | 定义用于处理filter_complex图的线程数。类似于filter_threads但仅用于-filter_complex 图形。默认值为可用 CPU 的数量 |
-stats | 编码期间打印进度报告 |
-max_error_rate maximum | 在所有输入中设置解码帧失败的比例,当超过时ffmpeg将返回退出代码69。超过此阈值不会终止处理。值的范围是0到1之间的浮点数。默认值为2/3 |
-bits_per_raw_sample number | 设置每个原始样本的位数 |
-vol volume | 改变音量 ,volume默认值是256,也就是它把音量分为256等分,例如要把音量放大为原来的两倍(256*2):ffmpeg -vol 512 -y -i bugua.mp3 output.mp3 |
输入输出选项
Per-file main options
选项 | 说明 | 例子 |
---|---|---|
-f fmt | force format | 设置输入容器是mp4 ffmpeg -i bugua.mp3 -f mp4 output.m4a |
-c codec | codec name | 设置输入编码格式是ac3 ffmpeg -y -i bugua.mp3 -c ac3 output.m4a |
-codec codec | codec name | 设置输入编码格式是ac3 ffmpeg -y -i bugua.mp3 -codec ac3 output.m4a |
-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 | 设置只录制前50秒 ffmpeg -i bugua.mp3 -t 50 output.mp3 |
-to time_stop | record or transcode stop time | 设置只录制前50秒 ffmpeg -i bugua.mp3 -t 50 output.mp3 |
-fs limit_size | set the limit file size in bytes | 设置输出文件大小限制在0.1MB ffmpeg -y -i bugua.mp3 -fs 0.1MB output.mp3 |
-ss time_off | set the start time offset | 设置从第50秒开始录制 fmpeg -ss 50 -y -i bugua.mp3 output.mp3 |
-sseof time_off | set the start time offset relative to EOF | 设置从倒数第50秒开始录制 ffmpeg -sseof -50 -y -i bugua.mp3 output.mp3 |
-seek_timestamp | 此选项使用-ss 选项在输入文件中启用或禁用按时间戳搜索。默认情况下它是禁用的。如果启用,则-ss 选项的参数被视为实际时间戳,并且不会被文件的开始时间偏移。这仅适用于不从时间戳 0 开始的文件,例如传输流 |
- |
-timestamp time | 在容器中设置录制时间戳 | |
-metadata string=string | 设置修改容器这一层的metadata | 设置标题 ffmpeg -i in.avi -metadata title="my title" out.flv |
-program title=string:st=number... | 添加或者修改program的Metadata | 设置program标题 ffmpeg -y -i 1080p.mp4 -program title="XXXXXX":st=1 -c copy output.mp4 |
-target type | 指定目标文件类型 ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-") | ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg |
-apad | 音频填充(追加) | 在音频文件的最后追加10秒静音 ffmpeg -y -i bugua.mp3 -af "apad=pad_dur=10" output.mp3 |
-frames number | 设置要输出的帧数 | 只写入200帧 ffmpeg -i 1080p.mp4 -frames 200 -c copy output.mp4 |
-filter filter_graph | 设置简单的filter(不对音视频内容进行任何处理的filter) | 把视频帧的PTS设置为原来的0.5倍 ffmpeg -y -i 1080p.mp4 -filter:v "setpts=0.5*PTS" output.mp4 |
-filter_script filename | read stream filtergraph description from a file | - |
-reinit_filter | reinit filtergraph on input parameter changes | - |
-discard | 允许从流中丢弃特定的流或帧。使用值all 会丢弃所有的流,在解复用时从流中选择要丢弃的帧,并非所有解复用器都支持 |
去掉视频中的音频 ffmpeg -y -discard:a all -i 1080p.mp4 -c copy output.mp4 |
-disposition | 设定特定的流作为默认流 | 使第二个音频流成为默认流 ffmpeg -i in.mkv -c copy -dispositionFFmpeg命令行使用参考技术A FFmpeg的命令非常多,经常看着会云里雾里的,个人认为没必要去硬背,只要打开Terminal,输入 ffmpeg -help 命令,这条命令会告述你FFmpeg支持的大部分常用命令以及使用方式。查看这些输出的信息,基本上就会使用很多常用的命令了。你会发现执行 ffmpeg -help 会输出一大坨,那都是些啥玩意呢,不着急,咱们一步一步来慢慢品尝。 第一个就是输出我们安装的FFmpeg的版本号 --prefix 是指FFmpeg的安装路径 --enable 是你安装的FFmpeg支持的三方库 这里可以看出支持 libx264 、 libx265 的编码,以及支持 videotoolbox , videotoolbox 是Mac、iOS上的一个系统自带硬编解码库,FFmpeg也给予了支持,非常的给力。 这是输出FFmpeg里面包含的库,这些都是独立的,是可以单独拎出来使用的,你如果只要编解码,那你就只要在项目中导入 libavcodec 即可 这是告诉我们命令行使用格式 [options] 这个是全局参数 [infile options] 这个是输入文件的参数 infile 这个是输入文件的路径 [outfile options] 这个是输出文件的参数 outfile 这个是输出文件的路径 细心的你肯定发现 infile 、 outfile 的后面有个 ... ,这是在告诉我们输入、输出文件可以分别有一个或者多个。 比如执行 ffmpeg -i test.h264 -i test.aac -c copy test.mp4 这条命令会把一个h264文件和一个aac的音频文件合并并输出一个mp4格式的文件,这其中就有两个输入文件、一个输出文件。 这些是详细的帮助信息 -h long 打印更多的选项参数。 -h full 打印所有的选项参数,包括所有针对于 format 和 codec 的选项,信息特别的长。 man ffmpeg : 查看FFmpeg的帮助手册。 -h type=name 打印指定名称的 decoder/encoder/demuxer/muxer/filter 的所有选项信息。 比如你要查询 scale 滤镜的使用方式,我们就执行 ffmpeg -h filter=scale 输出如下: 这就告诉我们 scale 滤镜有 w 、 h 等参数,我们就这样使用 scale 滤镜, ffmpeg -i input.mp4 -filter_complex "scale=w=iw/2h=ih/2" output.mp4 其中 iw 代表输入视频的宽, ih 代表输入视频的高,这条命令就把输入的视频缩小一倍,这里你可能会有疑问,我都不记得那些滤镜的名字,就无法使用这个去查了,哈哈不要急,还记得上面的帮助命令吗, ffmpeg -filters 可以输出所有的滤镜名字了,如果你觉的输出太多,你不好找的话,你只要记得这个滤镜大概是叫什么名字、包含什么字母,你就借助 grep 指令去输出里面搜索关键字,这样就只会输出你关心的滤镜名了,如 ffmpeg -filters | grep over 以上是帮助命令,如果你忘记了某个编译器、像素格式或者滤镜的名字,你就可以用这些命令去查看。 以上就是全局参数 以上是音视频的公共参数 以上是视频处理相关参数 以上是音频处理相关 以上字幕处理相关参数 以上就是 ffmpeg -help 的输出说明了,下面咱们来看看常用的命令。 -r 10 表示1秒视频会生成10张图片 -f avfoundation 指定采用avfoundation采集数据使用 -i 1:0 表示 指定视频设备索引为1,指定录音设备索引为0。 使用 ffmpeg -list_devices 1 -f avfoundation -i '' 可以打印出设备列表,如下: 因此上述命令中的 -i 1:0 表示采用【Capture screen 0】【Built-in Microphone】即采用屏幕和系统自带的麦克风进行采集。 以上是关于ffmpeg命令行使用的主要内容,如果未能解决你的问题,请参考以下文章 |