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

ffmpeg图片压缩到指定存储大小-C# 使用神器 压缩视频,流畅清晰体积小

原创:找图网 2023-05-03 06:00:39
  • ffmpeg 常用命令

  • FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。

    本文将简要介绍一下 FFMPEG 库的基本目录结构及其功能,然后详细介绍一下我们在日常工作中,如何使用 ffmpeg 提供的工具来处理音视频文件。

    在讲解 FFMPEG 命令之前,我们先要介绍一些音视频格式的基要概念。

    我们按使用目的可以将 FFMPEG 命令分成以下几类:

    然后将编码的数据包传送给解码器(除非为数据流选择了流拷贝,请参阅进一步描述)。 解码器产生未压缩的帧(原始视频/ PCM音频/ ...),可以通过滤波进一步处理(见下一节)。 在过滤之后,帧被传递到编码器,编码器并输出编码的数据包。 最后,这些传递给复用器,将编码的数据包写入输出文件。

    默认情况下,ffmpeg只包含输入文件中每种类型(视频,音频,字幕)的一个流,并将其添加到每个输出文件中。 它根据以下标准挑选每一个的“最佳”:对于视频,它是具有最高分辨率的流,对于音频,它是具有最多channel的流,对于字幕,是第一个字幕流。 在相同类型的几个流相等的情况下,选择具有最低索引的流。

    您可以通过使用-vn / -an / -sn / -dn选项来禁用某些默认设置。 要进行全面的手动控制,请使用-map选项,该选项禁用刚描述的默认设置。

    下面我们就来详细介绍一下这些命令。

    FFMPEG 可以使用下面的参数进行基本信息查询。例如,想查询一下现在使用的 FFMPEG 都支持哪些 filter,就可以用 ffmpeg -filters 来查询。详细参数说明如下:

    接下来介绍的是 FFMPEG 处理音视频时使用的命令格式与参数。

    下面是 FFMPEG 的基本命令格式:

    ffmpeg 通过 -i 选项读取输任意数量的输入“文件”(可以是常规文件,管道,网络流,抓取设备等,并写入任意数量的输出“文件”。

    原则上,每个输入/输出“文件”都可以包含任意数量的不同类型的视频流(视频/音频/字幕/附件/数据)。 流的数量和/或类型是由容器格式来限制。 选择从哪个输入进入到哪个输出将自动完成或使用 -map 选项。

    要引用选项中的输入文件,您必须使用它们的索引(从0开始)。 例如。 第一个输入文件是0,第二个输入文件是1,等等。类似地,文件内的流被它们的索引引用。 例如。 2:3是指第三个输入文件中的第四个流。

    上面就是 FFMPEG 处理音视频的常用命令,下面是一些常用参数:

    -an(输出) 禁用录音。

    -acodec编解码器(输入/输出) |设置音频编解码器。这是-codec的别名:a。

    -sample_fmt [:stream_specifier] sample_fmt(输出,每个流) |设置音频采样格式。使用-sample_fmts获取支持的样本格式列表。

    -af filtergraph(输出) |创建由filtergraph指定的过滤器图,并使用它来过滤流。

    了解了这些基本信息后,接下来我们看看 FFMPEG 具体都能干些什么吧。

    首先通过下面的命令查看一下 mac 上都有哪些设备。

    注意,桌面的输入对帧率没有要求,所以不用限制桌面的帧率。其实限制了也没用。

    ffmpeg -f avfoundation -i 1:0 -r 29.97 -c:v libx264 -crf 0 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k

    流拷贝是通过将 copy 参数提供给-codec选项来选择流的模式。它使得ffmpeg省略了指定流的解码和编码步骤,所以它只能进行多路分解和多路复用。 这对于更改容器格式或修改容器级元数据很有用。 在这种情况下,上图将简化为:

    由于没有解码或编码,速度非常快,没有质量损失。 但是,由于许多因素,在某些情况下可能无法正常工作。 应用过滤器显然也是不可能的,因为过滤器处理未压缩的数据。

    上面的命令表式的是音频、视频都直接 copy,只是将 mp4 的封装格式转成了flv。

    在编码之前,ffmpeg可以使用libavfilter库中的过滤器处理原始音频和视频帧。 几个链式过滤器形成一个过滤器图形。 ffmpeg区分两种类型的过滤器图形:简单和复杂。

    简单的过滤器图是那些只有一个输入和输出,都是相同的类型。 在上面的图中,它们可以通过在解码和编码之间插入一个额外的步骤来表示:

    简单的filtergraphs配置了per-stream-filter选项(分别为视频和音频使用-vf和-af别名)。 一个简单的视频filtergraph可以看起来像这样的例子:

    请注意,某些滤镜会更改帧属性,但不会改变帧内容。 例如。 上例中的fps过滤器会改变帧数,但不会触及帧内容。 另一个例子是setpts过滤器,它只设置时间戳,否则不改变帧。

    复杂的过滤器图是那些不能简单描述为应用于一个流的线性处理链的过滤器图。 例如,当图形有多个输入和/或输出,或者当输出流类型与输入不同时,就是这种情况。

    复杂的过滤器图使用-filter_complex选项进行配置。 请注意,此选项是全局性的,因为复杂的过滤器图形本质上不能与单个流或文件明确关联。

    -lavfi选项等同于-filter_complex。

    一个复杂的过滤器图的一个简单的例子是覆盖过滤器,它有两个视频输入和一个视频输出,包含一个视频叠加在另一个上面。 它的音频对应是amix滤波器。

    先通过 ffplay 找到要删除 LOGO 的位置

    使用 delogo 滤镜删除 LOGO

    crop 格式:crop=out_w:out_h:x:y

    如果要修改为垂直翻转可以用vflip。

    首先创建一个 文件,文件内容如下:

    file '1.flv'

    file '2.flv'

    file '3.flv'

    然后执行下面的命令:

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

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

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

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

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

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

  • 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〃

    文/骚之哈塞给(作者)

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