您的位置:

如何使用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操作系统,我们都可以使用不同的方法轻松地完成任务。同时,我们也提供了代码示例,帮助想要进一步开发的用户快速掌握录屏和录制内部声音的技术细节。