96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

ffmpeg 压缩图片-ffmpeg基础知识

原创:找图网 2023-05-03 06:01:33
  • FFmpeg功能命令汇总

  • 前言

    如此强大的FFmpeg,能够实现视频采集、视频格式转化、视频截图、视频添加水印、视频切片、视频录制、视频推流、更改音视频参数功能等。通过终端命令如何实现这些功能,Richy在本文做一记录,以备之后查阅。

    注意:下面一一列举的命令,未归类整理,命令参数供参考。

    如果参数有误,大家可对照文章- FFmpeg参数命令 ,进行修改。

    第一组

    1.分离视频音频流

    ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流

    2.视频解复用

    ffmpeg Ci 4 Cvcodec copy Can Cf m4v test.264

    ffmpeg Ci Cvcodec copy Can Cf m4v test.264

    3.视频转码

    ffmpeg Ci 4 Cvcodec h264 Cs 352*278 Can Cf m4v test.264

    //转码为码流原始文件

    ffmpeg Ci 4 Cvcodec h264 Cbf 0 Cg 25 Cs 352*278 Can Cf m4v test.264 //转码为码流原始文件

    ffmpeg Ci -vcodec mpeg4 Cvtag xvid Cqsame test_ //转码为封装文件

    说明: -bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制

    4.视频封装

    ffmpeg Ci video_file Ci audio_file Cvcodec copy Cacodec copy output_file

    5.视频剪切

    ffmpeg Ci Cr 1 Cf image2 image-% //提取图片

    ffmpeg -ss 0:1:30 -t 0:0:20 -i -vcodec copy -acodec copy //剪切视频//-r 提取图像的频率,-ss 开始时间,-t 持续时间

    6.视频录制

    ffmpeg Ci rtsp://192.168.3.205:5555/test Cvcodec copy

    7、利用ffmpeg视频切片

    主要把视频源切成若干个.ts格式的视频片段然后生成一个.m3u8的切片文件索引提供给html5的video做hls直播源

    命令如下:

    ffmpeg -i 视频源地址 -strict -2 -c:v libx264 -c:a aac -f hls m3u8文件输出地址

    8、ffmpeg缩放视频

    假设原始视频尺寸是 1080p(即 1920×1080 px,16:9),使用下面命令可以缩小到 480p:

    命令如下:

    ffmpeg -i 视频源地址 -vf scale=853:480 -acodec aac -vcodec h264 视频输出地址(如:4)

    各个参数的含义:-i a.mov 指定待处理视频的文件名-vf scale=853:480 vf 参数用于指定视频滤镜,其中 scale 表示缩放,后面的数字表示缩放至 853×480 px,其中的 853px 是计算而得,因为原始视频的宽高比为 16:9,所以为了让目标视频的高度为 480px,则宽度 = 480 x 9 / 16 = 853-acodec aac 指定音频使用 aac 编码。注:因为 ffmpeg 的内置 aac 编码目前(写这篇文章时)还是试验阶段,故会提示添加参数 “-strict -2” 才能继续,尽管添加即可。又或者使用外部的 libfaac(需要重新编译 ffmpeg)。-vcodec h264 指定视频使用 h264 编码。注:目前手机一般视频拍摄的格式(封装格式、文件格式)为 mov 或者 mp4,这两者的音频编码都是 aac,视频都是 h264。4 指定输出文件名上面的参数 scale=853:480 当中的宽度和高度实际应用场景中通常只需指定一个,比如指定高度为 480 或者 720,至于宽度则可以传入 “-1” 表示由原始视频的宽高比自动计算而得。即参数可以写为:scale=-1:480,当然也可以 scale=480:-1

    9、ffmpeg裁剪

    有时可能只需要视频的正中一块,而两头的内容不需要,这时可以对视频进行裁剪(crop),比如有一个竖向的视频 1080 x 1920,如果指向保留中间 1080×1080 部分命令如下:ffmpeg -i 视频源地址 -strict -2 -vf crop=1080:1080:0:420 视频输出地址(如:4)

    其中的 crop=1080:1080:0:420 才裁剪参数,具体含义是 crop=width:height:x:y,其中 width 和 height 表示裁剪后的尺寸,x:y 表示裁剪区域的左上角坐标。比如当前这个示例,我们只需要保留竖向视频的中间部分,所以 x 不用偏移,故传入0,而 y 则需要向下偏移:(1920 C 1080) / 2 = 420

    10. 转视频格式

    ffmpeng -i 4 -c:v libx264 -crf 24

    其中 -crf 很重要,是控制转码后视频的质量,质量越高,文件也就越大。

    此值的范围是 0 到 51:0 表示高清无损;23 是默认值(如果没有指定此参数);51 虽然文件最小,但效果是最差的。

    值越小,质量越高,但文件也越大,建议的值范围是 18 到 28。而值 18 是视觉上看起来无损或接近无损的,当然不代表是数据(技术上)的转码无损。

    第二组

    1.ffmpeg 把文件当做直播推送至服务器 (RTMP + FLV)

    ffmpeg - re -i 4 -c copy - f flv rtmp://w.

    2.将直播的媒体保存到本地

    ffmpeg -i rtmp://r. -c copy

    3.将一个直播流,视频改用h264压缩,音频改用faac压缩,送至另一个直播服务器

    ffmpeg -i rtmp://r. -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://w.

    4.提取视频中的音频,并保存为mp3 然后输出

    ffmpeg -i -b:a 128k 3

    第三组

    1.获取视频的信息

    ffmpeg -i

    2.将图片序列合成视频

    ffmpeg -f image2 -i image%d.jpg

    上面的命令会把当前目录下的图片(名字如:. . 等...)合并成

    3.将视频分解成图片序列

    ffmpeg -i image%d.jpg

    上面的命令会生成. . ...

    支持的图片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI

    4.为视频重新编码以适合在iPod/iPhone上播放

    ffmpeg -i source_ input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_4

    5.为视频重新编码以适合在PSP上播放

    ffmpeg -i source_ -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_4

    6.从视频抽出声音.并存为Mp3

    ffmpeg -i source_ -vn -ar 44100 -ac 2 -ab 192 -f mp3 3

    7.将wav文件转成Mp3

    ffmpeg -i son_ -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_3

    8.将.avi视频转成.mpg

    ffmpeg -i video_ video_

    9.将.mpg转成.avi

    ffmpeg -i video_ video_

    10.将.avi转成gif动画(未压缩)

    ffmpeg -i video_ gif_

    11.合成视频和音频

    ffmpeg -i -i video_ video_

    12.将.avi转成.flv

    ffmpeg -i video_ -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_

    13.将.avi转成dv

    ffmpeg -i video_ -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_

    或者:

    ffmpeg -i video_ -target pal-dv video_

    14.将.avi压缩成divx

    ffmpeg -i video_ -s 320x240 -vcodec msmpeg4v2 video_

    15.将Ogg Theora压缩成Mpeg dvd

    ffmpeg -i film_sortie_ -s 720x576 -vcodec mpeg2video -acodec mp3 film_

    16.将.avi压缩成SVCD mpeg2

    NTSC格式:

    ffmpeg -i video_ -target ntsc-svcd video_

    PAL格式:

    ffmpeg -i video_ -target pal-dvcd video_

    17.将.avi压缩成VCD mpeg2

    NTSC格式:

    ffmpeg -i video_ -target ntsc-vcd video_

    PAL格式:

    ffmpeg -i video_ -target pal-vcd video_

    18.多通道编码

    ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

    19.从flv提取mp3

    ffmpeg -i -ab 128k 3

    第四组

    1、将文件当做直播送至live

    ffmpeg -re -i 4 -c copy -f flv rtmp://server/live/streamName

    2、将直播媒体保存至本地文件

    ffmpeg -i rtmp://server/live/streamName -c copy

    3、将其中一个直播流,视频改用h264压缩,音频不变,送至另外一个直播服务流

    ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream

    4、将其中一个直播流,视频改用h264压缩,音频改用faac压缩,送至另外一个直播服务流

    ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream

    5、将其中一个直播流,视频不变,音频改用faac压缩,送至另外一个直播服务流

    ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream

    6、将一个高清流,复制为几个不同视频清晰度的流重新发布,其中音频不变

    ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k

    7、功能一样,只是采用-x264opts选项

    ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k

    8、将当前摄像头及音频通过DSSHOW采集,视频h264、音频faac压缩后发布

    ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name

    9、将一个JPG图片经过h264压缩循环输出为mp4视频

    -i -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y 4

    10、将普通流视频改用h264压缩,音频不变,送至高清流服务(新版本FMS live=1)

    ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1〃

    文/骚之哈塞给(作者)

  • ffmpeg基础知识

  • ffmpeg是音视频处理的c库, 音视频在网络传输过程中,由于数据量大,所有需要进行压缩

    压缩目的为了去除冗余信息,冗余信息分为:

    1、空间冗余:图像相邻像素之间有较强的相关性

    2、时间冗余:视频序列的相邻图像之间内容相似

    3、 编码冗余:不同像素值出现的概率不同

    ​4、 视觉冗余:人的视觉系统对某些细节不敏感

    ​ 5、知识冗余:规律性的结构可由先验知识和背景知识得到

    ● 无损压缩(Winzip)

    ​ 压缩前解压缩后图像完全一致

    ​ 压缩比低

    ● 有损压缩(H.264)

    ​ 压缩前解压缩后图像不一致

    ​ 压缩比高

    ​ 利用人的视觉系统的特性(人眼能见的动画频率和图像细节有限制)

    音视频压缩其实就是对音视频进行编码,

    视频编码格式

    音频编码格式

    封装格式

    流媒体协议

    YUV

    ,是一种 颜色 编码 方法。常使用在各个视频处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。

    YUV是编译true-color颜色空间(colorspace)的种类,Y'UV,YUV, YCbCr , YPbPr 等专有名词都可以称为YUV,彼此有重叠。“Y”表示

    明亮度

    (Luminance、Luma),“U”和“V”则是**[色度]

    YUV格式有两大类:(平面格式)planar和(打包格式)packed。

    1.planar:先存储Y,然后U,然后V

    2.packed:yuv交叉存储

    还有我们常说的YUV420sp与YUV420p。

    YUV420sp: 一种two-plane模式,即Y和UV分为两个平面,U、V交错排列。

    YUV420p: 先把U存放完后,再存放V。UV是连续的。

    YUV420的数据大小为: 亮度(行×列) + V(行×列/4) + U(行×列/4)即:W H 3/2,

    普遍的编码器都以接受planar的I420数据(YUV420P)

    4*4的I420数据排列如下:

    y1 y2 y3 y4

    y5 y6 y7 y8

    y9 y10 y11 y12

    y13 y14 y15 y16

    u1 u2 u3 u4

    v1 v2 v3 v4

    Android相机的采集的视频是NV21(YUV420sP), 也是YUV的格式 只不过U和V的交叉的。

    y1 y2 y3 y4

    y5 y6 y7 y8

    y9 y10 y11 y12

    y13 y14 y15 y16

    u1 v1 u2 v2

    u3 v3 u4 v4

    在采集相机数据时需要把UV数据给转换成上面的 顺序。

    I frame :帧内编码帧 ,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。

    P frame: 前向预测编码帧,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;

    B frame: 双向预测内插编码帧 ,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;

    I frame:自身可以通过视频解压算法解压成一张单独的完整的图片。

    P frame:需要参考其前面的一个I frame 或者B frame来生成一张完整的图片。

    B frame:则要参考其前一个I或者P帧及其后面的一个P帧来生成一张完整的图片。

    PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来

    DTS:Decode Time Stamp。DTS主要是标识读入内存中的帧数据在什么时候开始送入解码器中进行解码。

    在没有B帧存在的情况下DTS的顺序和PTS的顺序应该是一样的。

    DTS主要用于视频的解码,在解码阶段使用。PTS主要用于视频的同步和输出.在显示的时候使用。

    如上图:I frame 的解码不依赖于任何的其它的帧.而p frame的解码则依赖于其前面的I frame或者P frame.B frame的解码则依赖于其前的最近的一个I frame或者P frame 及其后的最近的一个P frame.

    libavformat

    ​ 用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;音视频的格式解析协议,为 libavcodec 分析码流提供独立的音频或视频码流源。

    libavcodec

    ​ 用于各种类型声音/图像编解码;该库是音视频编解码核心,实现了市面上可见的绝大部分解码器的功能,libavcodec 库被其他各大解码器 ffdshow,Mplayer 等所包含或应用。

    libavfilter

    ​ filter(FileIO、FPS、DrawText)音视频滤波器的开发,如水印、倍速播放等。

    libavutil

    ​ 包含一些公共的工具函数的使用库,包括算数运算 字符操作;

    libswresample

    ​ 原始音频格式转码。

    libswscale

    ​ (原始视频格式转换)用于视频场景比例缩放、色彩映射转换;图像颜色空间或格式转换,如 rgb565,rgb888 等与 yuv420 等之间转换。

    音视频解5封装流程:

    ffmpeg解码流程:

  • C# 使用神器 压缩视频,流畅清晰体积小

  • 转换压缩视频,要求视频通过 ffmpeg 压缩后视频清晰不卡顿,并且视频体积要求比较小

    -r 帧率 -r 12 一秒12帧,一秒15帧可以看到比较流畅。

    -vf scale=1366:768 分辨率可以设置小一点,为了清晰可以适当调整,同时也会影响到视频体积大小。

    -crf 这里设置36, 一般18-28 就差不多了,这里因为要求视频压缩后越小越好,因此调整为36。

    以上三条把握好,就可以压缩出来体积小清晰流畅的视频了,具体压缩效果以及参数可以根据现场情况自己进行测试。

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com