FFplay文档解读-43-视频过滤器十八

news2025/7/10 6:07:16

29.170 telecine

将电视电影处理应用于视频。

此过滤器接受以下选项:

first_field
选项解释
top, ttop field first
bottom, b底部字段优先默认值为top
pattern

一串数字,表示希望应用的下拉模式。 默认值为23

Some typical patterns:

NTSC output (30i):
27.5p: 32222
24p: 23 (classic)
24p: 2332 (preferred)
20p: 33
18p: 334
16p: 3444

PAL output (25i):
27.5p: 12222
24p: 222222222223 ("Euro pulldown")
16.67p: 33
16p: 33333334

29.171 threshold

将阈值效果应用于视频流。

此过滤器需要四个视频流才能执行阈值处理。 第一个流是我们正在过滤的流。 第二流保持阈值,第三流保持最小值,最后,第四流保持最大值。

过滤器接受以下选项:

planes

设置要处理的平面,将复制未处理的平面。 默认值为0xf,将处理所有平面。

例如,如果第一流像素的分量值小于来自第二阈值流的像素分量的阈值,则将拾取第三流值,否则将拾取第四流像素分量值。

使用颜色源过滤器可以执行各种类型的阈值处理:

29.171.1 示例

  • 二进制阈值,使用灰色作为阈值:

      ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=black -f lavfi -i color=white -lavfi threshold output.avi
    
  • 反转二进制阈值,使用灰色作为阈值:

      ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -f lavfi -i color=black -lavfi threshold output.avi
    
  • 截断二进制阈值,使用灰色作为阈值:

      ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=gray -lavfi threshold output.avi
    
  • 阈值为零,使用灰色作为阈值:

      ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -i 320x240.avi -lavfi threshold output.avi
    
  • 使用灰色作为阈值将反转阈值设置为零:

      ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=white -lavfi threshold output.avi
    

学习地址:音视频新手快速入门必备系列-FFmpeg+SDL播放器开发实现-学习视频教程-腾讯课堂
【文章福利】免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~  

  

29.172 thumbnail

在给定的连续帧序列中选择最具代表性的帧。

过滤器接受以下选项:

n

设置帧批量大小进行分析; 在一组n帧中,过滤器将选择其中一个,然后处理下一批n帧直到结束。 默认值为100

由于过滤器会跟踪整个帧序列,因此较大的n值将导致较高的内存使用量,因此不建议使用较高的值。

29.172.1 示例

  • 50帧提取一张图片:

      thumbnail=50
    
  • 使用ffmpeg创建缩略图的完整示例:

      ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
    

29.173 tile

将几个连续的帧拼接在一起。

过滤器接受以下选项:

layout

设置网格大小(即行数和列数)。有关此选项的语法,请检查(ffmpeg-utils)视频大小语法。

nb_frames

设置给定区域中要渲染的最大帧数。它必须小于或等于wxh。默认值为0,表示将使用所有区域。

margin

设置外边框边距(以像素为单位)。

padding

设置内边框厚度(即帧之间的像素数)。有关更高级的填充选项(例如边缘的值不同),请参阅填充视频滤镜。

color

指定未使用区域的颜色。有关此选项的语法,请检查(ffmpeg-utils)颜色语法。颜色的默认值为"black"

overlap

将多个连续帧拼接在一起时,设置要重叠的帧数。该值必须介于0nb_frames -1之间。

init_padding

在显示第一个输出帧之前,将帧数设置为最初为空。这可以控制获得第一个输出帧的时间。该值必须介于0nb_frames -1之间。

29.173.1 示例

  • 在电影中制作所有关键帧('-skip_frame nokey')8x8 PNG图块:

      ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
    

'-vsync 0'是必要的,以防止ffmpeg复制每个输出帧以适应最初检测到的帧速率。

  • 使用混合平面和命名选项在3x2帧的区域中显示5张图片,其间有7个像素,初始边距为2像素:

      tile=3x2:nb_frames=5:padding=7:margin=2
    

29.174 tinterlace

执行各种类型的时域隔行扫描。

帧从1开始计数,因此第一个输入帧被视为奇数。

过滤器接受以下选项:

mode

指定隔行扫描的模式。 此选项也可以单独指定为值。 请参阅下文,了解此选项的值列表。

可用值包括:

merge, 0

将奇数帧移动到上部字段,甚至移动到下部字段,以半帧速率生成双倍高度帧。

------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111                           33333
22222                           44444
11111                           33333
22222                           44444
11111                           33333
22222                           44444
11111                           33333
22222                           44444

drop_even, 1

仅输出奇数帧,偶数帧被丢弃,生成半帧速率不变的帧。

------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111                           33333
11111                           33333
11111                           33333
11111                           33333

drop_odd, 2

仅输出偶数帧,丢弃奇数帧,生成半帧速率不变的帧。

------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
            22222                           44444
            22222                           44444
            22222                           44444
            22222                           44444

pad, 3

将每个帧扩展到全高,但用黑色填充交替行,以相同的输入帧速率生成具有双倍高度的帧。

------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444

interleave_top, 4

将奇数帧的上场与偶数帧的下场交错,生成半帧率不变的帧。

------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-

Output:
11111                           33333
22222                           44444
11111                           33333
22222                           44444

interleave_bottom, 5

将奇数帧的下部场与偶数帧的上部场交织,生成半帧速率不变的帧。

------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444

Output:
22222                           44444
11111                           33333
22222                           44444
11111                           33333

interlacex2, 6

双帧速率,高度不变。 插入帧,每个帧包含来自前一输入帧的第二时间字段和来自下一输入帧的第一时间字段。 此模式依赖于top_field_first标志。 对于没有字段同步的隔行扫描视频显示很有用。

------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111   22222   22222   33333   33333   44444   44444
11111   11111   22222   22222   33333   33333   44444
11111   22222   22222   33333   33333   44444   44444
11111   11111   22222   22222   33333   33333   44444

mergex2, 7

将奇数帧移动到上部字段,甚至移动到下部字段,以相同的帧速率生成双倍高度的帧。

------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444

不推荐使用数字值,但出于向后兼容性原因,将接受这些值。

合并默认模式。

flags

指定影响过滤器进程的标志。

标志的可用值是:

low_pass_filter,vlfp

在滤波器中启用线性垂直低通滤波。 从包含高频垂直细节的渐进源创建隔行目标时,需要垂直低通滤波。 过滤将减少交错'twitter'和莫尔图案。

complex_filter,cvlfp

启用复杂的垂直低通滤波。 这将略微减少交织’twitter’和莫尔图案,但更好地保留细节和主观锐度印象。

垂直低通滤波只能用于'mode'interleave_topinterleave_bottom

29.175 tonemap

来自不同动态范围的色调图颜色。

此过滤器需要单精度浮点数据,因为它需要对(并且可以输出)超出范围的值进行操作。 需要另一个过滤器(如zscale)将结果帧转换为可用格式。

实现的色调映射算法仅适用于线性光,因此输入数据应预先线性化(并且可能正确标记)。

ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT

29.175.1 选项

过滤器接受以下选项。

tonemap

设置要使用的色调映射算法。

可能的值如下:

解释
none不要应用任何色调映射,只能去饱和过亮像素
clip硬剪辑任何超出范围的值。 使用它可以获得范围内值的完美颜色精度,同时扭曲超出范围的值
linear将整个参考色域拉伸到显示器的线性倍数
gamma在色调曲线之间进行对数转换
reinhard使用非线性对比度,通过简单的曲线保持整体图像亮度,从而使细节变平并降低色彩精度
hablereinhard更好地保留黑暗和明亮的细节,代价是略微变暗一切。 当细节保存比颜色和亮度准确性更重要时使用它
mobius平滑地绘制超出范围的值,同时尽可能保留范围内材料的对比度和颜色。 当颜色准确性比细节保存更重要时使用它

默认值是:none

param

调整色调映射算法。

这会影响以下算法:

算法解释
none忽视
linear指定拉伸时使用的比例因子。 默认为1.0
gamma指定函数的指数。 默认为1.8
clip指定一个额外的线性系数,在剪切前乘以信号。 默认为1.0
reinhard在显示峰值处指定局部对比度系数。 默认为0.5,这意味着色域内值约为剪切时的一半
hable忽视
mobius指定从线性到mobius变换的过渡点。 低于此点的每个值都保证以1:1映射。 值越高,结果越准确,代价是丢失明亮的细节。 默认为0.3,由于陡峭的初始斜率仍然相当准确地保留了范围内的颜色
desat

对超过此亮度级别的高光应用去饱和度。 参数越高,保留的颜色信息就越多。 此设置有助于防止超高光的不自然地被吹掉的颜色,通过(平滑地)变成白色。 这使得图像感觉更自然,但代价是减少了关于超出范围颜色的信息。

默认值2.0有点保守,主要适用于天空或直接阳光照射的表面。 设置为0.0将禁用此选项。

仅当输入框架具有受支持的颜色标记时,此选项才有效。

peak

使用此值覆盖signal/nominal/reference峰值。 当显示元数据中的嵌入峰值信息不可靠或者从较低范围到较高范围的色调映射时有用。

29.176 transpose

在输入视频中转置包含列的行,并可选择将其翻转。

它接受以下参数:

dir

指定转置方向。

可以假设以下值:

    0, 4, cclock_flip

  逆时针旋转90度并垂直翻转(默认),即:

    L.R L.l
    . . -> . .
    l.r R.r

    1, 5, clock

  顺时针旋转90度,即:

    L.R l.L
    . . -> . .
    l.r r.R

    2, 6, cclock

  逆时针旋转90度,即:

    L.R R.r
    . . -> . .
    l.r L.l

    3, 7, clock_flip

  顺时针和垂直翻转旋转90度,即:

    L.R r.R
    . . -> . .
    l.r l.L

对于介于4-7之间的值,仅在输入视频几何体为纵向而非横向时才进行换位。 不推荐使用这些值,而应使用passthrough选项。

不推荐使用数值,应该删除它们以支持符号常量。

passthrough

如果输入几何与指定值指定的几何匹配,则不应用转置。 它接受以下值:

none

始终应用换位。

portrait

保留纵向几何体(当高度>=宽度时)。

landscape

保留横向几何体(当宽度>=高度时)。

默认值为none

例如,顺时针旋转90度并保留纵向布局:

transpose=dir=1:passthrough=portrait

上面的命令也可以指定为:

transpose=1:portrait

29.177 trim

修剪输入,使输出包含输入的一个连续子部分。

它接受以下参数:

start

指定保留部分的开始时间,即具有时间戳开始的帧将是输出中的第一帧。

end

指定将被丢弃的第一帧的时间,即紧接在具有时间戳结束的帧之前的帧将是输出中的最后一帧。

start_pts

这与start相同,但此选项以时基单位而不是秒为单位设置开始时间戳。

end_pts

这与end相同,但此选项以时基单位而不是秒为单位设置结束时间戳。

duration

输出的最大持续时间(以秒为单位)。

start_frame

应传递给输出的第一帧的编号。

end_frame

应删除的第一帧的编号。

'start''end''duration'表示为持续时间规范;请参阅(ffmpeg-utils)接受语法的持续时间语法

请注意,前两组开始/结束选项和'duration'选项查看帧时间戳,而_frame变体只计算通过过滤器的帧。另请注意,此过滤器不会修改时间戳。如果希望输出时间戳从零开始,请在修剪滤波器后插入一个setpts过滤器。

如果设置了多个开始或结束选项,则此过滤器会尝试贪婪并保留与至少一个指定约束匹配的所有帧。要仅保留一次匹配所有约束的零件,请链接多个修剪过滤器。

默认值是保留所有输入。所以可以设置例如只是最终值,以保持指定时间之前的一切。

例子:

  • 删除除输入的第二分钟以外的所有内容:

      ffmpeg -i INPUT -vf trim=60:120
    
  • 只保留第一秒:

      ffmpeg -i INPUT -vf trim=duration=1
    

29.178 unpremultiply

使用第二个流的第一个平面作为alpha,将alpha不成倍增效应应用于输入视频流。

两个流必须具有相同的尺寸和相同的像素格式。

过滤器接受以下选项:

planes

设置要处理的平面,将复制未处理的平面。 默认值为0xf,将处理所有平面。

如果格式有12个分量,则亮度为0。如果格式有34个分量:对于RGB格式,位0为绿色,位1为蓝色,位2为红色; 对于YUV格式,位0是亮度,位1是色度-U,位2是色度-V。 如果存在,alpha通道始终是最后一位。

inplace

不需要第二个输入进行处理,而是使用输入流中的alpha平面。

29.179 unsharp

锐化或模糊输入视频。

它接受以下参数:

luma_msize_x,lx

设置亮度矩阵水平尺寸。它必须是3到23之间的奇数。默认值为5

luma_msize_y,ly

设置亮度矩阵垂直大小。它必须是3到23之间的奇数。默认值为5

luma_amount,la

设置亮度效果强度。它必须是浮点数,合理的值介于-1.51.5之间。

负值会使输入视频模糊,而正值会使其锐化,零值将禁用效果。

默认值为1.0

chroma_msize_x,cx

设置色度矩阵水平尺寸。它必须是3到23之间的奇数。默认值为5

chroma_msize_y,cy

设置色度矩阵垂直大小。它必须是323之间的奇数。默认值为5

chroma_amount,ca

设置色度效果强度。它必须是浮点数,合理的值介于-1.51.5之间。

负值会使输入视频模糊,而正值会使其锐化,零值将禁用效果。

默认值为0.0

所有参数都是可选的,默认为字符串'5:5:1.0:5:5:0.0'的等效值。

29.179.1 示例

  • 应用强烈的亮度锐化效果:

      unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
    
  • 应用亮度和色度参数的强烈模糊:

      unsharp=7:7:-2:7:7:-2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

传统纸业如何实现数字化,S2B2C系统网站赋能渠道提升供应链管理效率

一千多年前&#xff0c;我们老祖宗发明了造纸术&#xff0c;纸张成为方便、廉价的信息载体&#xff0c;由此影响了中国乃至世界文明的进程。如今&#xff0c;随着信息技术的普及&#xff0c;纸张作为信息载体的功能日益弱化&#xff0c;但作为一种环保材料将会更广泛地融入我们…

通过宠物商店理解java面向对象

前言&#xff1a;本篇博客&#xff0c;适合刚刚学完java基础语法的但是&#xff0c;对于面向对象&#xff0c;理解不够深刻的读者&#xff0c;本文通过经典的宠物商店&#xff0c;来让读者深刻的理解&#xff0c;面向对象&#xff0c;IS-A&#xff0c;HAS-A法则。本文不仅仅是简…

Spring更简单保存和获取bean对象的方法(注解)

Spring更简单保存和获取bean对象的方法前置准备将bean对象更为简单地保存到Spring容器中&#xff08;使用注解&#xff09;【使用类注解】 (是写在类前的)为什么要这么多类注解&#xff1f;类注解之间的关系使用类注解 Bean 命名规则使用方法注解&#xff08;Bean&#xff09;不…

[MySQL]数据库的约束与表的设计

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 文章目录 1.数据库约束 1.1 约束类型 1.2 null 约束 1.…

Redis面试题

目录 面试题&#xff1a;谈谈你对Redis的理解&#xff1f; 面试题&#xff1a;Redis的基本数据类型 Redis的基本数据类型以及它们的应用场景&#xff1a; 面试题&#xff1a;redis内存淘汰机制 面试题&#xff1a;Redis持久化机制 RDB AOF 面试题&#xff1a;Redis写时复…

相似度系列-3:传统方法ROUGE ROUGE: A Package for Automatic Evaluation of Summaries

文章目录ROUGE: A Package for Automatic Evaluation of Summariesintroduction基础模型Rouge-NRouge_NmultiROUGE-L: Longest Common Subs equence1**Sentence-level LCS**2**Summary-Level LCS**ROUGE-W: Weighted Longest Common SubsequenceROUGE-S: Skip-Bigram Co-Occurr…

Python小总结

Python小总结一、open&#xff08;一&#xff09;open的定义&#xff1a;open是Python的内置函数&#xff0c;一般用于本地文件的读写操作。&#xff08;二&#xff09;open例子&#xff1a;二、with open&#xff08;一&#xff09;用途&#xff1a;with open是Python用来打开…

04 数学软件与建模---最优化模型

一、优化模型的数学描述 二、优化模型的分类 1.根据是否存在约束条件 有约束问题和无约束问题。 2.根据设计变量的性质 静态问题和动态问题。 3.根据目标函数和约束条件表达式的性质 线性规划&#xff0c;非线性规划&#xff0c;二…

PiL测试实战(上)| 模型生成代码的单元级PiL测试

前言 对于嵌入式代码&#xff0c;为了测试软件能否在目标芯片上实现预期的功能&#xff0c;通常需要进行PiL测试&#xff08;Processor-in-the-Loop-Testing&#xff09;。 目前市面上较为常见的嵌入式软件调试工具有PLS UDE和LAUTERBACH Trace32等。UDE和Trace32可以很好的完…

通俗易懂话GC-C#的内存管理

昨天和一个朋友聊到图像处理软件内存占用多的问题&#xff0c;然后很自然聊到了GC&#xff0c;回想起以往很初学者都问到类似的问题&#xff1a; 1、C#自己就会垃圾回收&#xff0c;为什么我还要关心垃圾回收&#xff1f; 2、GC可以回收垃圾&#xff0c;但回收的时候又会让线…

js深浅拷贝:保证赋值后改变第二个变量的值,不影响第一个变量的值

对于基本数据来说&#xff0c;将一个变量赋值给另一个变量&#xff0c;第二个变量值改变了&#xff0c;不会影响第一个变量&#xff1b;但对于复杂类型中的对象来讲&#xff0c;将一个对象赋值给另外一个对象&#xff0c;其实是将放对象内容的地址赋值给了第二个对象&#xff0…

Amazon EKS绑定alb 使用aws-load-balancer-controller(Ingress Controller)对外提供服务

1、创建AWS Load Balancer Controller 的 IAM 策略 亚马逊相关文档 下载地址 打开 策略 点击 创建策略 打开 IAM_Policy.json 复制内容粘贴到 json 点击下一步:标签 然后一直下一步 在下图中名称填写 AWSLoadBalancerControllerIAMPolicy 你也可以自定义名称。然后创建策略。…

尚医通_第11章_医院排班管理和搭建用户系统环境

尚医通_第11章_医院排班管理和搭建用户系统环境 文章目录尚医通_第11章_医院排班管理和搭建用户系统环境第一节、-医院排班管理需求分析一、医院排班管理需求1、页面效果2、接口分析第二节、医院排班管理-科室列表一、科室列表&#xff08;接口&#xff09;1、添加service接口和…

李峋同款爱心代码

李峋爱心代码背景代码运行pycharm打包成exe程序背景 最近大火的电视剧《点燃我温暖你》出现&#xff0c;令我的家庭地位进一步下降&#xff0c;因为男主“李峋”已经变成了她的大老公&#xff0c;而我就被打入冷宫. 为了满足她的“攀比心”&#xff0c;我连夜给她实现了粉红色爱…

第十节:多态【java】

目录 &#x1f340;1.多态 &#x1f4d6;1.1 多态的概念 &#x1f4d2;1.2 多态实现条件 &#x1f446;1.2.1向上转型 &#x1f4af;1.2.2重写 &#x1f531;1.2.3动态绑定和静态绑定 &#x1f308;1.2.4多态的应用 &#x1f447;1.2.5向下转型 &#x1f4d5;1.3多态的…

Java岗面试核心NIO有关知识总结

这篇文章主要是阅读了一些关于NIO的文章&#xff0c;对一些重要的部分进行了摘取总结。BIO、NIO、AIO的不同 BIO&#xff1a;同步阻塞IO模式&#xff0c;线程发起IO请求后&#xff0c;一直阻塞IO&#xff0c;直到缓冲区数据就绪后&#xff0c;再进行下一步操作。NIO&#xff1a…

SpringCloud基础知识【Hystrix熔断器】

SpringCloud基础知识【Hystrix熔断器】1. Hystrix概述2. Hystix-隔离2.1 线程池隔离2.2 信号量隔离2.3 Hystix隔离小结3. Hystix-降级3.1 服务提供方降级3.2 消费方降级3.3 Hystix降级小结4. Hystix-熔断4.1 代码演示4.1 熔断监控5. Hystix-限流1. Hystrix概述 Hystix&#xf…

基于概率距离削减法、蒙特卡洛削减法的风光场景不确定性削减(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

一文带你吃透数据库的约束,不做CRUD程序员

在SQL标准中&#xff0c;一共规定了6种不同的约束&#xff0c;包括非空约束&#xff0c;唯一约束和检查约束等&#xff0c;而在MySQL中是不支持检查约束的&#xff0c;所以这篇文章先对其余5种约束做一个详解和练习。 文章目录1. 约束的概念2. 约束的分类3. 非空约束4. 唯一约束…

.net 大型物流综合管理网络平台源码【免费分享】

淘源码&#xff1a;国内专业的免费源码下载平台 源码分享&#xff0c;需要源码学习可私信我&#xff01; 一、源码描述 这是一款大型的物流综合管理网络平台源码&#xff0c;十分完整实用&#xff0c;便于调试&#xff0c;涵盖了物流综合管理的全面内容&#xff0c;该源码运行比…