如何使用QuickTime Player录屏并录制内部声音

如果你想要创建一些教学视频、游戏介绍或是演示软件等可以让他人更容易理解的视频内容,录屏是非常实用的工具。你可以通过QuickTime Player轻松地完成这项任务,并且还可以录制应用内部声音。但是,许多用户并不知道如何实现这个功能。在本文中,我们将会详细介绍如何使用QuickTime Player录屏并录制内部声音。

一、检查Mac操作系统版本

在使用QuickTime Player录制并录制内部声音之前,请先检查你的Mac操作系统的版本。在MacOS Mojave版本之前,你可以直接使用QuickTime Player来录制视频屏幕。但是,在这个版本之后,你需要使用Mac内置的屏幕捕捉工具才能录制应用内部声音。

因此,如果你的Mac操作系统低于Mojave版本,则可以直接使用QuickTime Player进行录屏和录制内部声音。如果你的Mac操作系统版本高于Mojave版本,则需要使用Mac内置的屏幕捕捉工具。

二、使用QuickTime Player录制屏幕

如果你的Mac操作系统版本低于Mojave版本,则你可以直接使用QuickTime Player录制屏幕。下面是具体的步骤:

1. 打开QuickTime Player并点击 “文件” 菜单。

2. 在下拉菜单中选择 “新建屏幕录制”。

3. 在录屏窗口中,你可以选择录制整个屏幕或是仅一部分。

4. 准备好录制后,点击屏幕上 “录制” 按钮。录制过程中,你可以选择暂停、停止或是重新开始录制。

5. 录制完成后,你可以在QuickTime Player中剪辑、编辑或是导出你的视频。

6. 如果你需要录制内部声音,可以在录制过程中通过麦克风录制音频。但是,请注意在录制时避免出现噪音。

三、使用屏幕捕捉工具录制屏幕和内部声音

如果你的Mac操作系统版本高于Mojave版本,则需要使用Mac内置的屏幕捕捉工具来录制屏幕和内部声音。下面是具体的步骤:

1. 打开 “启动台” 并搜索 “屏幕捕捉”。

2. 打开 “屏幕捕捉” 并选择 “文件” 菜单中的 “新建屏幕录制”。

3. 在录屏窗口中,你可以选择录制整个屏幕或是仅一部分。

4. 点击 “录制选项” 按钮并选择 “内部声音”。

5. 准备好录制后,点击屏幕上的 “录制” 按钮。录制过程中,你可以选择暂停、停止或是重新开始录制。

6. 录制完成后,你可以在 “QuickTime Player” 中剪辑、编辑或是导出你的视频。

四、代码示例

  let displayID:CGDirectDisplayID = CGMainDisplayID()
  let fps = 30
  let frame: CGRect = CGRect(x: 0, y: 0, width: 640, height: 480)
  let duration = 10.0
  
  let outputFileURL = URL(fileURLWithPath: "/path/to/output.mov")
  let fileProperties = [AVVideoCodecKey: AVVideoCodecType.h264,
                        AVVideoWidthKey: NSNumber(value: Float(frame.width)),
                        AVVideoHeightKey: NSNumber(value: Float(frame.width))]
  let videoWriterInput = try! AVAssetWriterInput(mediaType: AVMediaType.video, outputSettings: fileProperties)
  let pixelBufferAttributes = [
    kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_32ARGB),
    kCVPixelBufferWidthKey as String: frame.width,
    kCVPixelBufferHeightKey as String: frame.height,
    kCVPixelBufferCGImageCompatibilityKey as String: false,
    kCVPixelBufferCGBitmapContextCompatibilityKey as String: false
  ] as [String: Any]
  let videoWriterPixelBufferInput = AVAssetWriterInputPixelBufferAdaptor(assetWriterInput: videoWriterInput, sourcePixelBufferAttributes: pixelBufferAttributes)
  
  let audioWriterInput = try! AVAssetWriterInput(mediaType: AVMediaType.audio, outputSettings: nil)
  
  let videoWriter = try! AVAssetWriter(outputURL: outputFileURL, fileType: AVFileType.mov)
  videoWriter.add(videoWriterInput)
  videoWriter.add(audioWriterInput)
  
  let displayLinkTimer = Timer.scheduledTimer(withTimeInterval: 1.0 / Double(fps), repeats: true, block: {_ in
    let startTime = CMTime(seconds: duration / Double(fps) * Double(self.frameCounter), preferredTimescale: CMTimeScale(NSEC_PER_SEC))
    let endTime = CMTime(seconds: duration / Double(fps) * Double(self.frameCounter + 1), preferredTimescale: CMTimeScale(NSEC_PER_SEC))
    var tFrame = frame
    tFrame.origin.y = NSScreen.main!.frame.height - frame.origin.y - frame.height
    CGWindowListCreateImage(frame, .optionOnScreenOnly, kCGNullWindowID, [.nominalResolution])?.cropping(to: tFrame).flatMap {
      var pixelBuffer: CVPixelBuffer?
      CVPixelBufferCreate(kCFAllocatorDefault, Int(frame.width), Int(frame.height), kCVPixelFormatType_32ARGB, pixelBufferAttributes as CFDictionary, &pixelBuffer)
      CIContext().render(CIImage(cgImage: $0), to: pixelBuffer!)
      if CMSampleBufferCreateForImageBuffer(kCFAllocatorDefault, pixelBuffer!, true, nil, nil, CMTimeRange(start: startTime, end: endTime), &self.lastSampleBuffer) == noErr {
        self.writeData()
        self.frameCounter += 1
      }
    }
  })

五、结论

通过本文,我们详细介绍了如何使用QuickTime Player录屏并录制内部声音。无论是低于或是高于Mojave版本的Mac操作系统,我们都可以使用不同的方法轻松地完成任务。同时,我们也提供了代码示例,帮助想要进一步开发的用户快速掌握录屏和录制内部声音的技术细节。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/310027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-04 19:32
下一篇 2025-01-04 19:32

相关推荐

  • 如何使用Python获取某一行

    您可能经常会遇到需要处理文本文件数据的情况,在这种情况下,我们需要从文本文件中获取特定一行的数据并对其进行处理。Python提供了许多方法来读取和处理文本文件中的数据,而在本文中,…

    编程 2025-04-29
  • 如何使用jumpserver调用远程桌面

    本文将介绍如何使用jumpserver实现远程桌面功能 一、安装jumpserver 首先我们需要安装并配置jumpserver。 $ wget -O /etc/yum.repos…

    编程 2025-04-29
  • Hibernate注解联合主键 如何使用

    解答:Hibernate的注解方式可以用来定义联合主键,使用@Embeddable和@EmbeddedId注解。 一、@Embeddable和@EmbeddedId注解 在Hibe…

    编程 2025-04-29
  • 如何使用Python读取CSV数据

    在数据分析、数据挖掘和机器学习等领域,CSV文件是一种非常常见的文件格式。Python作为一种广泛使用的编程语言,也提供了方便易用的CSV读取库。本文将介绍如何使用Python读取…

    编程 2025-04-29
  • 如何使用random生成不重复的随机数

    在编程开发中,我们经常需要使用随机数来模拟一些场景或生成一些数据。但是如果随机数重复,就会造成数据的不准确性。这时我们就需要使用random库来生成不重复且随机的数值。下面将从几个…

    编程 2025-04-29
  • 如何使用HTML修改layui内部样式影响全局

    如果您想要使用layui来构建一个美观的网站或应用,您可能需要使用一些自定义CSS来修改layui内部组件的样式。然而,修改layui组件的样式可能会对整个页面产生影响,甚至可能破…

    编程 2025-04-29
  • 如何使用GPU加速运行Python程序——以CSDN为中心

    GPU的强大性能是众所周知的。而随着深度学习和机器学习的发展,越来越多的Python开发者将GPU应用于深度学习模型的训练过程中,提高了模型训练效率。在本文中,我们将介绍如何使用G…

    编程 2025-04-29
  • 如何使用Python导入Random库

    Python是一门优秀的编程语言,它拥有丰富的第三方库和模块。其中,Random库可谓是最常用的库之一,它提供了用于生成随机数的功能。对于开发人员而言,使用Random库能够提高开…

    编程 2025-04-29
  • 理解agentmain方法如何使用

    如果你不清楚如何使用agentmain方法,那么这篇文章将会为你提供全面的指导。 一、什么是agentmain方法 在Java SE 5.0中,Java提供了一个机制,允许程序员在…

    编程 2025-04-29
  • 如何使用Python将print输出到界面?

    在Python中,print是最常用的调试技巧之一。在编写代码时,您可能需要在屏幕上输出一些值、字符串或结果,以便您可以更好地理解并调试代码。因此,在Python中将print输出…

    编程 2025-04-29

发表回复

登录后才能评论