<>GT

其实平时也有一些处理音视频的个人或者亲人需求,熟练使用ffmpeg之后也不要借助图示化软件,一个命令基本可以搞定

G: 熟练使用ffmpeg命令!
T :不要死记硬背,看一遍,自己找下规律,敲一遍,用的多了,自然而然就记住了。就算忘了,我也可以查一查_
<>ffmpeg提供的命令行工具
* ffprobe:用作信息查询,查看音视频文件中的信息
* ffplay:是一个使用了FFmpeg和SDL库的媒体播放器,ijkplayer 就是基于ffplay改造二次开发的,多做了一些硬件解码和兼容性的工作。
* ffmpeg:最重要,最核心。包含各种功能,学习也主要是学习这玩意。
* ffserver:简单的流媒体服务器,能够响应客户端的流媒体请求和把数据流发送给客户端。 <>ffprobe
ffprobe [fileName] :直接输出文件信息,很明显,可以看出代表的含义
# 时长、开始、比特率 Duration: 00:01:39.96, start: 0.000000, bitrate: 1035 kb/s #
video流,编码格式h264
(封装格式avc1),视频帧格式为yuv420p,分辨率1000x562,比特率、帧率,default代表默认的视频流,可能有多路视频流。 Stream
#0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1000x562 [SAR 1:1
DAR 500:281], 935 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default) #
音频流,编码格式aac(封装格式MP4A),采用Profile是LC,采样率44.1kHZ,stereo立体声,数据表示格式浮点型,比特率 Stream
#0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 94 kb/s
(default)
ffprobe -show_format [fileName]

ffprobe -show_packets [fileName]

ffprobe -show_frames [fileName]

ffprobe -print_format json -show_streams [fileName]

属性 含义
media_type 帧的类型(a,v,字幕等)
pict_type 帧类型(IPB)
pic_fmt 帧的图像色彩格式(yuv420p)
Key_frame 是否是关键帧 <>ffplay
播放: ffplay [fileName]
直接播放文件,播放同时会打印音视频流信息,与上面通过ffprobe查看到的一致
1.seek:播放窗口点击
2.快进快退:左右键10s,上下键1min
3.音视频切换:W
4.frame-step:S

循环播放:ffplay [fileName] -loop [times]

切换音视频流:ffplay [fileName] ast/vst [index]

播放音视频裸数据PCM/YUV:
ffplay .pcm -f s161e -channels 2 -ar 44100
ffplay -f rawvideo -pixel_format yuv420p/rgb24 -s 1920*1080 [fileName]

音视频同步,以音/视频/外部时钟为参考
ffplay [fileName] -sync audio/video/ext
<>ffmpeg:最美味的鱼,也是刺最多的。 ffmpeg -help:可以考到如下几类参数 # 1.Global options
全局生效,而不是只针对个别文件 # 2.Per-file main options:操作每个文件单独生效 -f fmt 指定音视频格式 -c codec
codec name -codec codec codec name -pre preset preset name -map_metadata
outfile[,metadata]:infile[,metadata] set metadata information of outfile from
infile -t duration 指定时长 -to time_stop record or transcode stop time -fs
limit_size 指定文件大小的上限 -ss time_off 指定开始时间 -sseof time_off set the start time
offset relative to EOF -seek_timestamp enable/disable seeking by timestamp with
-ss -timestamp time set the recording timestamp ('now' to set the current time)
-metadata string=string add metadata -program title=string:st=number... add
program with specified streams -target type specify target file type ("vcd",
"svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or
"film-") -apad audio pad -frames number set the number of frames to output
-filter filter_graph set stream filtergraph -filter_script filename read stream
filtergraph description from a file -reinit_filter reinit filtergraph on input
parameter changes -discard discard -disposition disposition # 3. Video options:
视频参数 -vframes number set the number of video frames to output -r rate 帧率fps -s
size 分辨率 -aspect aspect 指定视频长宽比(4:3,16:9或1.3333,1.7777) -bits_per_raw_sample
number set the number of bits per raw sample -vn 取消视频的输出 -vcodec codec
强制使用codec编解码方式(‘copy’ 代表不进行重新编码) -timecode hh:mm:ss[:;.]ff set initial TimeCode
value. -pass n select the pass number (1 to 3) -vf filter_graph set video
filters -ab bitrate audio bitrate (please use -b:a) -b bitrate video bitrate
(please use -b:v) -dn disable data # 4. Audio options: 音频参数 -aframes number set
the number of audio frames to output -aq quality 设置音频质量 (指定编码) -ar rate 设置音频采样率
(单位Hz) -ac channels 设置声道数 1单声道 2立体声 -an 取消音频输出 -acodec codec 指定音频编码 ('copy'
指不做音频转码,直接复制) -vol volume 设置录制音量大小 (256=normal) -af filter_graph set audio
filters # 5. Subtitle options <>查询类命令
-version show version
-buildconf show build configuration
-formats show available formats
-muxers show available muxers
-demuxers show available demuxers
-devices show available devices
-codecs show available codecs
-decoders show available decoders
-encoders show available encoders
-bsfs show available bit stream filters
-protocols show available protocols
-filters show available filters
-pix_fmts show available pixel formats
-layouts show standard channel layouts
-sample_fmts show available audio sample formats
-colors show available color names
-sources device list sources of the input device
-sinks device list sinks of the output device
-hwaccels show available HW acceleration methods
<>命令格式
ffmpeg [global_options] {[input_file_options] -i input_url}
{[output_file_options] output_url}
<>复用解复用命令
抽取音频流
ffmpeg -i input.mp4 -acodec copy -vn out.aac

抽取视频流
ffmpeg -i input.mp4 -vcodec copy -an out.h264

格式转换
ffmpeg -i input.mp4 -vcodec copy -acodec copy out.flv

音视频合并
ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4
<>处理裸数据
#提取YUV数据
ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv

#提取PCM数据
ffmpeg -i input.mp5 -vn -ar 44100 -ac 2 -f s16le out.pcm

#yuv转h264
ffmpeg -f rawvideo -pix_fmt yuv420p -s 320x240 -r 30 -i out.yuv -c:v libx264
-f rawvideo out.h264

#pcm转wav
ffmpeg -s16le -ar 8000 -ac 2 -acodec pcm_s16le -i input.raw output.wav
<>滤镜
#添加水印:-vf中的 movie 指定logo位置。scale 指定 logo 大小。overlay 指定 logo 摆放的位置
ffmpeg -i 1.mp4 -vf “movie=2.png,scale=30:30[watermask];[in][watermask]
overlay=30:10[out]” water.mp4

#删除水印
1.找到水印
ffplay -i water.mp4 -vf delogo=x=30:y=10:w=32:h=31:show=1
2.删除水印
ffmpeg -i water.mp4 -vf delogo=x=30:y=10:w=32:h=31output.mp4

#视频缩小1倍:-vf scale 指定使用简单过滤器 scale,iw/2:-1 中的 iw 指定按整型取视频的宽度。 -1 表示高度随宽度一起变化。
ffmpeg -i 1.mp4 -vf scale=iw/2:-1 scale.mp4

视频裁剪
crop 格式:crop=out_w:out_h: x :y
out_w: 输出的宽度。可以使用 in_w 表式输入视频的宽度。
out_h: 输出的高度。可以使用 in_h 表式输入视频的高度。
x : X坐标
y : Y坐标
ffmpeg -i 1.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy -video_size
1280x720 out.mp4

倍速播放
-filter_complex 复杂滤镜,[0:v]表示第一个(文件索引号是0)文件的视频作为输入。setpts=0.5
PTS表示每帧视频的pts时间戳都乘0.5 ,也就是差少一半。[v]表示输出的别名。音频同理就不详述了。
-map 可用于处理复杂输出,如可以将指定的多路流输出到一个输出文件,也可以指定输出到多个文件。"[v]" 复杂滤镜输出的别名作为输出文件的一路流。上面
map的用法是将复杂滤镜输出的视频和音频输出到指定文件中。
ffmpeg -i 1.mp4 -filter_complex "[0:v]setpts=0.5PTS[v];[0:a]atempo=2.0[a]"
-map “[v]” -map “[a]” speed.mp4

对称视频(水平翻转)
ffmpeg -i 1.mp4 -filter_complex
“[0:v]pad=w=2*iw[a];[0:v]hflip[b];[a][b]overlay=x=w” duicheng.mp4

对称视频(垂直翻转)
ffmpeg -i 1.mp4 -filter_complex
“[0:v]pad=h=2*ih[a];[0:v]vflip[b];[a][b]overlay=y=h” duicheng.mp4

画中画
ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex
“[1:v]scale=w=176:h=144:force_original_aspect_ratio=decrease[ckout];[0:v][ckout]overlay=x=W-w-10:y=0[out]”
-map “[out]” -movflags faststart new.mp4

音量效果
ffmpeg -i 1.mp4 -af ‘volume=0.5’ out.mp4
<>音视频的拼接与裁剪
裁剪
ffmpeg -i 1.mp4 -ss 00:00:00 -t 10 out1.mp4

拼接
text文件:
file ‘out1.flv’
file ‘out2.flv’
file ‘out3.flv’
ffmpeg -f concat -i text -c copy pinjie.mp4

hls切片
-strict -2 指明音频使用AAC。
-f hls 转成 m3u8 格式。
ffmpeg -i 1.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls out.m3u8
<>视频图片互转
视频转JPEG
-r 1:1s一张
ffmpeg -i 1.mp4 -r 1 -f image2 image-%3d.jpeg

图片转gif
ffmpeg -i image-%3d.jpeg -r 5 out.gif

视频转gif图
ffmpeg -i 1.mp4 -ss 00:00:00 -t 10 out.gif

图片转视频
ffmpeg -f image2 -i image-%3d.jpeg images.mp4
<>直播相关
推流
ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName

拉流保存
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

转流
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v copy -f flv
rtmp://server/live/h264Stream

水平有限,能力一般,且处于学习阶段,博客大概为自己学习的记录,难免有理解偏差,欢迎留言指正!
生命不止,学习不息!

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信