ffmpeg常用命令

  • 列出支持多设备(mac平台)
    ffmpeg -f avfoundation -list_devices true -i ""

  • 列出支持的编解码格式
    ffmpeg -encoders
    ffmpeg -decoders

  • 查看filter
    ffmpeg -filters
    ffmpeg -h filter=<filter>

  • 录制屏幕保存为h264格式
    ffmpeg -f avfoundation -i 1 -c:v libx264 -r 15 xx.h264

  • 捕获音频
    ffmpeg -f avfoundation -i :1 -acodec aac xx.aac

  • 同时捕获视频和音频
    ffmpeg -f avfoundation -i 2 -f avfoundation -i :1 -pix_fmt yuv420p -ar 48000 -vcodec libx264 -crf 23 -preset veryslow -x264opts b-adapt=2:bframes=0:aq-strength=1:psy-rd=0.8,0 -vsync vfr -acodec aac -bsf:a aac_adtstoasc xx.mp4
    两个-i分别指定视频和音频,冒号后面的表示音频,数字代表设备编号

  • 封装格式转换
    ffmpeg -i xx.mp4 -acodec copy -vcodec copy xx.flv

  • 抽取视频
    ffmpeg -i xx.mp4 -an -vcodec copy xx.h264

  • 抽取音频
    ffmpeg -i xx.mp4 -acodec copy -vn xx.aac

  • 抽取音频转mp3
    ffmpeg -i xx.mp4 -vn -acodec libmp3lame -ab 200k xx.mp3
    -ab指定输出码率,否则会使用默认码率

  • 提取yuv
    ffmpeg -i xx.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

  • 提取pcm
    ffmpeg -i xx.mp4 -vn -ar 44100 -ac2 -f s16le out.pcm

  • pcm转wav
    ffmpeg -f s16be -ar 48000 -ac 2 -acodec pcm_s16be -i input.raw output.wav

  • 查看每一帧的信息
    ffprob -show_frames

  • 播放yuv
    ffplay -f rawvideo -video_size 1920x1080 -pix_fmt yuv420p out.yuv

  • 播放pcm
    ffplay -f s16le -ac 1 -ar 48000 out.pcm

  • aac转mp3
    ffmpeg -i xx.aac -acodec mp3 xx.mp3

  • 更改视频帧率,码率
    ffmpeg -i xx.mp4 -vf fps=fps=15 -b:v 500K -b:a 128K yy.mp4
    -vf fps=fps=15 设置帧率
    -b:v 设置视频比特率
    -b:a 设置音频比特率

  • 视频旋转
    ffmpeg -i in.mp4 -metadata:s:v rotate="90" -codec copy out.mp4

  • 修改分辨率
    ffmpeg -i in.mp4 -strict -2 -vf scale=-1:480 out.mp4
    -1表示保持比例

  • 剪切视频
    ffmpeg -ss 00:00:00 -t 00:00:30 -i xx.mp4 yy.mp4
    -ss 指定从什么时间开始
    -t 指定需要截取多长时间
    剪切时间可能不精确,和关键帧有关,精确剪切将-i参数放在-ss之前即可,或者
    ffmpeg -y -ss start -t duration -accurate_seek -i input.mp4 -codec copy -avoid_negative_ts 1 output.mp4

  • 视频倍速播放
    ffmpeg -i input.mp4 -r 120 -filter:v "setpts=0.25*PTS" output.mp4
    -r指定输出帧率,避免丢帧

  • 视频慢速播放
    ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" output.mp4

  • 音频倍速播放与慢速播放
    ffmpeg -i input.mp4 -filter:"atempo = 2.0" -vn output.mp4
    atempo filter 配置区间在0.5和2.0之间,如果需要更高倍,可以使用多个 atempo filter 串在一起来实现,下面是实现4倍的参考
    ffmpeg -i input.mp4 -filter:"atempo=2.0,atempo=2.0" -vn output.mp4

  • 音视频同时倍速播放
    ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4

  • 视频合并
    ffmpeg -f concat -i list.txt -c copy out.mp4
    list.txt为需要合并到视频文件列表,内容格式
    file ./split1.mp4
    file ./split2.mp4

  • 推流
    ffmpeg -re -stream_loop -1 -i xx.mp4 -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv rtmp://10.1.101.16/live
    -stream_loop 指定循环次数,-1为无限循环

  • rtmp数据保存文件
    ffmpeg -i rtmp://server/live/streamName -c copy out.flv

  • 左右翻转视频
    ffmpeg -i in.avi -vf "vflip" out.avi

  • 上下翻转视频
    ffmpeg -i in.avi -vf "hflip" out.avi

  • 插入sei
    ffmpeg -i xx.h264 -c:v copy -bsf:v h264_metadata=sei_user_data='086f3693-b7b3-4f2c-9653-21492feee5b8+hello' xx.sei.h264

  • 添加图片水印
    左下角
    ffmpeg -i input.mp4 -i logo.png -filter_complex 'overlay=x=10:y=main_h-overlay_h-10' output.mp4

    main_w:视频宽度
    overlay_w: 要添加的图片水印宽度
    main_h : 视频高度
    overlay_h:要添加的图片水印宽度
    视频左上角的坐标为0:0,overlay参数指定的图片左上角在视频中的坐标位置

  • 播放纯音频减少延时
    ffplay -i rtmp://10.1.101.12:1936/live/666 -analyzeduration 1000000
    analyzeduration单位是微妙

  • 生成静音数据
    ffmpeg -f lavfi -t 10 -i anullsrc test.aac
    设置参数anullsrc=r=48000:cl=mono
    r: sample_rate
    cl: channel_layout

主要参数

下表中:

  1. <>内的参数表示由用户具体指定;[]内的表示是可选参数,可以指定也可以省略。
  2. 括号内的i表示该参数用于输入流,o表示用于输出流,i/o表示均可,global表示全局参数。
  3. 关键字duration, positionoffset满足:[-][HH:]MM:SS[.m...]这种时间戳格式。或者以秒为单位的SS[.m...]格式。

常用的如下:

  • -b[:stream_specifier] (o):输出比特率
  • -f <fmt> (i/o):指定 fmt 作为输入或输出的视频格式。一般会根据文件扩展名自动选择,但有时需要手动指定
  • -i <filename> (i):指定 filename 作为源文件
  • -y (global):文件存在时直接覆盖。
  • -n (global):文件存在时不覆盖并立即退出。
  • -bsf[:stream_specifier] <bitstream_filters> (o):设置比特流滤镜。bitstream_filters 是一个逗号分隔的滤镜列表。
  • -stream_loop <num> (i):指定输入流的循环次数。0 表示不循环,-1 表示无限循环。
  • -c[:stream_specifier] <codec> (i/o):-c可写为-codec。选择一个 codec ,即编码器(输出时)或一个解码器(输入时),参与到 stream_specifier 指定的一个或多个流的编码/解码中。在输出时, 可以被指定为 copy,表示复制数据流。
  • -t <duration> (i/o):(在参数 -i 之前指定)工作持续 duration 时长。一般用于指定剪辑数据流的范围。 它与 -to 参数相互冲突,但本参数优先。
  • -to <position> (o):到 position 位置后,终止输出。与 -t 参数冲突,本参数优先级低。
  • -fs <limit_size> (o):输出文件大小达到 limit_size 后停止输出,单位是 byte.
  • -ss <position> (i/o):(在参数 -i 之前指定)从 position 指定的位置开始工作。注意:大多数情形下,工作起始位置是不精确的。ffmpeg会找到其前部的一个点作为真正的起始,并在结束工作后将该点与用户指定点之间的内容抛弃。然而,如果你使用了 copy 参数,这部分内容却会被保留。
  • -sseof <position> (i/o):类似-ss参数,只不过是从数据流末端向前寻找 position。此时0表示数据流末。
  • -itsoffset <offset> (i):指定输入流以原时间戳加上offset作为其输入时间戳。
  • -metadata[:metadata_specifier] key=value (o):以键值对的形式设置元数据。
  • -frames[:stream_specifier] <num> (o):在输出num帧后停止写入。
  • -qscale[:stream_specifier] q (o):使用固定质量(VBR)。
  • stats (global):输出编码过程,是系统默认值。可以使用 -nostats 关闭。
  • -attach <filename> (o):将 filename 文件附加到输出文件。附件流作为文件的最后一个流,只有很少的文件类型被支持(例如字体)。

视频参数

  • -vframes <num>:文件的总帧数。-frames:v 的别名。
  • -r[:steam_specifier] <fps> (i/o):文件的帧率。
  • -s[:steam_specifier] <size> (i/o):帧尺寸。参数size需要满足格式 <width>x<height>,例如320x240。
  • -aspect[:steam_specifier] <asp> (o):宽高比,例如4:3。如果使用了-vcodec copy,那么指定容器的宽高比而不是视频的。
  • -vn (o):禁止输出视频。
  • -vcodec <codec> (o):设置视频编码器。-codec:v的别名。
  • -pass[:stream_specifier] <n>:选择当前编码数(1或者2),常用于二次编码的情况。在第一次编码中,音频输出往往被设置为 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

音频参数

  • -aframes <num> (o):文件的总帧数。-frames:a 的别名。
  • -ar[:stream_specifier] <freq> (i/o):采样率。默认输出等于输入。仅当输入文件为真实设备或者 raw 数据时,该参数才能用于输入过程。
  • -aq <q> (o):音频品质(VBR)。 -q:a的别名。
  • -ac[:stream_specifier] <channel> (i/o):设置音频通道数。默认输出等于输入。仅当输入文件为真实设备或者 raw 数据时,该参数才能用于输入过程。
  • -an (o):禁止输出音频。
  • -acode <codec> (i/o):设置音频的解码器或编码器。-codec:a 的别名。

字幕参数

  • -scodec <codec> (i/o):字幕解码器或编码器。-codec:s 的别名。
  • -sn (o):禁止输出字幕。
  • -canvas_size <size>:设置字幕渲染区域的尺寸。

其他参数

以下直接在 ffmpeg 后使用,例如:ffmpeg -version

  • -bsfs:可用的比特流滤镜。
  • -h [arg]:帮助。arg 的内容可以是:
    • decoders:可用的解码器。或特指:decoder=<name>
    • encoders:可用的编码器。或特指:encoder=<name>
    • filters:所有滤镜。或特指:filter=<name>
    • formats:可用的分流器与混流器。或特指分流器:demuxer=<name>,或特指混流器:muxer=<name>
  • -protocols:支持的协议。
  • -version:版本信息。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值