上场优先和下场优先的区别

转载自百度文库:  点我进入原文链接

一、为什么会有上场和下场

 

一个不停闪烁的光源,如果其频率达到每秒钟50次(也就是所说的频率50Hz),在人眼中他是不闪烁的。我们家里的电灯炮就是一亮一熄的,所以在我们的眼中没有感觉到他是一亮一熄的,是因为频率达到了50Hz。

 

根据这个原理,最初电视机每秒要传输的图像被定为50帧。认为这样图像在我们眼中才不闪烁。但是根据当时技术上能力,要每秒钟传输50帧图像很难办到。这要根据显像管的工作原理说起。显象管的工作原理是:图像的产生是通过显像管后部的电子枪向屏幕发射电子,电子撞到屏幕产生亮点。如果屏幕的分辨率为720*576的话,那么电子枪通过偏转线圈的控制从屏幕左上方开始,向右上方移动。一共要发射720个电子,然后向下移动重复576次后到达屏幕的最下方,通过发射电子的强弱来表示象素的亮度,完成一帧图象的传输。这样可以算出来。电子枪每传输一幅图像要发射720*576=414720个电子。如果每秒钟要传输50帧图像的话、那么他的工作频率就是414720*50=2073600/秒。这样高的频率电子枪无法达到,(真正的原因不是这样的,这只是图像的频率,图像要这么高的频率,信号的载波频率要求更高,更难达到要求,要讲清这方面的东西要很大的篇幅,再说我也不是很清楚,大家这样理解,意思是一样的)。这就是产生上场和下场的最初的原因——科学家们利用视觉的滞留性,让电子枪不按顺序发射电子,而是每发射一行隔一行,比如先发射奇数行13579……回头再发射2468……利用两次扫描来完成一幅图像,因为视觉的滞留性,我们看到的效果是差不多的。这样在图像效果影响不大的情况下,电子枪的工作频率降低了一半,在技术上是可以达到了。这样就出现了所谓的“场”,从而出现“上场优先”“下场优先”。

 

二、什么是上场优先、什么是下场优先

 

a:图像的传送

 

如果把一幅图像分成上下两半,分两次送到我们手里,我们所得到的信息是完整的,重要的是要告诉我先送来的那部份是上面的还是下面的,我才能得正确图象。这就是“上场优先”和“下场优先”的意思。先送上部就是上场优先(1就是奇数、奇数场)。先送下部,就是下场优先(2偶数。偶数场)。如果图像是一个人的全身像,我按正确的顺序摆放后,得到的图像才会是头在上面,脚在下面;如果顺序搞错了,那么就是头和脚在中间。图像的最上方和最下方都是人的腰部。但是在视频中,因为图像的像素高,也就是分成了很多块,虽然顺序放错了,但是它的位移不会偏离的很远,我们肉眼观察不出来,所能发觉的就是有抖动、毛刺等。出现的后果是跟视频的内容有关的。如果视频是单一、纯色的一个画面,那么不管场序正确与否,画面是没有什么不同的;如果是视频中是一个缓慢移动的物体,那么我们看到的可能是有些轻微的抖动,画面有些模糊。如果是一个有激烈运动的视频,那么就可能出现严重的毛刺。因为像素的内容变化大,一但错位,就很明显。

 

综上所述,一个视频信号在传送时,无论用上场优先还是下场优先都是可以的,重要的是要让接收设备知道所接收的信号是用那种场序,才能把图像正确的显示出来。无论视频是什么场序,播放时都是把视频所包涵的图像按顺序显示出来。唯一不同的是在传送每个单位的图像时是先传奇数场还是偶数场。这就是视频的场序。

 

b:图像的存储

 

无论是什么视频,存储时无凝都是把一序列的图片按顺序摆放,但是带有场的视频,它的每一幅图片又分成上场和下场两部分,在一幅图像应该占有的空间里,把上场放在前面还是放在后面。这也就是这个视频的场序问题,把上场放在前面就是上场优先。如果把这个视频导入编辑软件中,再把项目设置成下场优先,那么软件就把视频的上场当成下场,把下场当成上场,播放时像素发生错位,就出现了异常。我们的DV在拍摄的过程中也是一个存储图像的过程,如果你的DV拍摄方式是下场优先,就是说它先把第一个图像的偶数场的信息记录在磁带的第一个位置上,把奇数场的信息记录在第二个位子上,然后把第二个图像的偶数场放在第三个位置,第二个图像的奇数场的信息放在第四个位置,依次类推……,在采集的时候就要把软件的项目设成下场优先,也就是告诉软件这个磁带记录信息的方式,无论采集后数据如何存放,它都会把第一个位置采集来的数据当成第一个图像的下场,第二个位置当成上场,这样视频才得已真实的再现,这就是为什么采集时要把软件的场序设成和DV的场序一样的原因。

 

三、在编辑各种素材时为何要统一场序,素材如何去场?

 

1、闲话:这部份的内容是视频编辑中最重要的,也是网上谈的最多的话题,是越谈越让人糊涂的东西,很多“高手”“老师”谈到这些东西时总是涉及到一些很“高深”知识,说什么去场后信息损失了一半、合场时插值又怎么设定等等。让人越看越有畏惧感。很多贴子讨论了很多页面,最后还是有人说“还是不懂场是什么?”由于水平有限,我肯定谈不出什么高深的东西,肯定是把复杂的东西谈成很简单的东西,各位朋友也只能把这些作为参考。不要全部“信以为真”。

 

这个“场”本来是一个很简单的东西,在用摸拟信号的情况下,它只过就是把一帧图象分成两次传输或显示而己,再统一个场优先的问题就没事了。但是随着数字信号的出现、才使它变得越来越复杂!首先一个问题、把摸拟信号变成数字信号就是我们一般人很难理解的,涉及到计算机语言很多东西,再加上数字视频的格式种类多多。各种编码器也都有自己处理视频的方式方法。甚至连称呼“场”的方法都有很多种,所以要真正把“场”理解的很透彻,那是不容易的,我们前面所谈的场问题都是在理想的情况下谈的。如:把一幅图片分成两场就是把图片用剪刀剪成百页窗的形式,奇数行是上场,偶数行是下场。但是在数字信号中,很多东西是通过各种编码器内部的设定算出来的。如一个帧速率很低的视频,用软件把它的帧速提高,那么如果软件能保持后来的播放速度不变的话,原来的两帧之间就要加一些帧,这些帧都是“凭空”算出来的。软件是通过前后两帧的信息算出来的。为什么我要说它是“凭空”呢?因为不同的编辑软件算出的结果是不同的。即使同一个软件,不同的设置算出的结果也不相同。我所给的图像是定一的,为什么你们给我的结果不同呢?你们说是不是?这就是大家总谈的、用那种软件压缩好的一些原因。不同的软件压出的效果,或分场后所得的场内的信息是有差异地的。所以作为一般的后期制作者只要大概了解场的一般规律就可以了,不要太深研其内部的东西。钻的越深,越头痛。其实我发觉就连一些在电视台搞制作的“专业”人士、也不一定能把“场”讲的很清楚的,只是都有一定的经验,制作中都能避免“场”带来的副作用而已。

 

2、一点小经验:当你想动手研究“场”时,一定要找一些确定是带有正确场序的素材。而不要自己随便得个素材后、通过编辑软件输出不同场序的视频来研究。因为这样得来的带场的视频、他的场不一定是正确的,你去研究它的每一场的信息或场序时得出的结果可能与别人所谈的不吻合。还有就是视频出现抖动或毛刺不一定都是场序不对,有时也是跟素材的质量有关的,如反复使用多次的磁带所录制的视频、一些通过转换了很多次格式的视频,或者用某些较差的编码器所压缩的视频等等,这些视频即使场序没问题,有可能画面也是不好的。

 

3、如何分辨素材的场序:软件种类多如牛毛,人不可能都能撑握,所以我只讲AE的方法,我就是多讲几种,也是没用的,仍然会有人不知道自己所用的软件如何搞,因为大家用的软件都是不同的。而且只要是软件,相信都有人用。大家主要是看思路,举一反三。

 

方法:在AE中输入一个带有正确场序素材,AE会自动辨别素材的场序(但不一定是正确的),双击素材到监视器中预览。一按一放地使用键盘的PageDown键单帧播放素材。如果监视器中显示的图像是很规律的运动。每个画面的图像都是向着该向的方向移动的话,那么AE所辨别出来的场序是正确的。在项目窗口中鼠标右击该素材,在弹出的菜单中选Interpretfootage、在二次弹出的子菜单中选Main,在弹出的Interpretfootage面板中SeparateFields一项中显示的就是素材的正确场序。如果在单帧播放中画面里的图像是一进一退的话(要注意素材本来的内容是不是就是一进一退的),那么就是场序反了。也就是说AE没有正确辨别出素材的正确场序,就需要到Interpretfootage手动设置场序,一直到画面能正确播放,最后得到正确的场序。

 

注:a、为什么说要输入带有正确场序素材?

 

因为我们有时在输出带场的视频时没有用到正确的方法,所得到的场信息也是错误的,用上面的方法来观察所得的结果不一定是一样的。如果你用1394卡采集得来的素材。那决对是一个没有问题的带有下场优先的素材,你用上面的方法来试验、我保证你得的结果是与我所说的是一致的。如果你把这个素材导入编辑软件中处理,一会输出无场的,一会又带上场,只要一个步骤错误,图像的信息就会错位,最得到的结果是无法预料的。这个现象导致很多朋友在网上说:“我无论把场序如何设置,得出的画面都一样啊”。不知道图像的内容已经被自己涂改的面目全非了。

 

注:b、为什么AE有时不能辨别素材的正确场序?

 

每一种视频的格式都是有一定的规定的。我个人认为AE在辨别素材的场序时先是辨别素材格式和制式。如视频的格式是VideoForWindows的话,因为这个格式一般带什么场序是没有常规的,所以AE认真的去辨别他的场序。一般得到的场序是正确的。如果你视频的格式设为PAL制的DVPLAY的话,因为默认情况这种视频都是下场优先,所以无论你在输出时把场序如何设置。导入AE中,默认都是下场优先。

 

综合上述。情况如此复杂,分析场序时主要是要看逐帧的画面是否流畅,有没有倒退现象,如果都没有倒退的现象就用自已觉得画面最好时的设置。多试多调,最最下策的方法就是生成一段成品到电视上去看效果(如果你是做碟的话)。有时画面不好并不是场序的问题的。虽然最初是由于场序引起,但目前已经无能为力了。

 

4、为什么要统一场序?

 

我所知道的非编软件中,他们都不能自动辨别素材的场序,只能手动设置项目设置的场序来适应素材的场序,如果素材中有不同的场序,那么项目设置就无法顾全了。是不是很简单的呢?

 

5、如何去场?

 

一般网上所谈的“去场”就是说把项目设置的场设成与素材一致,让视频正确显示出来,这也是一种“去场”的意义。但我觉得“去场”的意思应该是把带场的素材变成无场,所谓的合并场。我一直找不到这类文献,所以也不知道自己所做的正确与否。我有一种看法不知大家认同与否,一般带场的视频不应该去场的,用原始的最好,无论是把视频去场还是加场,最终的都会降低素材的质量的。一个带场的视频加工成逐行扫描后效果会更好。我不认同这种看法。不过因为某些原因需要用到不同场序的素材是不可避免的,所以不管有没有损失都得去场。我去场的方法就是把素材导入编辑软件后,在项目设置中设置正确的场序,编辑方式选VideoForWindows。输出时设成逐行扫描MicrosoftAVI类型。压缩方式根据需要选择,无所谓。以后要什么场序的再带场输出。最重要的是不能把一个带下场的素材直接输出带上场。

 


大佬最近迷上了 crazygame——一款充满对抗、手速、操作与氪金的神奇游戏。他的目标是冲上全球排行榜第一,成为传说中的“游戏之神”。 但大佬本人太忙了,要兼顾公司、投资、谈生意,根本没时间自己打游戏,于是他决定——直接花钱雇职业玩家帮他刷分! 他总共雇了 N 位技术高超的选手,每位选手在一天中都有一段固定的上场时间,帮大佬稳稳地刷经验、拿奖励、抢首杀。 为了方便记录,crazygame 的服务器一天的时间从 t=0 开始,到 t=10 9 结束。每个玩家的上场时间可以用两个整数表示:开始时间结束时间(结束时间不算在内)。 例如,如果某位选手在 t=4 上场,在 t=7 下场,那这段时间他就为大佬打了 3 个单位时间。 然而,事情出现了转折——大佬一拍脑袋发现,自己雇人时冲动消费了,多签了一名职业玩家的合同。 更糟糕的是,游戏代打的预算已经爆表,他必须解雇其中一名玩家。 你的任务是:帮大佬选择解雇哪位玩家,才能让剩下的玩家覆盖的总游戏时间尽可能长。 这里的“覆盖”指的是,在某个时间点,至少有一名玩家正在打游戏,那么这段时间就算作已覆盖。 输入格式 第一行一个整数 N (1≤N≤100000),表示雇佣的玩家数。 接下来 N 行,每行两个整数,表示一位玩家的开始结束时间,范围在 [0,10 9 ] 内。 所有结束时间互不相同,不同玩家的上场时间可能会有重叠。 输出格式 输出一个整数,表示解雇一名玩家后,剩下的玩家所覆盖的最大游戏时间长度。 输入输出样例 #1 输入 #1 3 5 9 1 4 3 7 输出 #1 7 测试点编号 n 1 3 2 472 3 4882 4 49785 5 100000 6 35000 7 50000 8 70000 9 85000 10 100000 根据该题目详细解释该代码
08-15
基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人运动设备中的六轴姿态传感器,它集成了三轴陀螺仪三轴加速度计。这款传感器能够实时监测并提供设备的角速度线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp``MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式I2C地址,`getAcceleration()``getGyroscope()`则分别用于获取加速度角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()``getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准滤波,以消除噪声漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客其他开源资源是学习解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息实践指南
### 运动员出记录代码设计 以下是基于给定描述的 Python 实现,用于模拟球员上场逻辑以及角色行为: #### 定义球员类 通过定义 `Player` 类来表示不同类型的球员及其行为。 ```python import random class Player: def __init__(self, name, role): self.name = name self.role = role # 'goalkeeper', 'upper_half', 'lower_half', 'full_field' self.position = (0, 0) def move(self, ball_position=None): if self.role == 'goalkeeper': # 随机在球门区域附近移动 self.position = (-1, random.randint(-1, 1)) elif self.role == 'upper_half' and ball_position is not None: if ball_position[1] > 0: # 如果球在上半 self.capture_and_move(ball_position) else: self.random_move() elif self.role == 'lower_half' and ball_position is not None: if ball_position[1] < 0: # 如果球在下半 self.capture_and_move(ball_position) else: self.random_move() elif self.role == 'full_field' and ball_position is not None: self.capture_and_move(ball_position) def capture_and_move(self, target_position): distance_x = abs(target_position[0] - self.position[0]) distance_y = abs(target_position[1] - self.position[1]) step_x = 1 if target_position[0] > self.position[0] else -1 step_y = 1 if target_position[1] > self.position[1] else -1 new_x = min(distance_x, abs(step_x)) * step_x + self.position[0] new_y = min(distance_y, abs(step_y)) * step_y + self.position[1] self.position = (new_x, new_y) if self.is_captured_ball(target_position): # 判断是否捕获到球 self.shoot() def is_captured_ball(self, target_position): return self.position == target_position def shoot(self): success_chance = random.choice([True, False]) # 假设50%成功概率 if success_chance: print(f"{self.name} 射门得分!") else: print(f"{self.name} 的射门被守门员扑出了!") def random_move(self): self.position = ( self.position[0] + random.choice([-1, 0, 1]), self.position[1] + random.choice([-1, 0, 1]) ) ``` #### 创建球环境 创建一个简单的足球地模型,并初始化球员位置球的位置。 ```python class FootballField: def __init__(self): self.players = [] self.ball_position = (0, 0) def add_player(self, player): self.players.append(player) def simulate_game(self, steps=10): for _ in range(steps): print("\n当前回合:") print(f"球的位置: {self.ball_position}") for player in self.players: player.move(self.ball_position) print(f"{player.name} ({player.role}) 当前位置: {player.position}") # 更新球的位置(简单随机更新) self.ball_position = ( self.ball_position[0] + random.choice([-1, 0, 1]), self.ball_position[1] + random.choice([-1, 0, 1]) ) # 初始化游戏景 field = FootballField() # 添加球员 field.add_player(Player("张三", "goalkeeper")) field.add_player(Player("李四", "upper_half")) field.add_player(Player("王五", "lower_half")) field.add_player(Player("赵六", "full_field")) # 开始模拟比赛 field.simulate_game(5) ``` 上述代码实现了球员的行为模式[^1],包括守门员固定范围内的随机移动、上下半球员条件触发下的追球行动以及全比赛球员始终追逐球的行为。此外还加入了射门机制以增加趣味性。 #### 输出样例 运行以上代码可能会得到如下输出: ``` 当前回合: 球的位置: (0, 0) 张三 (goalkeeper) 当前位置: (-1, 0) 李四 (upper_half) 当前位置: (0, 0) 王五 (lower_half) 当前位置: (0, 0) 赵六 (full_field) 当前位置: (0, 0) ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值