使用 ffmpeg 缩放 App Store 的应用程序预览视频

Using ffmpeg to scale app preview videos for the AppStore

我正在生成要发送到 AppStore 的应用预览视频。根据设备类型,AppStore 需要特定的视频分辨率。

我有一个主视频,分辨率为 1920x1080,我可以上传它。

我需要生成另一个分辨率为 1920x886 的视频以支持 6.5" 设备,因此我使用以下命令执行缩放:

ffmpeg -i video_1920_1080.mp4 -vf scale=1920:886 -c:a copy video_1920_886.mp4

如果我使用 ffmpeg -i 获取生成的视频的信息,我会得到以下结果:

ffmpeg -i video_1920_886.mp4

ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers
  built with Apple LLVM version 9.0.0 (clang-900.0.39.2)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.4.2 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --disable-jack --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'hittin_1920_886.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:00:29.13, start: 0.000000, bitrate: 705 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x886 [SAR 443:540 DAR 16:9], 694 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      timecode        : 00:00:10:20
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
    Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s
    Metadata:
      handler_name    : TimeCodeHandler
      timecode        : 00:00:10:20

好的,看来输出视频的分辨率是正确的 1920x886。

但是,当我尝试上传此视频时,AppStore 抱怨视频的分辨率不正确。

如果我在 macOS 上打开文件属性 window,同一视频会出现以下信息:

而且,如果我在 VLC 上打开相同的视频,我可以在“媒体信息”屏幕上看到以下信息:

所以:

  1. ffmpeg -i 告诉我视频的分辨率为 1920x886。
  2. macos 文件属性告诉我视频的分辨率为 1575x886。
  3. VLC 告诉我视频的分辨率为 1920x898,显示分辨率为 1920x886。

为什么会有三种不同的分辨率?我怎样才能改变他们中的每一个?我想 appstoreconnect 网站希望文件属性分辨率为 1920x886。我该如何更改?

FFmpeg 的缩放过滤器将调整视频的样本纵横比,以便保留原始显示比例。显然,Apple 使用该 SAR 计算新的有效显示分辨率。

插入一个 setsar 过滤器以将 SAR 重置为 1,以便显示分辨率与存储的分辨率相同。

ffmpeg -i video_1920_1080.mp4 -vf scale=1920:886,setsar=1 -c:a copy video_1920_886.mp4