本文主要介绍ffmpeg中的ffprobe,ffplay&&ffmpeg常用命令.在做多媒体开发时,非常实用:ffprobe可以查看媒体信息,ffplay可以播放,ffmpeg可以转换文件.
一、ffprobe篇
格式:ffprobe [输入文件名]
1.1查看mp4格式的文件
ffprobe E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4
=>
Duration: 00:00:10.00, start: 0.000000, bitrate: 422 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 720x480 [SAR 1:1 DAR 3:2], 367 kb/s, 24 fps, 25 tbr, 12288 tbn, 50 tbc (d
efault)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 47 kb/s (default)
->该视频文件的时长是10秒,开始播放时间是0,整个文件的比特率是422Kbit/s
->第一个流是视频流,编码格式是h264格式(封装格式为avc1),每一帧的数据表示为yuv420p,分辨率为720x480,这路流的比特率为367Kbit/s,帧率为每秒钟24帧
->第二个流是音频流,编码方式为aac(封装格式为MP4A),并且采用的Profile是LC规格,采样率是44.1KHz,声道是立体声,这路流的比特率47Kbit/s
1.2.显示帧信息(这里只讲解video帧信息)
ffprobe -show_frames E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4
=>
[FRAME]
media_type=video
stream_index=0
key_frame=1
pkt_pts=0
pkt_pts_time=0.000000
pkt_dts=0
pkt_dts_time=0.000000
best_effort_timestamp=0
best_effort_timestamp_time=0.000000
pkt_duration=492
pkt_duration_time=0.040039
pkt_pos=9452
pkt_size=31345
width=720
height=480
pix_fmt=yuv420p
sample_aspect_ratio=1:1
pict_type=I
coded_picture_number=0
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
color_range=unknown
color_space=unknown
color_primaries=unknown
color_transfer=unknown
chroma_location=left
[/FRAME]
[FRAME]
media_type=video ->media类型,这里为video
stream_index=0 ->stream索引,通常video为0,audio为1
key_frame=0
pkt_pts=492
pkt_pts_time=0.040039 ->当前帧的pkt_pts_time=前一帧的pkt_pts_time+前一帧的pkt_duration_time,表示当前帧的时间戳
pkt_dts=492
pkt_dts_time=0.040039
best_effort_timestamp=492
best_effort_timestamp_time=0.040039
pkt_duration=491
pkt_duration_time=0.039958 ->当前帧pkt_duration_time=下一帧pkt_pts_time-当前帧pkt_pts_time,表示两帧的时间戳间隔
pkt_pos=41170
pkt_size=1129 ->帧大小
width=720 ->宽高
height=480
pix_fmt=yuv420p ->yuv格式
sample_aspect_ratio=1:1
pict_type=P ->帧类型
coded_picture_number=1 ->picture索引
display_picture_number=0
interlaced_frame=0 ->interlaced
top_field_first=0
repeat_pict=0
color_range=unknown ->range
color_space=unknown
color_primaries=unknown ->primaries
color_transfer=unknown ->transfer
chroma_location=left
[/FRAME]
1.3 -select_streams
查看音频流或视频流,使用select_streams参数即可。下面只看video的:
ffprobe -show_frames VBB10--H.263-720x480-13.6M-AAC-約定.mov -select_streams v > video_frame_infor2.txt
1.4 -of xml
以xml形式输出
ffprobe -show_frames ./playback/20210926_144131_733_input.264 -select_streams v -of xml > decoder_inout_video_frame_infor.xml
->
<frame media_type="video" stream_index="0" key_frame="0" pkt_duration="48000" pkt_duration_time="0.040000" pkt_pos="319536" pkt_size="45856" width="1920" height="1080" pix_fmt="yuvj420p" pict_type="P" coded_picture_number="4" display_picture_number="0" interlaced_frame="0" top_field_first="0" repeat_pict="0" color_range="pc" color_space="bt470bg" color_primaries="bt470bg" color_transfer="smpte170m" chroma_location="left"/>
...
二、ffplay篇
格式:ffplay [输入文件名]
2.1.播放媒体文件
2.1.1 mp4 container
ffplay E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4
2.2播放视频流数据
2.2.1 h264 stream
ffplay E:\work\video_clip\2-bitstream\h264\input_dec_720_480_0xe8c83940.264
2.3.播放视频裸数据
ffplay -f 格式 -pixel_format 表示格式 -s 宽高 裸文件名
2.3.1播放yuv格式的视频帧
(1)nv12
ffplay -f rawvideo -pixel_format nv12 -s 360x640 E:\work\video_clip\3-yuv\input_enc_360_640_0xeb672000_nv12.yuv
(2)yuv420
ffplay -f rawvideo -pixel_format yuv420p -s 352x288 E:\work\video_clip\3-yuv\CIF\input_cif_352x288_yuv420_container.yuv
2.3.2 播放rgb视频帧
(1)rgb24
ffplay -f rawvideo -pixel_format rgb24 -s 480x480 E:\work\video_clip\3-rgb\
2.4.查看pixel format
ffplay -pix_fmts
2.5.选项
2.5.1 -vn 屏蔽视频
ffplay -vn E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4
2.5.2 -an 屏蔽音频
ffplay -an E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4
2.5.3 -x -y 强制设置视频显示窗口的宽带与高度
ffplay -x 360 -y 240 E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4
2.5.4 -fs 以全屏模式启动
ffplay -fs E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4
2.5.5 -autoexit 播放完毕后自动退出
ffplay -autoexit E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4
2.6.过滤器(filter) (-vf 视频过滤器)
2.6.1 -vf transpose=1 按顺时针旋转90度
ffplay E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4 -vf transpose=1
2.7.播放控制
2.7.1 按键s 可以进入frame-step模式,即按s键一次就会播放下一帧图像
2.7.2 按键f 全屏切换
三、ffmpeg篇
格式:ffmpeg -i [输入文件名] [参数选项] [输出文件]
3.1.码率控制(#-b:v 视频比特率)
ffmpeg -i E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4 -b:v 734K h264_720x480_out_734K.mp4
3.2.设置输出视频的分辨率(-s)
ffmpeg -i E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4 -s 1440x960 h264_1440x960.mp4
3.3.设置帧频(-r )
ffmpeg -i E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4 -r 30 h264_720x480_30fps.mp4
3.4.转换码流
(1)h264 to hevc
#-vcodec hevc
ffmpeg -i E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4 -vcodec hevc h265_720x480.mp4
(2)hevc to h264
#-vcodec h264
ffmpeg -i E:\work\video_clip\1-container\mp4\h265\h265_720x480.mp4 -vcodec h264 h264_720x480.mp4
3.5.分离音视频流(-vcodec copy -an)
ffmpeg -i E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4 -vcodec copy -an h264_720x480.h264 //-an 提取视频流
3.6.转换成YUV原始文件(-vcodec rawvideo -an)
ffmpeg -i E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4 -vcodec rawvideo -an h264_720x480.yuv
3.7.截取一格式为jpg的图片
#-y 表示覆盖输出文件,***文件已经存在的话,不经提示就覆盖掉了;-n 不覆盖输出文件,如果一个给定的输出文件已经存在,则立即退出
#-f 表示输出格式,-t 表示时间,-s 分辨率
ffmpeg -i E:\work\video_clip\1-container\mp4\h264\h264_720x480.mp4 -y -f image2 -ss 8 -t 0.001 -s 720x480 720x480.jpg
3.8 将264裸流封装成mp4
ffmpeg -f h264 -i E:\work\video_clip\2-bitstream\h264\input_dec_1280_720_0xeb354b80.264 -vcodec copy E:\work\video_clip\2-bitstream\h264\h264_1280_720_0xeb354b80.mp4
3.9 将容器中的音频去掉
ffmpeg -i VID_20210427_131104.mp4 -y -f mp4 -an -codec copy -q:v 1 VID_20210427_131104_noaudio.mp4