前言

致敬师哥雷神,但师哥的FFMPEG参数的这篇文章,里面一些参数在FFMPEG的最新版已经都去掉了
文章链接https://blog.csdn.net/leixiaohua1020/article/details/12751349
同为广院的工科研究生,我写了这篇文章进行补充,针对于FFMEPG 4.2.1 以上版本

FFMPEG的命令行格式

在FFMPEG的官网http://ffmpeg.org/ffmpeg.html给出的命令行格式是这样的

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

ffmpeg [全局指令,可选] {[对输入媒体文件的操作,可选] -i 输入文件的路径} ...{[对输出文件的操作,可选] 输出文件的路径}

实例1 转码

将input.avi转码成output.ts,并设置视频的码率为64 kbps(64 kbit/s)

#实例1
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.ts
ffmpeg -y -i input.avi -b:v 64k -bufsize 64k output.ts
ffmpeg -n -i input.avi -b:v 64k -bufsize 64k output.ts

#扩展1
可以同时编码为多种格式,并定义从输入流到输出流的映射:
在 64 kbits 时将 a.wav 转换为 a.mp2,在 128 kbits 时转换为 b.mp2。"-map: 索引"指定每个输出流使用哪个输入流,按输出流定义的顺序排列。

ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2

参数详解

参数参数含义备注
-y强制覆盖输出文件,即如果 output.ts 文件已经存在的话,不经用户确认就覆盖掉-y为全局指令
-n不覆盖输出文件,即如果 output.ts 文件已经存在的话,直接退出-n为全局指令
-i输入文件的路径
-b:v 64k -bufsize 64k设置输出文件的视频比特率(码率),-bufsize设置码率控制缓冲器大小-b:v设置的码率和-bufsize缓冲器大小可不一致
-b:a设置输出文件的音频码率见上面扩展1命令

实例2 改变视频帧率

强制修改输入文件的帧率为1 fps(仅对原始格式数据有效,如m2v视频数据,yuv原始视频文件,jpeg图片等格式),并把输出文件帧率调整到24fps

#实例2
ffmpeg -r 1 -i input.m2v -r 24 output.avi

#ffmpeg {对输入文件的操作} {对输出文件的操作}

ffmpeg -s 1920x1080 -pix_fmt yuv422p -i src01_1920x1080_422.yuv -s 1280x720 -pix_fmt yuv420p src01_1280x720.yuv

ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi

参数详解

参数参数含义
-s设置视频的分辨率
-r视频帧率(fps)
-fs设置文件格式
-pix_fmt设置像素的格式

实例3

示例3-1:
截取一张352x240尺寸大小的,格式为jpg的图片:
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg

示例3-2:
把视频的前30帧转换成一个Animated Gif :
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif

示例3-3:
在视频的第8.01秒处截取 352*240 的缩略图
ffmpeg -i test2.asf -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg

参数详解

参数参数含义备注
-t设置持续时间
-ssposition 设置起始时间,时间格式为[-][HH:]MM:SS[.m...][-]S+[.m...][s|ms|us]时间实例可以是23.189,55,0.2,200ms,200000us,12:03:45
-b:v bitrate设置视频码率
-b:a bitrate设置音频码率
-r fps设置帧率
-s wxh设置帧大小,格式为WxH
-c:v codec设置视频编码器(作用于输出文件)或者设置视频解码器(作用于输入文件) 等同于-codec:v 和 -vcodec codec
-c:a codec设置音频编/解码器 ,等同-codec:a和acodec codec
-c:s codec设置字幕编/解码器 等同-codec:s和-scodec codec
-ar freq设置音频采样率

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     单独查看复用和解复用,可用驱动
-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
-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
-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 maximum error rate  ratio of errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success.
-bits_per_raw_sample number  set the number of bits per raw sample
-vol volume         change audio volume (256=normal)

文件操作
Per-file main options:
-f fmt              force format
-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
-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
  例子ffmpeg -sseof -10 -i input.mp4 output.mp4    #-10是指负值,负10秒
  该获得一段不知道长度的视频的最后10秒,
  请注意,在stream copy模式下(通过使用-c copy或等效模式),剪切将出现在最近的关键帧上,因此它可能会缩短您确切的所需时间.如果需要更高的准确性,则必须重新编码而不是流复制.
-seek_timestamp     enable/disable seeking by timestamp with -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-")
-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
-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)
-s size             set frame size (WxH or abbreviation)
-aspect aspect      set aspect ratio (4:3, 16:9 or 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)
-vf filter_graph    set video filters
-ab bitrate         audio bitrate (please use -b:a)
-b bitrate          video bitrate (please use -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)
-af filter_graph    set audio filters

字幕相关
Subtitle options:
-s size             set frame size (WxH or abbreviation)
-sn                 disable subtitle
-scodec codec       force subtitle codec ('copy' to copy stream)
-stag fourcc/tag    force subtitle tag/fourcc
-fix_sub_duration   fix subtitles duration
-canvas_size size   set canvas size (WxH or abbreviation)
-spre preset        set the subtitle options to the indicated preset

高级选项
-map

更多参数请查看
FFMPEG官方文档(英文)
http://ffmpeg.org/ffmpeg.html
FFMPEG官方文档(中文)
https://www.jianshu.com/p/da47b00c42ce

参考链接

https://blog.csdn.net/hemingwang0902/article/details/4382205
https://blog.csdn.net/xiaomucgwlmx/article/details/82852987
https://blog.csdn.net/leixiaohua1020/article/details/12751349
https://www.jianshu.com/p/049d03705a81
https://www.jianshu.com/p/124aee284a61

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐