31328


teratailで質問したのですが、  
一日以上たち、回答がつかなかったのでスタックオーバーフローにマルチポストさせていただきます。

以下内容です。

### 前提・実現したいこと

投稿した動画からスクリーンショットでサムネイル表示をしたいです。

### エラーメッセージ

[code]

    Errno::ENOENT in MicropostsController#create
    No such file or directory - the ffprobe binary could not be found in /usr/local/rvm/gems/ruby-2.3.0/bin:/home/ubuntu/.nvm/versions/node/v4.5.0/bin:/usr/local/rvm/gems/ruby-2.3.0@global/bin:/usr/local/rvm/rubies/ruby-2.3.0/bin:/mnt/shared/bin:/home/ubuntu/workspace/node_modules/.bin:/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/shared/sbin:/opt/gitl:/opt/go/bin:/mnt/shared/c9/app.nw/bin:/usr/local/rvm/bin
    
[/code]

スクリーンショットメソッドの途中でこのようなエラーが表示されます。  
ディレクトリが見つけられないとのことですが、includeやrequireあたりが間違っているのでしょうか？

### 実行手順

①Carrierwaveの設定(動画は無事アップロードされます)  
②FFmpegのインストール  
③スクリーンショットの作成

### ステップ明記

③からうまくいきません。  
念のため、②からかきます。

②FFmpegのインストール

[code]

    $ sudo apt-get install ffmpeg
    
[/code]

bundle install

[code]

    gem 'streamio-ffmpeg'
    
[/code]

③スクリーンショットの作成

【追記】  
**app/uploaders/video_uploader.rb**

[code]

    require 'streamio-ffmpeg'
    
[/code]

**app/uploaders/video_uploader.rb**

[code]

      # Create different versions of your uploaded files:
      (中略)
      version :screenshot do
        process :screenshot
        def full_filename (for_file = model.logo.file)
          "screenshot.jpg"
        end
      end
    
      def screenshot
        tmpfile = File.join(File.dirname(current_path), "tmpfile")
    
        File.rename(current_path, tmpfile)
    
        movie = FFMPEG::Movie.new(tmpfile)★エラー箇所★
        movie.screenshot(current_path + ".jpg", {resolution: '512x312' }, preserve_aspect_ratio: :width)
    preserve_aspect_ratio: :width)
        File.rename(current_path + ".jpg", current_path)
    
        File.delete(tmpfile)
      end
    
[/code]

### 文献の引用

[こちら](http://dev.classmethod.jp/server-side/ruby-on-rails/ruby-on-rails-
carrierwave-ffmpeg/)を参考にコードをかいています。

### ソース

[code]

    # encoding: utf-8
    require 'streamio-ffmpeg'
    class VideoUploader < CarrierWave::Uploader::Base
      # Include RMagick or MiniMagick support:
      # include CarrierWave::RMagick
      # include CarrierWave::MiniMagick
      # Choose what kind of storage to use for this uploader:
      storage :file
      # storage :fog
    
      # Override the directory where uploaded files will be stored.
      # This is a sensible default for uploaders that are meant to be mounted:
      def store_dir
        "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
      end
    
      # Provide a default URL as a default if there hasn't been a file uploaded:
      # def default_url
      #   # For Rails 3.1+ asset pipeline compatibility:
      #   # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
      #
      #   "/images/fallback/" + [version_name, "default.png"].compact.join('_')
      # end
    
      # Process files as they are uploaded:
      # process :scale => [200, 300]
      #
      # def scale(width, height)
      #   # do something
      # end
    
      # Create different versions of your uploaded files:
      version :screenshot do
        process :screenshot
        def full_filename (for_file = model.logo.file)
          "screenshot.jpg"
        end
      end
    
      def screenshot
        tmpfile = File.join(File.dirname(current_path), "tmpfile")
    
        File.rename(current_path, tmpfile)
    
        movie = FFMPEG::Movie.new(tmpfile)★エラー箇所★
        movie.screenshot(current_path + ".jpg", {resolution: '512x312' }, preserve_aspect_ratio: :width)
        File.rename(current_path + ".jpg", current_path)
    
        File.delete(tmpfile)
      end
      # Add a white list of extensions which are allowed to be uploaded.
      # For images you might use something like this:
      def extension_white_list
        %w(MOV wmv mp4)
      end
    
    
    
      # Override the filename of the uploaded files:
      # Avoid using model.id or version_name here, see uploader/store.rb for details.
      # def filename
      #   "something.jpg" if original_filename
      # end
    
    
    
    end
    
[/code]

### 試したこと

①screenshotメソッドを外すと動画のアップロードはできるようになります。  
②ディレクトリの位置が間違っているのかとも思いましたので多少いじってみましたがよくわかりませんでした。

### 環境

**Gemfile**

[code]

    gem 'rails', '4.2.5'
    gem 'carrierwave',             '0.10.0'
    gem 'streamio-ffmpeg'
    gem "less-rails"
    gem 'therubyracer'
    
[/code]

マルチポスト  
[teratail](https://teratail.com/questions/59702)


CC BY-SA 3.0
2016-12-23T03:43:00.283
31324
2016-12-23T10:45:02.757
2016-12-23T10:45:02.757
-1
19459
question
ruby-on-rails ffmpeg
Ubuntu で FFMPEGとCarrierWaveで動画のサムネイルを作成したい。


Ubuntu 14.04 では `sudo apt-get install ffmpeg` だけで `ffmpeg` をインストールする事は出来ません。

以前、`ffmpeg` から開発コミュニティの事情により `libav`
というプロジェクトが[派生しました](https://cpplover.blogspot.jp/2012/03/ffmpeglibav.html)。  
当時いくつかのディストリビューションは `ffmpeg` をパッケージとして提供する事を止め、`libav` 側を採用しました。

そういった事情で、一部の（特に古い）ディストリビューションで `ffmpeg`
を使う際には、リポジトリを追加する、自分でビルドする、静的リンクされたバイナリをダウンロードして配置する、などの作業が必要になります。

[Ubuntu のパッケージ検索](http://packages.ubuntu.com/ja/)で調べると、LTS の中では [14.04 が
`ffmeg`
パッケージを提供していません](http://packages.ubuntu.com/search?keywords=ffmpeg&searchon=names&exact=1&suite=all&section=all)。


CC BY-SA 3.0
2016-12-23T05:24:44.383
31328
2016-12-23T05:24:44.383
3054
31324
answer