Files
ALL-teach_sys/frontend_视觉设计/update_photography.py

210 lines
12 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
import json
import os
from datetime import datetime
# 读取影视摄像的原始数据
with open('网页未导入数据/视觉设计产业/视觉设计岗位简历.json', 'r', encoding='utf-8') as f:
positions_data = json.load(f)
# 找到影视摄像的数据
photography_data = None
for position in positions_data:
if position.get("岗位名称") == "影视摄像":
photography_data = position
break
if not photography_data:
print("未找到影视摄像数据")
exit(1)
# 手动解析面试题内容
interview_content = photography_data.get("面试题内容", "")
# 构建问题和答案 - 从场景模拟问答题中提取
questions = [
{
"question": "你接到一个客户 brief要拍摄一支 60 秒的品牌短片,主题为『年轻人的环保生活方式』。预算 5 万元人民币,时长 1 天。请你从前期策划、拍摄脚本、场地选择、主辅镜头规划、灯光/音频配置、后期处理要点逐项现场口述方案。",
"answer": "前期策划:调研目标群体,制定叙事框架(人物线与环保行动线交错),制作分镜图与拍摄脚本。场景安排:选择环保主题场地(如自行车租赁点、社区垃圾分类区、咖啡店用循环保温杯);白天时间控制拍摄时段避免逆光。主辅镜头设计:主体拍摄采用固定轨道镜头+手持跟拍,辅镜头取动作特写、环境细节、背景干扰控制。灯光音频配置:利用自然光为主+补光板增强主体亮度,麦克全指向人物演讲处,无线领夹麦克确保语音清晰。后期核心:剪辑节奏符合情感变化,主调色整体清新绿意调,搭配环保类背景音乐+字幕简明说明。预算与时间顾虑:提前踩点节省现场沟通时间;合理调配租赁道具/演员费用。"
},
{
"question": "请举例说明你的一次灯光布置或器材配置过程,以及你为什么这么做?",
"answer": "去年拍摄一组校园宣传片时为了突出人物面部表情我在顶棚布置了一只柔光箱做主光同时用两只直射光源作为逆光勾勒轮廓。相机设定光圈f/2.8快门速度1/60ISO 400。使用测光表确保脸部不过曝、背景不过暗。三点布光控制了阴影范围并提升立体感同时玻璃反光板用于补充侧面柔光确保服饰和背景不过分曝光还加了一层黄色色温卡制造温暖情绪。过程遵循'硬光控制轮廓、软光强化主体'的组织框架。"
},
{
"question": "你最常使用的后期处理软件是什么?请说明你一个常用的剪辑或调色技巧。",
"answer": "对静态摄影我常用Adobe Lightroom和Photoshop调色修饰人像或人文场景偏好使用分离补光笔刷控制肤色区域与环境的色温分层对动态摄像我使用DaVinci Resolve通过Clarity工具在不同调色层曲线+LOG输出中加入VSCO Pro经典场景调LUT营造背光轮廓清晰但背景柔化、色调温暖的效果。若有时间我会阅读Color Grading社区中技术文章自学掌握3D LUT与HDR调色流程。"
},
{
"question": "拍摄过程中遇到客户临时提出新要求,例如要求改变调性或者再补几组街拍,你通常如何应对?",
"answer": "我会保持冷静、先确认修改或补拍具体内容,再迅速调整日程优先级。例如在一次企业活动拍摄中,客户临时要求增加一组员工街拍和活动氛围镜头,我先按时间表重新安排拍摄顺序(先拍常规题材、再拍新增内容),最后通过压缩后期调色时间、加班处理素材,最终在不影响质量前提下按时交稿。拍摄结束后,我向客户说明流程调整之处,取得理解与好评。"
},
{
"question": "如果客户坚持喜欢画面高饱和、HDR式浓烈风格但你认为画面应保持'高级、不过度渲染'的视觉,你应如何回应最合理?",
"answer": "提出两三种不同调色样片HDR、自然、柔光风让客户做选择。这样既尊重客户的偏好也展示了专业建议让客户看到不同风格的实际效果后做出更明智的决定。"
},
{
"question": "拍摄一个人物向右行走的场景,为了构图留白与视觉缓冲,下列哪种做法最合理?",
"answer": "人物放在左侧三分之一处(留前方空间给右边方向)。这样的构图符合视觉动势原理,给运动方向留出空间,让画面更具动感和平衡感。"
},
{
"question": "摄影中的'三分法则'是什么?如何运用在实际拍摄中?",
"answer": "三分法则是将画面横竖各分成三等分,重要元素放置在线条交叉点或沿线条分布。实际运用中,人物眼睛通常放在上三分之一线,地平线放在下三分之一或上三分之一线,避免居中分割画面。这样能创造更有动感和平衡的构图。"
},
{
"question": "什么是景深?如何控制景深来突出主体?",
"answer": "景深是指画面中清晰成像的前后距离范围。控制方法1.光圈越大f值越小景深越浅背景虚化越明显2.焦距越长景深越浅3.拍摄距离越近景深越浅。实际应用中人像摄影常用大光圈如f/1.8)配合中长焦镜头,让主体清晰而背景虚化,突出人物。"
},
{
"question": "说说你对'黄金时刻'的理解,以及如何利用它进行拍摄?",
"answer": "黄金时刻指日出后和日落前各约一小时的时间此时阳光角度低光线柔和温暖色温偏暖调。利用方法1.逆光拍摄制造轮廓光和光晕效果2.侧光突出纹理和立体感3.利用长影子增加画面层次。需提前踩点,把握好时间窗口,准备好反光板补光。"
},
{
"question": "在室内人像摄影中,如何使用闪光灯避免生硬的光线?",
"answer": "1.使用柔光罩或柔光伞扩散光线2.将闪光灯对准天花板或墙壁进行反射闪光3.使用多灯布置降低单灯功率4.离机闪光避免正面直闪5.混合自然光闪光灯作为补光6.调节闪光灯输出功率使用TTL自动测光。这些方法能让光线更自然柔和。"
},
{
"question": "视频拍摄中的帧率选择有什么讲究24fps、30fps、60fps各适合什么场景",
"answer": "24fps电影感适合叙事性内容、MV、广告片30fps电视标准适合新闻、纪录片、访谈节目60fps流畅度高适合体育赛事、动作场面、慢动作素材后期可降速到24/30fps获得流畅慢镜头。选择时考虑播放平台标准和创作意图。"
},
{
"question": "什么是LOG格式为什么专业摄影师喜欢用它",
"answer": "LOG是对数曲线记录格式能保留更多高光和暗部细节提供更大的后期调色空间。优势1.动态范围更宽可达14档2.避免高光溢出和暗部死黑3.后期调色灵活性高4.适合多机位匹配。缺点是直出画面灰暗,必须后期调色,需要更多存储空间。"
},
{
"question": "如何理解和运用色彩理论来增强视觉叙事?",
"answer": "色彩理论包括色轮、互补色、类似色等概念。运用方法1.冷暖对比营造情绪暖色活力、冷色忧郁2.互补色创造视觉冲击橙蓝、黄紫3.单色调营造统一氛围4.色彩进退感控制空间层次5.品牌色保持视觉识别。实际中通过服装、道具、灯光色温、后期调色等手段实现。"
},
{
"question": "拍摄运动物体时,如何选择快门速度?",
"answer": "基本原则冻结动作需要高速快门动感模糊需要慢速快门。具体建议1.体育运动1/500s以上2.飞鸟1/1000s以上3.车辆追焦1/60-1/125s配合镜头跟随4.流水瀑布1/4s或更慢呈现丝绸效果5.星轨数分钟到数小时曝光。需配合ISO和光圈保证正确曝光。"
},
{
"question": "谈谈你对'讲故事'在商业摄影中的重要性的理解。",
"answer": "商业摄影不仅是记录产品更要传达品牌价值和情感连接。故事性体现在1.场景构建展现使用情境2.人物互动传递情感3.系列作品呈现完整叙事4.细节特写强化产品卖点5.氛围营造引发共鸣。好的商业摄影让观众产生代入感,激发购买欲望,提升品牌认同。"
},
{
"question": "如何准备一次商业拍摄项目?请列出你的工作流程。",
"answer": "1.需求沟通了解品牌定位、目标受众、使用场景2.创意提案情绪板、分镜脚本、参考样片3.预算制定设备、场地、模特、道具费用4.前期筹备场地勘景、模特选择、道具准备、拍摄排期5.拍摄执行设备调试、现场指导、及时回看确认6.后期制作:选片、修图/剪辑、调色、输出7.交付跟进:客户反馈、修改调整、最终交付。每个环节都需要细致规划和充分沟通。"
}
]
# 读取mock文件
mock_file = 'src/mocks/resumeInterviewMock.js'
with open(mock_file, 'r', encoding='utf-8') as f:
content = f.read()
# 创建备份
backup_file = f"{mock_file}.backup_photography_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
with open(backup_file, 'w', encoding='utf-8') as f:
f.write(content)
print(f"已创建备份:{backup_file}")
# 查找摄影/摄像产业位置
search_start = '"name": "摄影/摄像"'
start_pos = content.find(search_start)
if start_pos == -1:
print("未找到摄影/摄像产业")
exit(1)
# 找到positions数组
positions_pos = content.find('"positions":', start_pos)
if positions_pos == -1:
print("未找到positions字段")
exit(1)
# 找到第一个position对象中的questions
first_position = content.find('{', positions_pos + 12)
if first_position == -1:
print("未找到position对象")
exit(1)
# 找到questions数组
questions_pos = content.find('"questions":', first_position)
if questions_pos == -1:
print("未找到questions字段")
exit(1)
# 找到questions数组的开始和结束
array_start = content.find('[', questions_pos)
if array_start == -1:
print("未找到questions数组")
exit(1)
# 找到对应的结束括号
bracket_count = 0
in_string = False
escape_next = False
array_end = array_start
for i in range(array_start, len(content)):
char = content[i]
if escape_next:
escape_next = False
continue
if char == '\\':
escape_next = True
continue
if char == '"' and not in_string:
in_string = True
elif char == '"' and in_string:
in_string = False
elif not in_string:
if char == '[':
bracket_count += 1
elif char == ']':
bracket_count -= 1
if bracket_count == 0:
array_end = i
break
# 构建新的questions数组
sub_questions = []
for idx, qa in enumerate(questions, 1):
sub_question = {
"id": f"q{idx}",
"question": qa['question'].replace('"', '\\"'),
"answer": qa['answer'].replace('"', '\\"')
}
sub_questions.append(sub_question)
# 创建新的questions结构
new_questions = [{
"id": "group_q1",
"question": "# 摄影/摄像面试题",
"subQuestions": sub_questions
}]
# 生成JSON字符串
new_json = json.dumps(new_questions, ensure_ascii=False, indent=10)
# 调整缩进
lines = new_json.split('\n')
adjusted_lines = []
for line in lines:
if line.strip():
adjusted_lines.append(' ' + line)
new_json = '\n'.join(adjusted_lines).strip()
# 替换内容
new_content = content[:array_start] + new_json + content[array_end+1:]
# 写入文件
with open(mock_file, 'w', encoding='utf-8') as f:
f.write(new_content)
# 验证语法
result = os.popen(f'node -c {mock_file} 2>&1').read()
if result:
print(f"❌ 语法错误,恢复备份")
with open(backup_file, 'r', encoding='utf-8') as f:
content = f.read()
with open(mock_file, 'w', encoding='utf-8') as f:
f.write(content)
print("已恢复备份")
else:
print("✓ 语法验证通过")
print("成功更新摄影/摄像的16个面试题")