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

时间:2015-07-23 11:59:35

标签: macos ffmpeg quicktime x264 screen-recording

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

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

如何重现:

  1. 使用QuickTime Player在Retina Mac上创建屏幕录制。
  2. 使用⌘1 Actual Size视图播放您在QuickTime Player中录制的视频。请注意,它在Retina显示屏上播放2:1,因此视频看起来很清晰。它以实际记录像素的一半空间播放。
  3. 使用ffmpeg使用如下命令对视频进行编码:

    ffmpeg -i haha.mov -c:v libx264 -crf 23 haha-lg.mov
    
  4. 使用⌘1 Actual Size视图在QuickTime Player中播放新的ffmpeg压缩视频。请注意,它正在以1:1播放,因此视频看起来很模糊。
  5. 为了澄清,视频看起来并不模糊,因为它是压缩的。相反,它看起来很模糊,因为视频的播放速度是应有的两倍,而像素密度为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
    

1 个答案:

答案 0 :(得分:3)

FFmpeg目前不支持该类型的元数据。如果您可以在FFmpeg's bug tracker上提供(简短)样本,我们可以在以后的版本中添加对此类元数据的支持。