
本文主要介绍播放器的使用和调试方式ffmpeg编译ffmpeg的编译选项参考ffmpeg编译选项具体编译使用命令./configure --prefixbuild \ --disable-asm \ --disable-programs \ --enable-pic \ --disable-doc \ --enable-shared \ --disable-decoders \ --disable-encoders \ --disable-muxers \ --disable-demuxers \ --disable-filters \ --enable-decoderaac \ --enable-decodermp3 \ --enable-decoderwma \ --enable-decoderwav \ --enable-decoderamr \ --enable-decoderogg \ --enable-decoderpcm \ --enable-decoderflac\ --enable-decoderdts \ --enable-decoderape \ --enable-decodermjpeg \ --enable-decoderh264 \ --enable-decoderhevc \ --enable-decodervc1 \ --enable-decodervp8 \ --enable-decodervp9 \ --enable-decodermpeg2video \ --enable-decodermpeg4 \ --enable-encoderh264_vaapi \ --enable-encoderhevc_vaapi \ --enable-encodermpeg2_vaapi \ --enable-encodermjpeg_vaapi \ --enable-encodermpeg4 \ --enable-encodervp8_vaapi \ --enable-encodervp9_vaapi \ --enable-demuxeraac \ --enable-demuxeramr \ --enable-demuxeravi \ --enable-demuxeravr \ --enable-demuxeravs \ --enable-demuxeravs2 \ --enable-demuxerh264 \ --enable-demuxermjpeg \ --enable-demuxermp3 \ --enable-demuxermov \ --enable-demuxermpegts \ --enable-demuxermpegvideo \ --enable-demuxerogg \ --enable-demuxerrawvideo \ --enable-demuxerrtp \ --enable-demuxerrtsp \ --enable-demuxervc1 \ --enable-demuxerwav \ --enable-demuxerxmv \ --enable-demuxerhevc \ --enable-demuxerimage2 \ --enable-demuxerspdif \ --enable-muxermjpeg \ --enable-muxerspdif \ --enable-muxeravi \ --enable-muxeramr \ --enable-muxerflv \ --enable-muxerh264 \ --enable-muxerhevc \ --enable-muxerimage2 \ --enable-muxerm4v \ --enable-muxermov \ --enable-muxermp3 \ --enable-muxermp4 \ --enable-muxermpeg2video \ --enable-muxermpegts \ --enable-muxerogg \ --enable-muxerrawvideo \ --enable-muxerrtp \ --enable-muxerrtp_mpegts \ --enable-muxerrtsp \ --enable-muxervc1 \ffmpeg与ffplay命令将视频转为interlace类型的视频ffmpeg –i input.avi -vf tinterlacemode4:flagslow_pass_filter output.avi视频分辨率转换ffmpeg -ss time -t duration -i clip_in -vf scalew:h,setdar16:9 clip_out -hide_banner 说明 clip_in 输入视频 clip_out 输出视频 w:h输出的分辨率建议为169查看视频信息ffprobe -show_packets selcet_streams 0/1/2 clips ffprobe -show_framess selcet_streams 0/1/2 clips ffprobe -show_streams selcet_streams 0/1/2 clips //保存视频streams信息到文件中 ffprobe -i clips -select_streams 0/1/2 -show_streams -print_format json show_treams.txt //保存视频packets 的data信息到文件中 ffprobe -i clips -select_streams 0/1/2 -show_packets -show_data show_packets_data.txt //仅仅保存视频streams 的idnex和codec_type信息到文件中 ffprobe -i clips -select_streams 0/1/2 -show_steams -show_entries streamindex,codec_type //仅仅保存视频streams 的idnex和codec_type信息并以xml格式保存到文件中 ffprobe -i clips -select_streams 0/1/2 -show_steams -show_entries streamindex,codec_type -of xml info.txt //仅仅保存视频frames的key_frame信息并以xml格式保存到文件中 ffprobe -i clips -select_streams 0/1/2 -show_frames -show_entries framekey_frame -of xml info.txt //仅仅保存视频packet的pts_time和size信息并以json格式保存到文件中 fprobe -i clips -select_streams 0/1/2 -show_packets -show_entries packetpts_time,size -print_format json show_packets.txt播放视频和图片ffplay -vcodec codec clips 说明 clips需要播放的视频名称 codec 播放视频的解码器 //显示单张图片 ffplay -pix_fmt image_fmts-s wxh image //显示多图片二进制文件 ffplay -f rawvideo -pix_fmt image_fmts -s wxh image.bin视频截取ffplay -ss start_time -t duration -i clips --pix_fmt format -vf scalewxh outputclips 说明 start_time :原始视频起始时间 duration 原始视频时间长度 clips原始视频名称 outputclips输出视频名称 scalewxh:视频输出分辨率数据流保存//保存网络流数据 ffmpeg -rtsp_transport tcp -i rtsp://ip:port/stream -vcodec copy -acodec copy -t 30 -f mp4 rtsp-out.mp4 ffmpeg -re -i clip -vcodec h264 -acodec aac -strict -2 -f rtsp -rtsp_transport tcp rtsp://192.168.0.139/live/test1 //分离audio和video ffmpeg -i clips -acodec -vn xxx.audio ffmpeg -i clips -vcodec -an xxx.video视频帧率和码率转换ffmpeg -r fps-input -i clip_in -r fps-output ouput ffmpeg -i input -b:v 800k output //单独设置一项其他参数会有变化 说明 fps-input输入视频fps fps-output输出视频fps clip_in:输入视频,可以是裸流也可以是封装视频 ouput输出视频一般为mp4,avi等 ffmpeg -i clips -vf w3840:h2160 -b:v 40M -minrate 40M -maxrate 40M -bufsize 120M -c:v copy-c:a copy output 说明 clip:输入视频,可以是裸流也可以是封装视频 ouput输出视频一般为mp4,avi等视频颜色调整fmpeg -i input -vf hueb1 -s wxh output 说明 input输入视频 output输出视频 wxh :输出的尺寸 vf:滤镜模块 hue调整视频色调、饱和度、亮度 h:色调角度度数0到360默认值为0 s:饱和度-10到10默认值为1 b:亮度-10到10默认值为0 colorbalance颜色平衡调整RGB得值的权重分为三个阶层用于调整饱和度和调整颜色偏移值 rs、gs、bs:调整红色绿色和蓝色阴影最暗的像素范围-1到1 rm、gm、bm:调整红色绿色和蓝色中间色中等像素范围-1到1 rh、gh、bh:调整红色绿色和蓝色的亮点最亮的像素范围-1到1图片格式和分辨率调整fmpeg -i input -pix_fmt fmt -s wxh output ffmpeg -s widthxheight -pix_fmt bayer_bggr8 -i input.bayer -pix_fmt rgb24 output.png ffmpeg -s widthxheight -pix_fmt nv12 -i input.jpg -f rawvideo output.nv12 说明 input输入图片一般为jpg和png等其他格式需要使用pix_fmt指定在-i前面 output: 输出图片名称,后缀可以是rgb,yuv,bayer(bayer格式支持输入不支持输出) fmtffmpeg支持的格式使用ffmpeg -pix_fmts查看 wxh:输出图片尺寸视频截图fmpeg -i input -ss start -t time -r fps -s wxh output fmpeg -i input -ss start -vframes cnt -s wxh output fmpeg -i input -ss start -f segment -segment_time 0.01 -frames framecnt -s wxh output 说明 input输入视频 ss: 开始截图时间 -t: 截图时长 -r:截图帧率 -s:输出尺寸 -vframes / -frames:截图数量 output:如IMAGE-%05d.jpg或者png,如果是yuv格式只输出一个文件视频提取ffmpeg -i input.mp4 -vn -c:a copy output.aac ffmpeg -i input.mp4 -an -c:v copy output.mp4 //提取h264裸流 ffmpeg -i input.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 output.264 说明 input输入视频 -vn/an 禁止视频 -c:a copy output视频名称视频帧提取ffprobe -v quiet -show_frames transcoded123.mp4 | grep pict_typetype | wc -l 说明 typeI,P,B代表I,P,B帧视频裸流转换ffmpeg -f rawvideo -pix_fmt xxx -s wxh -i input.bin -f rawvideo -pix_fmt xxxx -s wxh output.bin eg: ffmpeg -f rawvideo -pix_fmt argb-s 1920x1080 -i input.bin -f rawvideo -pix_fmt yuyv422 -s 1280x720 output.bin 将 argb格式的1080p的input.bin转换为yuyv格式的720p的output.bin 说明 将裸流input转换为output例如将YUV的裸流转化为RGB的裸流视频编码参数设置ffmpeg -i input -c:v libx264 -profile:v main -preset:v fast -level 3.1 -x264opts crf18 编码效率和视频质量的取舍: 强行配置biterate或者强行配置profile/level还有2个参数可以控制编码效率。 一个是preset一个是crf。preset也挺粗暴基本原则就是如果你觉得编码太快或太慢了想改改可以用profile。 preset有如下参数可用 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo. 编码加快意味着信息丢失越严重输出图像质量越差。 CRF(Constant Rate Factor): 范围 0-51: 0是编码毫无丢失信息, 23 is 默认, 51 是最差的情况。相对合理的区间是18-28. 值越大压缩效率越高但也意味着信息丢失越严重输出图像质量越差raw视频多帧转换ffmpeg -f rawvideo -s wxh -pix_fmt fmt -i input out_%00d.bmp 将输入rawvideo(一般是多帧yuv格式的图片)文件的每一帧转化为bmp,也可以转化为pngffmpeg分离RGB中的rgb分量FFmpeg filter过滤器使用详解输出三个拷贝ffmpeg -i input.rgb -filter_complex split3[r][g][b] \ -map [r] red_channel.png -map [g] green_channel.png -map [b] blue_channel.pngffmpeg -i input.png -filter_complex \ [0:v]split[r][g][b];[r]palettegenstats_modesingle[palette];[palette][g][b]paletteuse extracted_r.pngffmpeg命令行基操(一)-filter_complexffmpeg -i 广西.png -filter_complex [0:v]split3[tmp1][tmp2][tmp3];\ [tmp2]cropiw:ih/2:0:0,hflip[flip2];\ [tmp3]cropiw:ih/2:0:0,vflip[flip3];\ [tmp1][flip2]overlay0:0[overlay1];\ [overlay1][flip3]overlay0:H/2 3.png引号中,有多个线性链,同一条用逗号分开,不同的用分号分开[0:v]split3[tmp1][tmp2][tmp3]表示把输入源也就是广西.png复制输出三份,每一份名称依次是[tmp1][tmp2][tmp3].这个时候我们有[tmp1][tmp2][tmp3]三分图像,再看[tmp2]cropiw:ih/2:0:0,hflip[flip2], 这个指的是输入是[tmp2]这个图像,经过crop即剪切,剪切位置是0,0处开始,剪切的长度高度是iw:ih/2,然后经过hflip即水平翻转输出[flip2].[tmp3]cropiw:ih/2:0:0,vflip[flip3]效果和[tmp2]cropiw:ih/2:0:0,hflip[flip2]差不多,只不过是裁剪后的图像的翻转方式从水平变成了垂直翻转.然后就是[tmp1][flip2]overlay0:0[overlay1],在此之前,我们的[tmp1]这份图像是没有修改过的,所以这段的作用是在tmp1的0,0位置把flip2粘贴上去,然后输出overlay1最后是[overlay1][flip3]overlay0:H/2,一样是粘贴,只不过位置变成了0,h/2最后输出3.png图像保存下来