#!/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/60,ISO 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个面试题!")