ffmpeg
◼基本信息:ffmpeg -h
◼高级信息:ffmpeg -h long
◼所有信息:ffmpeg -h full
ffplay:ffplay -h
ffprobe:ffprobe -h
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
ffplay -pix_format yuv420p -video_size 320x240 -framerate 5 -i yuv420p_320x240.yuv
ffplay -pix_format rtb24 -video_size 320x240 -framerate 5 -i rgb24_320x240.rgb
ffplay -pix_format rtb24 -video_size 320x240 -i rgb24_320x240.rgb
ffplay -ar 48000 -ac 2 -f32le 48000_2_f32l2.pcm
# 视频旋转
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
过滤器所有命令
ffmpeg -h type=name
如:
ffmpeg -h echoder=libx264
#保留编码格式
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#编码格式
#保留编码格式
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数据
#保持编码格式
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
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
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)和编码格式都必须统一。
#视频转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
ffmpeg -i image_%3d.jpeg test_img.mp4
ffmpeg -f gif -i image2.gif image2.mp4
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
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
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
#拉流
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
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 #预览裁剪的结果