FFmpeg命令

1. ffmpeg/ffplay/ffprobe区别

1.1 概念

  1. ffmpeg: Hyper fast Audio and Video encoder 超快音视频编码器
  2. ffplay: Simple media player 简单媒体播放器
  3. ffprobe: Simple multimedia streams analyzer简单多媒体流分析器

1.2 帮助文档

  1. ffmpeg
    ◼基本信息:ffmpeg -h
    ◼高级信息:ffmpeg -h long
    ◼所有信息:ffmpeg -h full

  2. ffplay:ffplay -h

  3. ffprobe:ffprobe -h

1.3 音视频处理流程

FFmpeg命令_第1张图片

2. ffplay命令

2.1 播放控制

FFmpeg命令_第2张图片

2.2 参数选项

ffplay所有参数

主要选项

◼ -x width:强制显示宽度
◼ -y height:强制显示高度
◼ -video_size size: 设置显示帧存储WxH格式,仅用于YUV等未包含尺寸的视频
◼ -pixel_format format:设置像素格式。
◼ -fs:以全屏模式启动。
◼ -an/vn/sn:禁用音频/视频/字幕
◼ -ss pos:设置的时间进行拖动,时间单位:‘12:03:45’ 12h 03m 45s, ‘23.189’ 23.189s
◼ -t duration: 设置播放视频/音频长度,时间单位如 -ss选项

◼ -t bytes:按照字节进行定位拖动(0=off 1=on -1=auto)
◼ -seek_interval interval: 自定义左/右定位拖动间隔,默认10s
◼ -nodisp:关闭图形化显示窗口,视频将不显示
◼ -noborder:无边框窗口
◼ -volume vol:设置起始音量,范围0~100
◼ -f fmt:强制使用设置的格式进行解析。如-f s16le
◼ -window_title title: 设置窗口标题,默认文件名
◼ -loop number:始值播放循环次数
◼ -showmode mode:设置显示模式,可用 的模式值:0显示视频(默认),1显示音频波形,2显示音频频谱
◼ -vf filtergraph:设置视频滤镜
◼ -af filtergraph:设置音频滤镜

高级选项

◼ -stats:打印多个回放统计信息,包括显示流持续时间,编解码器参数, 流中的当前位置,以及音频/视频同步差值。默认启用状,禁用-nostats
◼ -fast: 非标准化规范的多媒体兼容优化。
◼ -genpts:生成pts。
◼ -sync type同步类型:将主时钟设置为audio(默认)/video/external, 如type=ext
◼ -ast audio_stream_specifier:指定音频流索引, 如-ast 3 播放流索引为3的音频流
◼ -vst video_stream_specifier:指定视频流索引, 如-vst 4播放流索引为4的视频流
◼ -sst subtitle_stream_specifier:指定字幕流索引, 如-sst 5播放流索引5的字幕流
◼ -autoexit 视频播放完毕后退出。

◼ -exitonkeydown 键盘按下任何键退出播放
◼ -exitonmousedown 鼠标按下任何键退出播放
◼ -codec:media_specifier codec_name 强制使用设置的多媒体解码器, media_specifier可用值为a(音频), v(视频)和s字幕。比如- codec:v h264_qsv 强制视频采用h264_qsv解码
◼ -acodec codec_name 强制使用设置的音频解码器进行音频解码
◼ -vcodec codec_name 强制使用设置的视频解码器进行视频解码
◼ -scodec codec_name 强制使用设置的字幕解码器进行字幕解码
◼ -autorotate 根据文件元数据自动旋转视频。值为0或1 ,默认为1。
◼ -framedrop 如果视频不同步则丢弃视频帧。当主时钟非视频时钟时 默认开启。若需禁用则使用 -noframedrop
◼ -infbuf 不限制输入缓冲区大小。尽可能快地从输入中读取尽可能多的数据。
播放实时流时默认启用,如果未及时读取数据,则可能会丢弃数据。此选项
将不限制缓冲区的大小。若需禁用则使用-noinfbuf

2.3 播放命令

  1. 播放YUV数据
ffplay -pix_format yuv420p -video_size 320x240 -framerate 5 -i yuv420p_320x240.yuv 
  1. 播放RBG数据
ffplay -pix_format rtb24 -video_size 320x240 -framerate 5 -i rgb24_320x240.rgb
ffplay -pix_format rtb24 -video_size 320x240 -i rgb24_320x240.rgb
  1. 播放PCM数据
ffplay -ar 48000 -ac 2 -f32le 48000_2_f32l2.pcm

2.4 简单过滤器

# 视频旋转
ffplay -i test.mp4 -vf transpose=1
# 视频反转
ffplay test.mp4 -vf hflip
ffplay test.mp4 -vf vflip
# 视频旋转和反转
ffplay test.mp4 -vf hflip,transpose=1
# 音频变速播放
ffplay -i test.mp4 -af atempo=2
# 视频变速播放
ffplay -i test.mp4 -vf setpts=PTS/2
# 音视频同时变速
ffplay -i test.mp4 -vf setpts=PTS/2 -af atempo=2

过滤器所有命令

3. ffmpeg命令

3.1 基本信息查询命令

FFmpeg命令_第3张图片
查看具体分类所支持的参数:

ffmpeg -h type=name

如:
ffmpeg -h echoder=libx264

3.2 提取音视频

  1. 提取音频
#保留编码格式
ffmpeg -i test.mp4 -acodec copy -vn audio.mp4	#保留封装格式
ffmpeg -i test.mp4 -acodec copy -vn test.aac	#保留编码格式
ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3	#强制格式
#提取原始数据
ffmpeg -i test.mp3 -ar 44100 -ac 2 -f s16le test.pcm
ffmpeg -i test.mp3 -ar 44100 -ac 2 -sample_fmt s16 test.wav		#采样格式
ffmpeg -i test.mp3 -ar 44100 -ac 2 -codec:a pacm_s16le  test.wav#编码格式
  1. 提取视频
#保留编码格式
ffmpeg -i test.mp4 -acodec copy -aan audio.mp4	#保留封装格式
ffmpeg -i test.mp4 -vcodec copy -an test.h264	#保留编码h264
ffmpeg i test.mp4 -vcodec libx264 -an test.h264	#强制格式
#提取原始数据
ffmpeg -i test.mp4 -t 3 -pix_fmt yuv420p -s 320x240 test.yuv	#提取3s 320x240的yuv420p数据
ffmpeg -i test.mp3 -t 3 -pix_fmt rgb24 -s 320x240 test.rgb		#提取rgb数据
ffmpeg -s 320x240 -pix_fmt yuv420p -i test.yuv -pix_fmt rgb24 test.rgb	#yuv转rgb数据

3.3 格式转封装

#保持编码格式
ffmpeg -i test.mp4 -vcodec copy -acodec copy test.ts
ffmpeg -i test.mp4 -codec copy test.ts

#改变编码格式
ffmpeg -i test.mp4 =vcodec libx265 -acodec libmp3lame test.mkv

#修改帧率
ffmpeg -i test.mp4 -r 15 out.mp4

#修改码率
ffmpeg -i test.mp4 -b 400k test.mkv	#音视频同时被重新编码
Ffmpeg -i test.mp4 -b:v 400k -b:a 192k test.mp4

ffmpeg -i test.mp4 -b:v 400k -acodec copy test.mkv	#视频重新编码
ffmpeg -i test.mp4 -b:a 192k -vcodec copy test.mp4	#音频重新编码

#修改视频分辨率
ffmpeg -i test.mp4 -s 320x240 test.mp4

#修改音频采样率
ffmpeg -i test.mp4 -ar 48000 test.mp4

3.4 裁剪/合并

  1. 裁剪视频
ffmpeg -i test.mp4 -ss 00:00:10 -t 10 -codec copy 1.mp4
ffmpeg -i test.mp4 -ss 00:00:10 =t 20 -vcodec libx264 -acodec aac 2.mp4
  1. 合并视频
ffmpeg -f concat -i mp4List.txt -codec copy test.mp4
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out_ts.mp4	#仅限于ts等部分封装格式

注意:合并的视频分辨率可以不同,编码格式必须统一,音频参数(ar/ac/sample_fmt)和编码格式都必须统一。

3.5 图片/视频转换

  1. 视频转图片
#视频转jpeg
ffmpeg -i test.mp4 -f image2 image_%3d.jpeg				#每帧自己的参数
ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 image%03d.jpeg	#指定转换的参数
#视频转gif
ffmpeg -i test.mp4 -t 5 -r 1 image1.gif
ffmpeg -i test.mp4 -t 5 -r 25 -s 640x360 image2.gif
  1. 图片转视频
ffmpeg -i image_%3d.jpeg test_img.mp4
ffmpeg -f gif -i image2.gif image2.mp4

3.6 录制音视频

  1. 安装 Screen Capturer Recorder
  2. ffmpeg -list_devices true -f dshow -i dummy 查看可用设备的名字
[dshow @ 03221440] DirectShow video devices (some may be both video and audio devices)
[dshow @ 03221440]  "Integrated Camera"						##笔记本摄像头
[dshow @ 03221440]     Alternative name "@device_pnp_\\?\usb#vid_04f2&pid_b61e&mi_00#6&10400b6&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 03221440]  "screen-capture-recorder"				##录屏
[dshow @ 03221440]     Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{4EA6930A-2C8A-4AE6-A561-56E4B5044439}"
[dshow @ 03221440] DirectShow audio devices
[dshow @ 03221440]  "麦克风阵列 (Realtek(R) Audio)"			##麦克风
[dshow @ 03221440]     Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{D3AF43CB-ECC4-410E-925D-E850F1C96C66}"
[dshow @ 03221440]  "virtual-audio-capturer"				##本机声音
[dshow @ 03221440]     Alternative name "@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\{8E14549B-DB61-4309-AFA1-3578E927E935}"

默认参数

#录制视频
ffmpeg -f dshow -i video="screen-capture-recorder" v-out.mp4		#录制屏幕
ffmpeg -f dshow -i video="Integrated Camera" -y v-out2.flv 			#摄像头

#录制音频
ffmpeg -f dshow -i audio="virtual-audio-capturer" a-out.aac			#系统声音
ffmpeg -f dshow -i audio="virtual-audio-capturer" -f dshow -i audio="麦克风阵列 (Realtek(R) Audio)" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 a-out2.aac			#系统+麦克风声音

#同时录制视频和音频
ffmpeg -f dshow -i audio="麦克风 (Realtek Audio)" -f dshow -i audio="virtual-
audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f
dshow -i video="screen-capture-recorder" -y av-out.flv

可选参数

  1. 查看录制视频 可选参数
    ffmpeg -f dshow -list_options true -i video="screen-capture-recorder"
[dshow @ 032d1440] DirectShow video device options (from video devices)
[dshow @ 032d1440]  Pin "Capture" (alternative pin name "1")
[dshow @ 032d1440]   pixel_format=bgr0  min s=1x1 fps=0.02 max s=1280x720 fps=30
[dshow @ 032d1440]   pixel_format=bgr0  min s=1x1 fps=0.02 max s=1280x720 fps=30
[dshow @ 032d1440]   pixel_format=bgr24  min s=1x1 fps=0.02 max s=1280x720 fps=30
[dshow @ 032d1440]   pixel_format=rgb555le  min s=1x1 fps=0.02 max s=1280x720 fps=30
[dshow @ 032d1440]   pixel_format=rgb555le  min s=1x1 fps=0.02 max s=1280x720 fps=30
[dshow @ 032d1440]   pixel_format=rgb8  min s=1x1 fps=0.02 max s=1280x720 fps=30
[dshow @ 032d1440]   pixel_format=yuv420p  min s=1x1 fps=0.02 max s=1280x720 fps=30

  1. 查看录制音频 可选参数
    ffmpeg -f dshow -list_options true -i audio="virtual-audio-capturer“
[dshow @ 01471440] DirectShow audio only device options (from audio devices)
[dshow @ 01471440]  Pin "Capture Virtual Audio Pin" (alternative pin name "1")
[dshow @ 01471440]   min ch=2 bits=16 rate= 48000 max ch=2 bits=16 rate= 48000

录制音视频


#指定参数录制
ffmpeg -f dshow -i audio="麦克风阵列 (Realtek(R) Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f dshow -video_size 1920x1080 -framerate 15 -pixel_format yuv420p -i video="screen-capture- recorder" -vcodec h264_qsv -b:v 3M -y av-out.flv

ffmpeg -f dshow -i audio="麦克风阵列 (Realtek(R) Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f dshow -i
video="screen-capture-recorder" -vcodec h264_qsv -b:v 3M -r 15 -y av- out2.mp4

ffmpeg -f dshow -i audio="麦克风阵列 (Realtek(R) Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f dshow -framerate 15 -pixel_format yuv420p -i video="screen-capture-recorder" -vcodec h264_qsv -b:v 3M -r 15 -y av-out3.mp4

3.7 直播命令

#拉流
ffmpeg -i rtmp://58.200.131.2:1935/livetv/cctv1 -c copy test_rtmp.mp4
#推流
ffmpeg -re -i test_rtmp.mp4 -c copy -f flv rtmp//:localhost/live/room

3.8 过滤器

  1. 裁剪
ffmpeg -i test.mp4 -vf crop=iw/3:ih:0:0 out.mp4		#视频裁剪宽度原来的1/3
ffmpeg -i test.mp4 -vf crop=iw/3:ih:iw/3:0 out.mp4	#从1/3处裁剪宽度原来1/3
ffplay -i test.mp4 -vf crop=iw/3:ih:iw/3:0			#预览裁剪的结果
  1. 水印
  2. 画中画
  3. 多宫格

你可能感兴趣的:(FFmpeg命令)