美文网首页
ffmpeg 基本命令介绍

ffmpeg 基本命令介绍

作者: IsGirl | 来源:发表于2022-09-20 16:28 被阅读0次
数据处理流程.png

命令分类

基本信息查询命令
录制
分解/复用(包括文件格式的转换等等)
处理原始数据
滤镜(包括logo,翻转等)
切割与合并
图/视互转
直播相关

1 基本信息查询命令

-version 显示版本。
-formats 显示可用的格式(包括设备)。
-demuxers 显示可用的demuxers。
-muxers 显示可用的muxers。
-devices 显示可用的设备。
-codecs 显示libavcodec已知的所有编解码器。
-decoders 显示可用的解码器。
-encoders 显示所有可用的编码器。
-bsfs 显示可用的比特流filter。
-protocols 显示可用的协议。
-filters 显示可用的libavfilter过滤器。
-pix_fmts 显示可用的像素格式。
-sample_fmts 显示可用的采样格式。
-layouts 显示channel名称和标准channel布局。
-colors 显示识别的颜色名称。
查询方式 Windows 将下载好的ffmpeg的路径配置到环境变量里面后直接在cmd命令行打开输入 ffmpeg + 对应的查询命令。
eg: ffmpeg -version


分屏显示查询ffmpeg支持的所有编解码能力.png

有的信息比较多,可以分屏显示,按q 退出分屏
eg: ffmpeg -formats | more 查询所有支持的格式
ffmpeg -codecs | more 查询所有编解码的格式


编解码格式查询.png
可以过滤查找 是否支持某一种能力
eg: ffmpeg -formats | grep aac
查询是否支持aac.png
上线的红色框里面的信息就代表我们查询的ffmpeg版本支持aac

2 录制命令

  • 录制视频
    Mac:ffmpeg -f foundation -i 1 -r 30 output.yuv
    Windows:
    使用 gdigrab :ffmpeg -f gdigrab -i desktop -r 30 out.yuv
    使用 dshow : 需要下载screen-capture-recorder
    ffmpeg -f dshow -i video="screen-capture-recorder" -r 30 out.mp4
    ffmpeg -f dshow -i video="Integrated Camera" -s 1280x720 -r 30 -pix_fmt yuv420p -c:v libx264 -b:v 20000000 media.avi

-f 指定采集数据的设备
mac下使用 foundation
Windows下可以使用gdigrab(给予GDI(图形设备接口(Graphics Device Interface))的抓屏设备) dshow(DirectShow).(ffmpeg -devices 查询当前的设备有哪些)


Windows下的设备查询.png

-i 指定设备 mac 下 1表示桌面(命令查询mac下的索引号)
ffmpeg -f dshow -list_devices true -i "" 该命令可以查询设备列表


mac下查询设备index.png

windows下支持桌面采集


windows下设备信息.png
上图可以看到存在乱码,是cmd编码的问题,在cmd 输入chcp 可以看到当前的编码代号,然后输入chcp 65001(utf-8)即可解决乱码问题,下图。
解决乱码.png

-r 指定帧率
-s 指定分辨率 eg: -s 640x480
-pix_fmt 指定格式

  • 录制音频
    ffmpeg -f dshow -i audio="麦克风 (Webcam C170)" -ar 44100 -ac 2 -f s16le out/audio_1.pcm
    ffmpeg -f dshow -i audio="麦克风 (3- Webcam C170)" out/out.wav
    ffmpeg -f dshow -i audio="麦克风 (3- Webcam C170)" -codec mp3 out/out.mp3 指定编码为MP3
    ffmpeg -f dshow -i audio="virtual-audio-capturer" out/play.wav 录制扬声器 需要安装screen-capture-recorder

  • 录制音视频
    ffmpeg -f gdigrab -r 5 -offset_x 10 -offset_y 20 -s 640x480 -i desktop -f dshow -i audio="麦 克风 (3- Webcam C170)" out/media.mp4
    使用gdigrab 录制屏幕 使用dshow 录制声音。
    -r 5 -offset_x 10 -offset_y 20 -s 640x480 从屏幕的(10,20)点处开始,抓取640x480的屏幕,设定帧率为5


    音视频录制图.png
  • 扩展

    • -i title=<windowname>可以指定采集某个窗口,目前没有测试
    • 除了使用DirectShow作为输入外,使用VFW也可以读取到摄像头的数据,例如下述命令可以播放摄 像头数据:ffplay -f vfwcap -i 0
    • ffmpeg -f dshow -list_options true -i video="Webcam C170" 查看设备头支持能力


      能力获取.png

分解/复用

1 mp4 转 flv
ffmpeg -i out/media.mp4 -vcodec copy -acodec copy media.flv
2 mp4 转 mov
ffmpeg -i out/media.mp4 -vcodec copy -acodec copy media.mov
3 从flv中抽取视频
ffmpeg -i out/media.flv -vcodec copy -an out/meida_video.h264
-an 表示不要音频
4 从flv中抽取音频
ffmpeg -i out/media.flv -acodec copy -vn out/meida_audio.aac
-vn 表示抽取视频
5 aac 转 mp3
ffmpeg -i out/meida_audio.aac -acodec mp3 out/meida_audio.mp3

处理原始数据

1 获取mp4中的视频原始数据
ffmpeg -i out/out.mp4 -an -c:v rawvideo -pix_fmt yuv420p out/video.yuv
-c:v 指定视频编码器 rawvideo
-pix_fmt 指定yuv格式
2 获取mp4中的音频原始数据
ffmpeg -i out/out.mp4 -vn -ar 44100 -ac 2 -f s16le out/audio.pcm
-ar 指定音频采样率 44100
-ac 指定音频采样声道 2
-f 指定采样精度 s16le s有符号 16 16bit le 小端存储模式
生成pcm数据需要指定这些参数,同样播放pcm数据也需要告诉ffplay这些对应的参数
ffplay -ar 44100 -ac 2 -f s16le out/audio.pcm

滤镜命令

1 视频裁剪滤镜
ffmpeg -i media_1.mp4 -vf crop=in_w-300:in_h-200 -c:v libx264 -c:a copy out/meida_2.mp4
-vf 表示视频滤镜
crop 滤镜的名字 in_w-300 表示将视频本身的宽度减去300 in_h-200 将视频本身的高度减去200
-c:v libx264 表示指定视频编码器 libx264
-c:a copy 表示指定音频编码器 拷贝 保持原有的
2 添加水印

  • 静态水印
    • movie滤镜
      ffmpeg -i out/media_1.mp4 -vf "movie=out/logo2.png[watermark];[in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] " out/watermark.mp4
      movie 滤镜 需要放到引号里面 out/logo2.png是水印的图片
      overlay 水印参数
      main_w 视频宽度
      main_h 视频高度
      main_w-overlay_w-10 : 水印在x轴的位置,也可以写成x=main_w-overlay_w-10
      main_h-overlay_h-10:水印在y轴的位置
    • filter_complex
      ffmpeg -i out/media_1.mp4 -i out/logo2.png -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' out/video_1.mp4
      -filter_complex: 相比-vf, filter_complex适合开发复杂的滤镜功能,如同时对视频进行裁剪并旋转。参数之间使用逗号(,)隔开即可
      main_w:视频宽度
      overlay_w: 要添加的图片水印宽度
      main_h : 视频高度
      overlay_h:要添加的图片水印宽度
      这个没有测试,自己的ffmpeg不支持该水印
  • draw 滤镜 文字水印
    ffmpeg -i out/media_1.mp4 -vf "drawtext=fontfile=simhei.ttf: text=‘生产力’:x=10:y=10:fontsize=24:fontcolor=white:shadowy=2" out/media_7.mp4
    fontfile:字体类型
    text:要添加的文字内容
    fontsize:字体大小
    fontcolor:字体颜色 测试后水印的中文不能显示出来 yinw


    英文显示也有点问题
水印.png
  • 动态水印
    还没有测试
    3 添加logo
    ffmpeg -y -t 60 -i out/media_1.mp4 -i out/logo1.png -i out/logo2.png -filter_complex "overlay=x=if(lt(mod(t,20),10),10,NAN ):y=10,overlay=x=if(gt(mod(t,20),10),W-w-10,NAN ) :y=10" out/output.mp4

裁剪与合并

  • 1 裁剪命令
    ffmpeg -i out/process_media.mp4 -ss 00:00:10 -t 120 out/1.mp4
    -ss 开始裁剪的时间位置
    -t 裁剪的时长
  • 2 拼接命令
    ffmpeg -f concat -i a.txt out/4.mp4
    -f concat 表示要对 后面的数据进行拼接
    -i 指定数据源 a.txt 是源文件的列表
    a.txt格式如下
    file 文件名1
    file 文件名2
    ......


    列表格式.png
  • 3 裁剪yuv
    从头截取 (前30帧)
ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="gt(n\, -1)" -vframes 30 out30.yuv
ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="between(n\, 0\, 29)" out30.yuv
ffmpeg -r 1 -ss 0 -i input.yuv -vcodec copy -vframes 30 output.yuv

中间截取 (30-100帧)

ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="between(n\, 30\, 100)" out.yuv

按时间截取

ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="between(t\, 10\, 20)" out.yuv
ffmpeg -s 1920x1080 -r 1 -ss 10 -t 10 -i input.yuv -c:v copy out.yuv

图/视互转

1 视频转图片
ffmpeg -i out/4.mp4 -r 1 -f image2 image-%3d.jpeg
-r 1 表示一秒转换1张图片
-f image 图片格式
image-%3d.jpeg 指定输出图片的名称 %3代表3个数字组成。下图


截图.png

2 图片转视频
ffmpeg -i image-%3d.jpeg out.mp4
-i image-%3d.jpeg 指定一组图片
这样转出来的视频会迅速播放完毕,还没有解决完毕

直播相关

1 直播拉流
ffplay http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
拉取cctv-1的http流
ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -c copy cctv-1.m3u8
拉取cctv-1的http流 并保存成视频文件
2 直播推流
需要有一个推流服务器。

相关文章

网友评论

      本文标题:ffmpeg 基本命令介绍

      本文链接:https://www.haomeiwen.com/subject/brdtlktx.html