Rails:Paperclip为类似视频产生不同的结果

时间:2016-11-25 21:13:13

标签: ruby-on-rails video ffmpeg paperclip

我正在使用Paperclip Gem处理我的Rails应用上的视频上传。我已按照一些other stackoverflow questions和外部教程中的说明操作,以使视频上传工作正常。但是,目前系统存在一个我不明白的奇怪故障。

上传两个不同的视频时,该应用可以显示一个缩略图,一个上传没有视频,也没有缩略图,只有另一个视频。

两个视频都使用相同的编解码器,长度大致相同,但尺寸和尺寸略有不同。文件大小。

the video details

当我上传它们时,test1有缩略图,但我的浏览器不会加载视频文件。它存在于我的文件系统中,但Chrome无法播放。

test2发生了相反的情况。它在我的文件系统中的缩略图是零字节,但视频在我的浏览器中正常加载。

以下是我的对象的回形针上传参数:

has_attached_file :video, :styles => {
    :medium => { :format => 'mp4' },
    :thumb => { :geometry => "500x500#", :format => 'jpg', :time => 10 }
  }, :processors => [:transcoder]
validates_attachment_presence :video
validates_attachment :video, content_type: { content_type: ["video/mp4", "video/mov", "video/wav", "video/wmv"] }

I've created a Github repo with an example app that reproduces the issue, at least on my system.

2 个答案:

答案 0 :(得分:1)

我可以毫无问题地在多个浏览器中播放这两个文件。

但是, test1.mp4 可能无法(似乎)工作的原因是:

  1. test1.mp4在文件末尾有moov个原子:

    AtomicParsley test1.mp4 -T
    Atom ftyp @ 0 of size: 32, ends @ 32
    Atom free @ 32 of size: 8, ends @ 40
    Atom mdat @ 40 of size: 1310866, ends @ 1310906
    Atom moov @ 1310906 of size: 9926, ends @ 1320832
    

    这意味着浏览器必须先完全下载文件才能播放。如果您的连接速度很慢,可能需要一段时间才会显示它无效。

    test2.mp4在文件开头有moov个原子,这意味着它可以在下载完成之前播放:

     AtomicParsley test2.mp4 -T
     Atom ftyp @ 0 of size: 32, ends @ 32
     Atom moov @ 32 of size: 7464, ends @ 7496
    

    您可以使用moov ffmpeg选项或movflags faststart工具将qt-faststart原子移动到文件的开头。

    如果您使用的是本地文件系统,则不应该成为问题,请参阅下文。

  2. test1.mp4使用Main H.264个人资料,test2.mp4使用Constrained Baseline个人资料。这可能是某些移动设备上的问题,因为Baseline个人资料支持最多。但是,对于较新的设备,这不应该是一个问题。

    您可以尝试使用Baseline个人资料对其进行重新编码,看看是否存在问题。

答案 1 :(得分:0)

请按照此链接https://github.com/thoughtbot/paperclip/wiki/Thumbnail-Generation

进行操作

我认为视频验证可以通过这种方式完成:

validates_attachment :video, :presence => true

而不是在没有它的情况下再做一次。

对于我跟随的图片:

validates_attachment :attachment, content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }

希望这对你有用: - )