音视频-ffmpeg基础介绍&常用命令

Ffmpeg整体结构

主要源码

ffplay.c

作用:播放

ffprobe.c

作用:码流分析

ffmpeg.c

作用:转码、推流

七大组件

libavutil

作用:工具类

libavformat

作用:打开写入文件

libavcodec

作用:编解码

fdk-aac voaac_enc x264(三方库)

libswscale

作用:图像尺寸变化

libswresample

作用:音频重采样

libavfilter

作用:滤镜、画中画

libpostproc

作用:后期效果处理

Ffmpeg相关地址

源码下载地址

Download FFmpeg

命令地址

ffmpeg Documentation

官网

FFmpeg中文网 官网

源码地址

ffmpeg-x.x.x/fftools

案例地址

ffmpeg-x.x.x/doc/examples

常用命令

基本信息查询命令

裁剪与合并命令

录制命令

直播命令

处理原始数据命令

各种滤镜命令

录制命令

ffmpeg -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -video_size 1920*1080 -i desktop out.mpg 

参数意义

分解复用命令

将完整的视频文件进行拆分。将拆分的信息作为素材,合成所需要的新视频。

第一步:抽取音频流

ffmpeg -i input.mp4 -acodec copy -vn out.aac
// -i(输入路径) acodec(指定音频编码器) copy(只拷贝,不编码) 
//v(代表视频)n(代表no,无视频的意思)

第二步:抽取视频流

ffmpeg -i input.mp4 -vcodec copy -an out.h264
//a(代表音频) vcodec(指定视频编码器)

第三步:合成视频

ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out_02.mp4

转码命令

ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv

处理原始数据命令

获取未经过编码的画面和音频,画面信息一般是yuv,音频信息一般是pcm。

提取yuv数据

ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv
//-an(不要音频数据) -c:v rawvideo(指定将视频转成原始数据) 
//-pixel_format yuv420p(指定转换格式为yuv420p) 
//未经过编码的数据需要用到ffplay播放(ffplay -s 608*368 out.yuv)

提取pcm数据

ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
//-ar(指定音频采样率44100即44.1KHz)
//-ac(指定音频声道channel 2为双声道)
//-f(数据存储格式 s:Signed有符号的,16:每一个数值用16位表示,l:little,e:end)
//未经过编码的数据需要用到ffplay播放(ffplay -ar 44100 -ac 2 -f s16le out.pcm)

滤镜命令

原视频 -》 编码数据包 -》 修改的数据帧 -》 编码数据包 -》 原视频

裁剪滤镜

ffmpeg -i input.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a 
copy crop.mp4
//-vf(用到视频的滤镜)
//crop(用到crop滤镜)
//in_w-200:in_h-200(裁剪视频之后的宽高)
//-c:v libx264(裁剪后通过h264来编码)
//-c:a copy(音频直接进行copy)

提取pcm数据

ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm

添加水印

ffmpeg -i test.mp4 -i pic_01.png -i pic_02.png -i pic_03.png -i pic_04.png -filter_complex "overlay=10:60, overlay=x=100:y=60, overlay=x=200:y=60, overlay=x=300:y=60" out_watermark_01.mp4

添加文字

ffmpeg -i out_watermark_01.mp4 -vf "drawtext=fontsize=40:fontfile=lazy.ttf:text='hello world':x=480:y=70:fontcolor=green" out_watermark_02.mp4

查看帮助文档命令

ffmpeg

基本信息

ffmpeg -h

高级信息

ffmpeg -h long

所有信息

ffmpeg -h full

将打印输入文件

ffmpeg -h full > ffmpeg_h_full.log

ffplay

所有信息

ffplay -h

将打印输入文件

ffplay -h full > ffplay_h_full.log

ffprobe

所有信息

ffprobe -h

将打印输入文件

ffprobe -h full > ffprobe_h_full.log

ffmpeg命令父类查询

ffmpeg -encoders | findstr 264
ffmpeg -protocols | more
ffmpeg -protocols | findstr rtmp
ffmpeg -layouts

查看具体父类所支持的参数

ffmpeg -h type=name

比如:

ffmpeg -h muxer=flv
ffmpeg -h filter=atempo(atempo调整音频播放速率)
ffmpeg -h encoder=libx264

ffmpeg音频处理流程

ffmpeg -i test_1920x1080.mp4 -acodec copy -vcodec libx264 -s 1280x720 test_1280x720.flv

ffplay播放控制

如:播放视频

ffplay -volume 10 flower.mp4

以宽400高800的大小从第3秒的位置播放视频2秒钟

ffplay -x 400 -y 800 -ss 00:00:03 -t 2 flower.mp4

按字节定位拖动

ffplay -bytes 2 flower.flv

显示音频频谱

ffplay -showmode 2 flower.mp4

不打印流信息

ffplau -nostats flower.mp4

强制使用h264_qsv解码视频

ffplay -codec:v h264_qsv flower.mp4

强制使用h264_qsv解码视频

ffplay -vcodec h264_qsv flower.mp4

ffplay播放命令

播放yuv数据

ffplay -pixel_format yuv420p -video_size 320x420 -framerate 5 flower_out.yuv

ffplay过滤器

查看旋转参数

ffplay -h filter=transpose

视频旋转

ffplay -i flower.mp4 -vf transpose=1
//transpose范围(0~7)

视频水平翻转

ffplay flower.mp4 -vf hflip

音频变速播放

ffplay -i flower.mp4 -af atempo=2

视频变速播放

ffplay -i flower.mp4 -vf setpts=PTS/1

ffmpeg命令

主要命令

音频参数

查询编码器名称

ffmpeg -encoders | findstr mp3

提取音频数据

ffmpeg -i flower.mp4 -b:a 192k -ar 48000 -ac 2 -acodec libmp3lame -aframes 200 out.mp3
//设置192kb/s码率    48k采样率    2通道   
//使用libmp3lame解码器来解码200帧数据 

视频参数

//查找265可以使用的编码器
ffmpeg -encoders | findstr 265


ffmpeg -i flower.mp4 -vframes 300 -b:v 300k -r 30 -s 480x840 -aspect 10:9 -vcodec libx265 out.h265


ffplay out.h265

提取音视频数据

保留封装格式

ffmpeg -i flower.mp4 -acodec copy -vn audio.mp4
ffmpeg -i flower.mp4 -vcodec copy -an video.mp4

提取视频

保留编码格式:ffmpeg -i flower.mp4 -vcodec copy -an -t 10 video_h264.h264
强制格式:ffmpeg -i flower.mp4 -vcodec libx264 -an video_h264.h264

提取音频

保留编码格式:ffmpeg -i flower.mp4 -acodec copy -vn audio_aac.aac
强制格式:ffmpeg -i flower.mp4 -acodec libmp3lame -vn audio_aac.aac

提取像素格式

提取YUV

//提取3秒数据,分辨率和原视频一致
ffmpeg -i flower.mp4 -t 3 -pix_fmt yuv420p yuv420p_orip.yuv
//提取3秒数据,分辨率转为320x460
ffmpeg -i flower.mp4 -t 3 -pix_fmt yuv420p -s 320x460 yuv420p_320x460.yuv

提取RGB

//提取3秒数据,分辨率转为320x460
ffmpeg -i flower.mp4 -t 3 -pix_fmt rgb24 -s 320x460 rgb24_320x460.rgb

RGB和YUV之间的转换

ffmpeg -s 320x460 -pix_fmt yuv420p -i yuv420p_320x460.yuv -pix_fmt rgb24 rgb24_320x460_2.rgb

ffplay命令播放

播放yuv数据

ffplay -pixel_format yuv420p -video_size 320x460 -framerate 5 yuv420p_320x460.yuv

播放RGB数据

ffplay -pixel_format rgb24 -video_size 320x460 -i rgb24_320x460.rgb
ffplay -pixel_format rgb24 -video_size 320x460 -framerate 5 -i rgb24_320x460.rgb

播放PCM数据

ffplay -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm
-ar 音频采样率 
-ac 管道数

提取PCM数据

//查找pcm的封装格式
ffmpeg -muxers | findstr PCM
//使用s16le/s32le/f32le提取pcm数据
ffmpeg -i flower.mp4 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm
ffmpeg -i flower.mp4 -ar 48000 -ac 2 -f s32le 48000_2_s32le.pcm
ffmpeg -i flower.mp4 -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm

//查sample
ffmpeg -sample_fmts

ffmpeg -i flower.mp4 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav

//查pcm编码器
ffmpeg -encoders | findstr pcm

ffmpeg -i flower.mp4 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav

播放wav

ffplay out2_s16le.wav

ffmpeg命令转封装

//改变编码格式
ffmpeg -i flower.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv

//查看
ffprobe out_h265_mp3.mkv

//转码
ffmpeg -i flower.mp4 -r 15 output.mp4

//修改视频码率(这种方法也会对音视频重新编码)
ffmpeg -i flower.mp4 -b 400k output_b.mkv

//修改视频码率
ffmpeg -i flower.mp4 -b:v 400k output_bv.flv

//修改音频码率(这种方法会重新编码video,不想让video重新编码可以加上-video copy)
ffmpeg -i flower.mp4 -b:a 192k output_ba.mp4

//修改音视频码率
ffmpeg -i flower.mp4 -b:v 400k -b:a 192k output_bva.mp4

//修改视频分辨率
ffmpeg -i flower.mp4 -s 240x560 output_240x560.mp4

//修改音频采样率为44.1k
ffmpeg -i flower.mp4 -ar 44100 output_44100hz.mp4

生成测试文件

//截取10秒
ffmpeg -i summer.mp4 -t 10 -codec copy 1.mp4
ffmpeg -i jelly.mp4 -t 10 -codec copy 2.mp4
ffmpeg -i flower.mp4 -t 10 -codec copy 3.mp4

//将mp4转成ts格式
ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -codec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i 3.mp4 -codec copy -vbsf h264_mp4toannexb 3.ts

//将mp4转成flv格式
ffmpeg -i 1.mp4 -codec copy 1.flv
ffmpeg -i 2.mp4 -codec copy 2.flv
ffmpeg -i 3.mp4 -codec copy 3.flv

开始拼接文件

//以MP4格式拼接文件
ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -codec copy out_mp4_01.mp4  (failed)
ffmpeg -f concat -i mp4list.txt -codec copy out_mp4_02.mp4

//以TS格式拼接文件
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out_ts_01.mp4
ffmpeg -f concat -i tslist.txt -codec copy out_ts_02.mp4

//以FLV格式拼接文件
ffmpeg -i "concat:1.flv|2.flv|3.flv" -codec copy out_flv_01.mp4  (failed)
ffmpeg -f concat -i flvlist.txt -codec copy out_flv_02.mp4

mp4list.txt

file '1.mp4'
file '2.mp4'
file '3.mp4'

tslist.txt

file '1.ts'
file '2.ts'
file '3.ts'

flvlist.txt

file '1.flv'
file '2.flv'
file '3.flv'
//修改音频编码
ffmpeg -i 2.mp4 -vcodec copy -acodec ac3 -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out1.mp4  
//实际表现为:第二、三段没有声音,画质变黑白

//修改音频采样率
ffmpeg -i 2.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out2.mp4 
//实际表现为:第二、三段没有声音,画质变黑白

//修改视频编码格式
ffmpeg -i 1.mp4 -acodec copy -vcodec libx265 1.ts
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out3.mp4 

//修改视频分辨率
ffmpeg -i 1.mp4 -acodec copy -vcodec libx264 -s 340x780 -vbsf h264_mp4toannexb 1.ts
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out4.mp4 

filter过滤器

//从左往右裁从坐标(0:0)开始剪1/3的画面
ffmpeg -i input.jpg -vf crop=iw/3:ih:0:0 out.jpg

//查看效果图片
ffplay -i input.jpg -vf crop=iw/3:ih:0:0

//裁剪中间部分
ffmpeg -i input.jpg -vf crop=iw/3:ih:iw/3:0 out_02.jpg

图片和视频转换

//截取一张2秒处的图片
ffmpeg -i flower.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 350x780 flower.jpg

ffmpeg -i flower.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 350x780 flower.bmp

//转换视频为图片(每帧一张图片)
//转5s的图片,一秒钟出15张图片
ffmpeg -i flower.mp4 -t 5 -s 350x780 -r 15 frame%03d.jpg
//图片转视频
ffmpeg -f image2 -i frame%03d.jpg -r 25 video.mp4

GIF和视频转换

//从视频中生成GIF图片
//1s1帧
ffmpeg -i flower.mp4 -t 5 -r 1 image1.gif
//1s25帧
ffmpeg -i flower.mp4 -t 5 -r 25 -s 350x780 image2.gif


//将GIF转换为视频
ffmpeg -f gif -i image2.gif image2.mp4

生成画中画

//显示画中画效果,播放完了,停止所有的流
ffplay -i flower.mp4 -vf "movie=summer.mp4[sub];[in][sub]overlay=x=20:y=20:eof_action=1[out]"


//缩放子画面分辨率
ffplay -i flower.mp4 -vf "movie=summer.mp4,scale=370x780[sub];[in][sub]overlay=x=20:y=20[out]"


//跑马灯效果
ffplay -i flower.mp4 -vf "movie=summer.mp4[sub];[in][sub]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*main_h*0.7[out]"

推流命令

ffmpeg -re -i flower.mp4 -vcodec copy -acodec copy -f flv -y rtmp://sendtc3.douyu.com/live/11419066rFFw6LRq?wsSecret=304b320a04cc2ece709902471aa90e22&wsTime=63ddef1d&wsSeek=off&wm=0&tw=0&roirecognition=0&record=flv&origin=tct&txHost=sendtc3.douyu.com


推流:ffmpeg -re -i /mnt/hgfs/linux/vod/35.mp4 -c copy -f flv rtmp://192.168.100.41/live/35

拉流命令

ffplay https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
ffplay rtmp://192.168.100.41/live/35

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值