macos - 使用 ffmpeg 编码 Retina 屏幕捕获时如何保持 2 倍像素密度?

标签 macos ffmpeg quicktime x264 screen-recording

每当我使用 ffmpeg 对 HiDPI/Retina 屏幕录制进行编码时,视频以 2 倍的大小播放,因此看起来很模糊,因为没有保留像素密度。

如何使用 ffmpeg 保留 HiDPI 屏幕录制的原始像素密度?

如何重现:

  • 使用 QuickTime Player 在 Retina Mac 上创建屏幕录制。
  • 使用 ⌘1 Actual Size 播放您在 QuickTime Player 中录制的视频看法。请注意,它在您的 Retina 显示屏上以 2:1 播放,因此视频看起来很清晰。它在实际记录像素空间的一半内播放。
  • 使用 ffmpeg 使用如下命令对视频进行编码:
    ffmpeg -i haha.mov -c:v libx264 -crf 23 haha-lg.mov
    
  • 使用 ⌘1 Actual Size 在 QuickTime Player 中播放新的 ffmpeg 压缩视频看法。请注意,它是 1:1 播放的,所以视频看起来很模糊。

  • 为了澄清,视频看起来并不模糊,因为它被压缩了。相反,它看起来很模糊,因为视频以 1:1 像素密度播放,而不是所需的 2:1 像素密度,可能是因为在编码时丢弃了一些元数据。

    作为记录,VLC 播放两个视频都太大(模糊)。所以能够播放 HiDPI 视频似乎是 QuickTime Player 的一个功能。

    以下是 ffmpeg 显示的原始屏幕录制的详细信息:
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'haha.mov':
      Metadata:
        major_brand     : qt  
        minor_version   : 0
        compatible_brands: qt  
        creation_time   : 2018-02-26T16:46:00.000000Z
        com.apple.quicktime.make: Apple
        com.apple.quicktime.model: iMac18,3
        com.apple.quicktime.software: Mac OS X 10.13.3 (17D102)
        com.apple.quicktime.creationdate: 2018-02-26T10:45:50-0600
      Duration: 00:00:04.35, start: 0.000000, bitrate: 10947 kb/s
        Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1396x928 [SAR 1:1 DAR 349:232], 10701 kb/s, 60 fps, 60 tbr, 6k tbn, 12k tbc (default)
        Metadata:
          creation_time   : 2018-02-26T16:46:00.000000Z
          handler_name    : Core Media Data Handler
          encoder         : H.264
    

    以下是 ffmpeg 压缩版本的信息:
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'haha-lg.mov':
      Metadata:
        major_brand     : qt  
        minor_version   : 512
        compatible_brands: qt  
        encoder         : Lavf57.83.100
      Duration: 00:00:04.35, start: 0.000000, bitrate: 1923 kb/s
        Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1396x928 [SAR 1:1 DAR 349:232], 1783 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
        Metadata:
          handler_name    : DataHandler
          encoder         : Lavc57.107.100 libx264
    

    最佳答案

    FFmpeg 当前不支持这种类型的元数据。如果您可以在 FFmpeg's bug tracker 上提供(短)样本,我们可能会在 future 的版本中添加对此类元数据的支持。

    关于macos - 使用 ffmpeg 编码 Retina 屏幕捕获时如何保持 2 倍像素密度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31586732/

    相关文章:

    objective-c - 如何在NSOutlineView中制作连续的Cell?

    Ffmpeg - 多重叠加 - 错误在哪里?

    image - 如何从视频中获取图像并使用 ffmpeg 组合其他图像

    c++ - 将 QuickTime 音频复制到另一个 QuickTime 影片

    macos - OS X .dmg 签名在下载后丢失

    单个 View 的 macOS SwiftUI 导航

    macos - 在 MAC OS X 10.8.x 上,AppStore 应用程序如何安装内核扩展?

    ffmpeg -hls_init_time -hls_time 不一起工作?

    macos - 从终端播放 Quicktime 电影

    c# - C# 中的 QuickTime 影片 Controller 处理程序