捕获iOS模拟器视频以进行应用预览

499

好的,现在我们可以在App Store上提交应用程序的视频预览。根据苹果的说法,我们应该使用iOS8设备和OSX 10.10这一版本进行提交。问题是你需要有不同的设备(4英寸、4.7英寸、5.5英寸和iPad)。

有没有其他替代方法?

我考虑捕获模拟器的视频。但问题是当以100%的分辨率显示时,设备屏幕比我的FullHD显示器更大。有没有办法可以从模拟器中以完整分辨率直接捕获视频的解决方案?

编辑:由于很多人回答了我没有问的问题,请允许我说一下: - 录制一个设备大小并进行缩放不是我要问的; - 如何记录任何应用程序预览不是我要问的; - 你如何做你的预览不是我要问的;

我要问的是如果它无法适应屏幕,是否可以从模拟器中以100%的分辨率录制视频?


幸运的是,最近Xcode使这变得容易了。请参见@atalayasa的此回答 - Eric
3
使用Xcode 12,只需在模拟器中按下cmd + R即可录制屏幕。按下cmd + S可进行截屏。 - Mikkel Cortnum
25个回答

882

对于Xcode 8.2或更高版本

您可以使用命令行实用程序xcrun simctl控制模拟器,拍摄模拟器的视频和截屏。

  1. 在模拟器上运行您的应用程序

  2. 打开终端

  3. 输入以下命令

    • 拍摄截屏

      xcrun simctl io booted screenshot <文件名>.<文件扩展名>

      例如:

      xcrun simctl io booted screenshot myScreenshot.png

    • 拍摄视频

      xcrun simctl io booted recordVideo <文件名>.<文件扩展名>

      例如:

      xcrun simctl io booted recordVideo appVideo.mov

  4. 按下 ctrl + C 停止录制视频。

创建的文件默认保存在当前目录中。

Xcode 11.2及更高版本提供了额外的选项。

来自 Xcode 11.2 Beta Release Notes

现在,simctl video recording 生成更小的视频文件,支持HEIC压缩,并利用可用的硬件编码支持。此外,恢复了在iOS 13、tvOS 13和watchOS 6设备上录制视频的功能。

您可以使用附加标志:

xcrun simctl io --help
Set up a device IO operation.
Usage: simctl io <device> <operation> <arguments>

...

    recordVideo [--codec=<codec>] [--display=<display>] [--mask=<policy>] [--force] <file or url>
        Records the display to a QuickTime movie at the specified file or url.
        --codec      Specifies the codec type: "h264" or "hevc". Default is "hevc".

        --display    iOS: supports "internal" or "external". Default is "internal".
                     tvOS: supports only "external"
                     watchOS: supports only "internal"

        --mask       For non-rectangular displays, handle the mask by policy:
                     ignored: The mask is ignored and the unmasked framebuffer is saved.
                     alpha: Not supported, but retained for compatibility; the mask is rendered black.
                     black: The mask is rendered black.

        --force      Force the output file to be written to, even if the file already exists.

    screenshot [--type=<type>] [--display=<display>] [--mask=<policy>] <file or url>
        Saves a screenshot as a PNG to the specified file or url(use "-" for stdout).
        --type       Can be "png", "tiff", "bmp", "gif", "jpeg". Default is png.

        --display    iOS: supports "internal" or "external". Default is "internal".
                     tvOS: supports only "external"
                     watchOS: supports only "internal"

                     You may also specify a port by UUID
        --mask       For non-rectangular displays, handle the mask by policy:
                     ignored: The mask is ignored and the unmasked framebuffer is saved.
                     alpha: The mask is used as premultiplied alpha.
                     black: The mask is rendered black.

现在您可以使用掩模(适用于非矩形显示器)和其他标志以jpeg格式进行截屏:

xcrun simctl io booted screenshot --type=jpeg --mask=black screenshot.jpeg


26
是否可以使用xcrun在视频中显示触摸操作? - kelin
27
这给我带来了差劣的视频质量。 - Kashif
9
使用上述命令录制的视频质量较差。将文件格式指定为mp4后,问题得到了解决:xcrun simctl io booted recordVideo --type=mp4 <视频文件路径>.mp4 - Andy Novak
17
在默认设置下,使用2013款MacBook Pro录制时帧率非常低。指定--codec=h264解决了这个问题,并得到了流畅的视频。 - Jeffrey Fulton
9
使用h264格式进行捕获,可以获得更高的帧率。xcrun simctl io booted recordVideo --codec=h264 capture.mp4 - Bijoy Thangaraj
显示剩余27条评论

258

使用 xcrun simctl 命令:

xcrun simctl io booted screenshot <文件名>.<文件扩展名>


使用屏幕截图:

按下cmd + shift + 5键,然后调整选择区域使其包含模拟器。


使用QuickTime Player:

您可以使用QuickTime Player来记录屏幕。

  • 打开QuickTime Player
  • 从菜单中选择文件(File)
  • 选择新建屏幕录制(New Screen Recording)

现在从屏幕录制(Screen Recording)窗口中,点击录制按钮。

它会提供您一个选项,让您选择是否录制整个屏幕或者是您所选择的部分。

您需要选择模拟器以便只有模拟器部分被记录下来。


24
这是这个问题唯一正确的答案。其他所有答案都要求您使用设备。 - KPM
1
当使用比实际屏幕更大的iOS模拟器(例如,iPad Pro 12.7英寸)时,这个方法是否仍然有效? - DrMickeyLauer
8
如果模拟器的尺寸大于屏幕,这种方法就行不通了。你可以录制整个 Mac 屏幕或选择屏幕上的某个部分进行录制。 - Kalpesh
8
这个可以用,但模拟器上会出现鼠标指针。这对于测试目的很有用,但不适合用于营销宣传视频。 - Alan Andrade
5
怎样停止录制?:S - Tony
显示剩余3条评论

81

您可以使用内置的屏幕截图工具记录屏幕的一部分:

  1. 按下Shift-Command-5以显示控制面板。
  2. 选择enter image description here
  3. 选择要记录的屏幕的一部分。例如,iPhone 模拟器。
  4. 单击enter image description here停止录制。
  5. 缩略图将出现在屏幕右下角。您可以在保存之前进行编辑。

如果您想可视化鼠标点击,请在第1步后选择选项控件,然后启用显示鼠标点击选项。


2
总是很好使用内置工具。在 Mojave 之前,我使用了 licecap 工具。它生成的 GIF 文件需要比 .mov 文件更少的空间。(https://www.cockos.com/licecap/ | brew search licecap) - Apoc
仍然适用于Catalina。注意:显示鼠标指针以及点击... - leanne
easy and enough ~ - kjian
录制完成后,Quicktime电影文件中仅显示黑色。 - user2233706
这是最好的和最简单的答案。 - instanceof

76

苹果建议在实际设备上进行屏幕录制,并提供了使用iOS和OS X上的QuickTime和iMovie进行此操作的指南:

https://developer.apple.com/app-store/app-previews/imovie/Creating-App-Previews-with-iMovie.pdf

概要:

使用QuickTime Player进行屏幕录制

  1. 使用Lightning电缆将您的iOS设备连接到Mac。
  2. 打开QuickTime Player。
  3. 选择文件>新建电影录制。
  4. 在出现的窗口中,将您的iOS设备选择为摄像头和麦克风输入源。

使用iMovie创建应用程序预览

导入屏幕录制

接下来,您将使用QuickTime Player捕获的屏幕录制文件导入到iMovie中。 在iMovie中:

  1. 选择文件>导入媒体。
  2. 在出现的窗口中,选择屏幕录制文件。

创建应用程序预览项目

要开始一个新的应用程序预览项目,请选择文件>新建应用程序预览。时间轴将出现,您可以在其中添加和排列剪辑以创建您的预览。


1
系统要求: • 具备闪电连接器、Retina显示屏和iOS 8的iOS设备。 • 安装有OS X Yosemite的Mac电脑。 • 安装有iMovie for Mac版本10.0.6或更高版本。 而且iMovie并非免费。 - Borzh
36
这个回答很好,但它不能从模拟器中捕获视频(只能从实际设备中捕获)。 - race_carr
1
屏幕录制现在可以达到近60帧每秒,而App Store只接受30帧每秒,这使得它并不总是可用。 - PetrV
12
我没有所有不同种类的设备。 - János
1
@PetrV 我曾经苦恼于iMovie想要永远以60fps导出所有内容...结果发现你可以将大的iMovie 60fps视频带回Quicktime,然后从Quicktime中导出为iPad2格式,这样就可以降低帧率并使视频适用于iTunesConnect。虽然有点不稳定,但我已经厌倦了这个问题,并且它确实有效。 - Dave Levy
显示剩余3条评论

66

我很惊讶没有人提供我的答案。以下是操作步骤(只要您有至少一个合适的设备,这将起作用):

  1. 使用您拥有的设备录制、编辑和完成App预览。
  2. 导出为文件。
  3. 在Simulators中,对每个不同尺寸的iPhone截取1张屏幕截图。
  4. 在iMovie中创建新的App预览。
  5. 首先插入所需尺寸的屏幕截图,然后添加您已经制作好的App预览文件。
  6. 使用“共享”->“App预览”导出。
  7. 重复第4到6步以获取新的尺寸。

按照上述步骤可以获得所需分辨率的App预览。


8
Eric,你是个天才。这太完美了!我必须确保以100%的屏幕尺寸拍摄我的模拟器截图。 - Swindler
2
Eric,非常好的回答。非常感谢! - Dominique Vial
有时候你可能想要创建一个900x1200的iPad视频,然后使用这个命令将其转换为iPhone分辨率,并在顶部和底部留出空白条:ffmpeg -i appPrevw_ipad.mp4 -vf scale=1080:-1,pad=1080:1920:0:200:white appPrevw_iphone.mp4。200是(较短的)iPad内容的垂直位置。你可以以此为基础,在空白条上添加更多内容。 - ishahak
2
这是最佳解决方案。 - CodyMace
iPhone Plus/Normal的长宽比与X不同,因此无法正常工作,裁剪视频也不是一个好主意。 - Reza.Ab
显示剩余2条评论

59

使用新版的Xcode 12.5,你可以通过使用⌘ + R来简单地录制模拟器屏幕。详情请访问此处


1
是的,但录制视频没有声音。我们该怎么解决? - Zhou Haibo
生成的视频(至少在使用6.5英寸的iPhone 11 Pro Max时)不准确。尝试直接上传会导致大小错误。输出视频有几个像素偏差,需要进行调整。这无法通过Quicktime(调整分辨率)完成。 - bauerMusic
你可以使用iMovie制作应用程序预览。很烦人的是它不能以正确的分辨率录制,但你可以通过iMovie相对容易地解决这个问题。 - Mikkel Cortnum

32

您应该使用 Yosemite中的QuickTime 来连接和记录您的iOS设备屏幕。

iPhone纵向

录制完成后,您可以使用iMovie编辑视频。 在编辑 iPhone 竖屏 App 预览时,分辨率必须为1080x1920,但 iMovie 只能以16:91920x1080)导出。

其中一种解决方案是将具有1080x1920分辨率的录制视频导入并旋转90度。 然后使用ffmpeg导出1920x1080的电影,并使用以下命令将导出的视频旋转回90度:

ffmpeg -i Landscape.mp4 -vf "transpose=1" Portrait.mp4

iPad

iPad的情况有一些棘手,因为它需要 1200x9004:3)的分辨率,但iMovie只支持 16:9 的导出。

以下是我所做的步骤:

  1. 在横屏模式下使用iPad Air录制电影(1200x900, 4:3

  2. 将其导入到iMovie并导出为 1920x1080, 16:9iPadLandscape16_9-1920x1080.mp4

  3. 删除左右两侧黑边后得到一个 1440x1080 的视频。每个黑边的宽度为 240

 ffmpeg -i iPadLandscape16_9-1920x1080.mp4 -filter:v "crop=1440:1080:240:0" -c:a copy iPadLandscape4_3-1440x1080.mp4
  • 将电影缩放至1220x900

     ffmpeg -i iPadLandscape4_3-1440x1080.mp4 -filter:v scale=1200:-1 -c:a copy iPadLandscape4_3-1200x900.mp4
    
  • 这段内容摘自我在Apple开发者论坛上的回答。


    2
    这很聪明,但是使用ffmpeg重新编码会使视频质量下降太多,以至于无法使用。 - RawMean
    我该如何将导出设置为1080x1920?我在iMovie中找不到这个尺寸! - Mariam
    @Mariam 你无法以1080x1920的格式进行导出。iMovie只能以16:9(1920x1080)的格式进行导出。 - brutella
    15
    这并没有回答问题。 - Tim Chen
    我发现你可以在OS X上安装Handbrake应用程序,它允许缩小到任何你想要的尺寸。然后为了支持苹果的要求,你可以将结果导入Quicktime并使用苹果编解码器保存,这样它就会以输入文件的大小结束。顺便说一句,Handbrake可以编码成惊人的紧凑型mp4视频文件,使用苹果编码器重新编码会导致10倍的大小。我认为,上面的例子中的ffmpeg by brutella将实现相同的最终结果,但请注意,苹果可能会对你用于生成结果视频的编解码器挑剔。 - Gunnar Forsgren - Mobimation

    28
    自 Xcode 13 起,您可以直接从模拟器中以完整分辨率开始屏幕录制:
    1. 点击 enter image description here 图标。
    2. 或按 Command + R 快捷键。
    按 escape 键或录制按钮可停止录制。
    录制的视频以设备分辨率为基础,所以需要将其调整到 App Store 预览分辨率(886x1920、1080x1920、1600x120等)大小。iPhone 6.5 英寸的长宽比与所需的 App Store 预览分辨率不完全相同,因此在导出时,请确保选择 886x1920 或 1920x886 的分辨率。

    27

    使用命令行截屏或录制视频

    您可以使用xcrun命令行实用程序对模拟器窗口进行截屏或录制视频。

    1. 在模拟器中启动您的应用程序。

    2. 启动终端(位于/Applications/Utilities),并输入适当的命令:

      • 要截屏,请使用screenshot操作:

        xcrun simctl io booted screenshot
        

        您可以在命令的结尾指定一个可选的文件名。

      • 要录制视频,请使用recordVideo操作:

      • xcrun simctl io booted recordVideo <filename>.<extension>
        

        要停止录制,请在终端中按Control-C。

        注意:必须为recordVideo指定文件名。

      创建的文件的默认位置是当前目录。

      有关simctl的更多信息,请在终端中运行此命令:

      xcrun simctl help
      

      要获取关于simctlio子命令的更多信息,请运行以下命令:

      xcrun simctl io help
      

    来自 苹果文档


    4
    无音频输出 :( - Jules
    4
    苹果文件链接不太具体/有用。在找到可以使用的视频文件扩展名h264mp4fmp4之前,我不得不四处搜索。例如:xcrun simctl io booted recordVideo test-video-recording.mp4。此外,要结束视频录制,我必须使用 control + c 结束终端进程。 - Trev14
    这个解决方案有效,但它无法从模拟器中录制音频。 - duyhungws

    22

    您可以使用以下工具免费完成此操作。 您至少需要一个真实设备(我使用的是iPhone 5)。

    使用简单但出色的appshow捕获视频(请注意,这是一个非常基本的工具,但很容易学习)。 这将以本机设备分辨率(640x1136)导出。

    使用ffmpeg进行调整大小。 由于四舍五入原因,您可以直接在这些分辨率之间切换,但必须进行过度尺寸和裁剪。

    ffmpeg -i video.mov -filter:v scale=1084:1924 -c:a copy video_1084.mov
    ffmpeg -i video_1084.mov -filter:v "crop=1080:1920:0:0" -c:a copy video_1080.mov
    

    对于iPad,你可以裁剪视频并添加一个Letterbox。然而,这样的裁剪通常不会得到与您的应用在iPad上完全相同的视频。效果因人而异。

    ffmpeg -i video.mov -filter:v "crop=640:960:0:0" -c:a copy video_640_960.mo
    ffmpeg -i video_640_960.mov -filter:v "pad=768:1024:64:32" -c:a copy video_768_1024.mov
    ffmpeg -i video_768_1024.mov -filter:v scale=900:1200 -c:a copy video_900_1200.mov
    

    哇,你为我节省了很多时间。非常感谢你。 - Dinesh Raja
    你可以帮我把 6401136 的视频调整到 7501334 分辨率吗? - Dinesh Raja
    1
    对于iPhone 6+,命令如下: ffmpeg -i source.mov -filter:v scale=1246:2216 -c:a copy intermediate.movffmpeg -i intermediate.mov -filter:v "crop=1242:2208:0:0" -c:a copy final.mov - Daniel K
    @vish @daniel 在我的电脑上,这些输出无法在QuickTime中打开,也无法上传到iTunes Connect。但是它们可以在VLC中打开。我尝试了-pix_fmt yuv420p-vcodec lib264x,但没有成功... - nathan
    @ntesler,很抱歉我不确定问题出在哪里,但我可以告诉你,我能够使用这些确切的命令在QuickTime中打开并上传到iTunesConnect。我使用Homebrew安装了ffmpeg,它的版本是“ffmpeg version 2.3.3 Copyright (c) 2000-2014 the FFmpeg developers”。 - vish

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接