ffmpeg concat iMovie 导入 - 不一致的失败

ffmpeg concat iMovie Import - Inconsistent Failure

我正在尝试使用一组带 ffmpeg 的定时屏幕截图创建两部电影,使用 -f concat 指定 png 屏幕截图和它们应该显示的持续时间。我主要来自 ffmpeg slideshow tutorialconcat documentation。 Quicktime 能够毫无问题地打开我的两部 ffmpeg 生成的电影,但是尽管使用相同的命令和脚本来创建它们,iMovie 打开一个没有问题而永远不会打开另一个,无论我重新创建源代码多少次 screenshots/durations 并重新制作视频。

我有两个从我的输入中捕获并转换为 png 的屏幕,我正在尝试生成两部电影以导入到 iMovie 中并同时并排显示。要生成电影,我使用以下命令:

ffmpeg -f concat -i win1input.txt -vsync vfr -pix_fmt yuv420p win1.mov
ffmpeg -f concat -i win2input.txt -vsync vfr -pix_fmt yuv420p win2.mov

其中 win1input.txt 和 win2input.txt 基本相同(从具有不同文件名和时间的相同脚本生成):

file 'win1-01.png'
duration 3.07
file 'win1-02.png'
duration 2.55
...

两部电影都生成了,可以用 quicktime 打开,没有任何抱怨。但是,当我尝试将它们导入 iMovie 时,第一部电影总是可以正常导入,第二部电影出现错误 "No importable files" 并且在媒体预览中的持续时间为 0 window.

任何人都可以建议观看电影的方法并尝试找出可能导致 iMovie 出错的方法吗?没有更详细的错误,我被卡住了。我对两者之间的区别感到非常困惑,因为它们是从相同的进程、编解码器等生成的。任何有关电影的更多信息的帮助或建议将不胜感激!

更新 ffmpeg -i 输出:

$ ffmpeg -i badMovie.mov

ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
  built with Apple LLVM version 8.1.0 (clang-802.0.42)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libass --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-opencl --enable-openssl --disable-lzma --enable-nonfree --enable-vda
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'badMovie.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    encoder         : Lavf56.40.101
  Duration: 00:02:09.84, start: 0.000000, bitrate: 36 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x800, 35 kb/s, 0.28 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
      handler_name    : DataHandler
      encoder         : Lavc56.60.100 libx264


$ ffmpeg -i goodMovie.mov
ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
  built with Apple LLVM version 8.1.0 (clang-802.0.42)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.2 --enable-shared --   enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libass --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-opencl --enable-openssl --disable-lzma --enable-nonfree --enable-vda
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'goodMovie.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    encoder         : Lavf56.40.101
  Duration: 00:02:11.84, start: 0.000000, bitrate: 13 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x800, 13 kb/s, 0.64 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
  handler_name    : DataHandler
  encoder         : Lavc56.60.100 libx264

感谢评论中的@mulvya,这部糟糕的电影似乎低于某些要求的帧率。使用 ffmpeg -i bad_movie.mov -r 5 bad_movie_fixed.mov 对输出影片重新采样似乎可以解决此问题。

(nb 我不知道如何在初始创建步骤中包含 -r;我能弄清楚如何完成这项工作的唯一方法是在创建电影后作为单独的重新采样首先)。