Recherche avancée

Médias (2)

Mot : - Tags -/media

Autres articles (106)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

Sur d’autres sites (11367)

  • 400 Bad Request Error uploading paperclip videos

    5 mars 2017, par jalen201

    Im trying to upload videos with paperclip. When i hit the submit button i receive.

    RSolr::Error::Http - 400 Bad Request Error:

    this is the migration

    class AddAttachmentVideoToPins < ActiveRecord::Migration
     def self.up
       change_table :pins do |t|
         t.attachment :video
       end
     end

     def self.down
       remove_attachment :pins, :video
     end
    end

    Heres the model

    class Pin < ApplicationRecord
     acts_as_votable
     belongs_to :user
     has_many :comments

     searchable do
       text :title, :boost => 5
       text :description
     end

     has_attached_file :image, styles: {medium: "300x300>" }
     validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/

     has_attached_file :video, styles: {
       :medium => {
         :geometry => "640x480",
         :format => 'mp4'
       },
       :thumb => {
         :geometry => "160x120", :format => 'jpeg', :time => 10
       }
     },
     :processors => [:transcoder]

     validates_attachment_content_type :video, content_type:  /\Avideo\/.*\Z/

    also i added these 4 gems, and installed ffmpeg with homebrew

       gem 'paperclip', '~> 5.1'

       gem 'aws-sdk', '~> 2.8'

       gem 'paperclip-av-transcoder', '~> 0.6.4'

       gem 'paperclip-ffmpeg', '~> 1.2'

    lastly this is my controller, i added :video as a strong parameter.

    class PinsController < ApplicationController

     before_action :find_pin, only: [:show,:edit,:update,:destroy, :upvote]
     before_action :authenticate_user!, except: [:index,:show]

     def index
       @search = Pin.search do
         fulltext params[:search]
       end
       @pins = @search.results
     end

     def new
       @pin = current_user.pins.build
     end

     def show
       @comments = Comment.where(pin_id: @pin).order('created_at DESC')
     end

     def edit
       @lookup = User.all
     end

     def profile
       @users = User.all
       if User.find_by_username(params[:id])
         @username = params[:id]
         @user = User.find_by_username(params[:id])
       else
         redirect_to root_path
       end
       @user_pin = Pin.all.where('user_id = ?',       User.find_by_username(params[:id]).id)
     end

     def update
       if @pin.update(pin_params)
         redirect_to @pin, notice: "Pin was succesfully updated"
       else
         render 'edit'
       end
     end

     def destroy
       @pin.destroy
       redirect_to root_path      
     end

     def upvote
       @pin.upvote_by current_user
       redirect_to :back
     end

     def create
       @pin = current_user.pins.build (pin_params)

       if @pin.save
         redirect_to @pin , notice: "Succesfully created new pin"
       else
         render 'new'
       end
     end

     private

     def pin_params
       params.require(:pin).permit(:title, :description, :image, :video)
     end

     def find_pin
       @pin = Pin.find(params[:id])
     end
    end

    i added this in the view

    <%= video_tag @pin.video.url(:medium), controls: true, style: "max-width: 100%;" %>

    If anyone could help that would be greatly appreciated

  • What is AVHWAccel, and how can I use it ?

    15 mars 2017, par shintaroid

    I want to make use of hardware acceleration for decoding an h264 encoded MP4 file.

    My computing environment :

    Hardware: MacPro (2015 model)
    Software: FFmpeg (installed by brew)

    Here is the output of FFmpeg command :

    $ffmpeg -hwaccels
    Hardware acceleration methods:
    vda
    videotoolbox

    According to this document, there are two options for my environment, that is, VDA and VideoToolBox. I tried VDA in C++ :

    Codec = avcodec_find_decoder_by_name("h264_vda");

    It kind of worked, but the output of the pixel format is UYVY422 which I have trouble to deal with (any suggestion on how to render UYVY422 in C++ ? The ideal format is yuv420p)

    So I want to try VideotoolBox, but there is no such simple thing like (it may work in the case of encoding though)

    Codec = avcodec_find_decoder_by_name("h264_videotoolbox");

    It seems I should use AVHWAccel, but what is AVHWAccel and how to use it ?

    Part of My C++ code :

    for( unsigned int i = 0; i < pFormatCtx->nb_streams; i++ ){
           if(pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO){
               pCodecCtx = pFormatCtx->streams[i]->codec;
               video_stream = pFormatCtx->streams[i];
               if( pCodecCtx->codec_id == AV_CODEC_ID_H264 ){
                   //pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
                   pCodec = avcodec_find_decoder_by_name("h264_vda");
                   break;
               }
           }
       }
       // open codec
       if( pCodec ){
           if((ret=avcodec_open2(pCodecCtx, pCodec, NULL)) < 0) {
           ....
  • QTableWidget and QProcess - update table based on multiple process results

    9 mars 2017, par Spencer

    I have a python program that runs through a QTableWidget and for each item it runs a QProcess (an FFMPEG process to be exact). What I’m trying to do is update the "parent" cell when the process completes. Right now there is a for loop that goes through each row and launches a process for each, and connects the finished signal of that process to a "finished" function, which updates the QTableWidget cell. I’m just having trouble properly telling the function WHICH sell to update - right now I am passing it the index of the current row (seeing as it is being spawned by the for loop) but what happens is by the time the processes start to finish it will only get the last row in the table... I’m quite new to Python and PyQt so it is possible there is some fundamental thing I have wrong here !

    I tried passing the actual QTabelWidgetItem instead of the index but I got this error : "RuntimeError : wrapped C/C++ object of type QTableWidgetItem has been deleted"

    My code, the function "finished" and line #132 are the relevant ones :

    import sys, os, re
    from PyQt4 import QtGui, QtCore

    class BatchTable(QtGui.QTableWidget):
       def __init__(self, parent):
           super(BatchTable, self).__init__(parent)
           self.setAcceptDrops(True)
           self.setColumnCount(4)
           self.setColumnWidth(1,50)
           self.hideColumn(3)
           self.horizontalHeader().setStretchLastSection(True)
           self.setHorizontalHeaderLabels(QtCore.QString("Status;Alpha;File;Full Path").split(";"))

           self.doubleClicked.connect(self.removeProject)

       def removeProject(self, myItem):
           row = myItem.row()
           self.removeRow(row)

       def dragEnterEvent(self, e):
           if e.mimeData().hasFormat('text/uri-list'):
               e.accept()
           else:
               print "nope"
               e.ignore()

       def dragMoveEvent(self, e):
           e.accept()

       def dropEvent(self, e):
           if e.mimeData().hasUrls:
               for url in e.mimeData().urls():
                   chkBoxItem = QtGui.QTableWidgetItem()
                   chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
                   chkBoxItem.setCheckState(QtCore.Qt.Unchecked)

                   rowPosition = self.rowCount()
                   self.insertRow(rowPosition)
                   self.setItem(rowPosition, 0, QtGui.QTableWidgetItem("Ready"))
                   self.setItem(rowPosition, 1, chkBoxItem)
                   self.setItem(rowPosition, 2, QtGui.QTableWidgetItem(os.path.split(str(url.toLocalFile()))[1]))
                   self.setItem(rowPosition, 3, QtGui.QTableWidgetItem(url.toLocalFile()))
                   self.item(rowPosition, 0).setBackgroundColor(QtGui.QColor(80, 180, 30))

    class ffmpegBatch(QtGui.QWidget):
       def __init__(self):
           super(ffmpegBatch, self).__init__()
           self.initUI()

       def initUI(self):

           self.edit = QtGui.QTextEdit()

           cmdGroup = QtGui.QGroupBox("Commandline arguments")
           fpsLbl = QtGui.QLabel("FPS:")
           self.fpsCombo = QtGui.QComboBox()
           self.fpsCombo.addItem("29.97")
           self.fpsCombo.addItem("23.976")
           hbox1 = QtGui.QHBoxLayout()
           hbox1.addWidget(fpsLbl)
           hbox1.addWidget(self.fpsCombo)
           cmdGroup.setLayout(hbox1)

           saveGroup = QtGui.QGroupBox("Output")
           self.outputLocation = QtGui.QLineEdit()
           self.browseBtn = QtGui.QPushButton("Browse")
           saveLocationBox = QtGui.QHBoxLayout()
           # Todo: add "auto-step up two folders" button
           saveLocationBox.addWidget(self.outputLocation)
           saveLocationBox.addWidget(self.browseBtn)
           saveGroup.setLayout(saveLocationBox)

           runBtn = QtGui.QPushButton("Run Batch Transcode")

           mainBox = QtGui.QVBoxLayout()
           self.table = BatchTable(self)
           # TODO: add "copy from clipboard" feature
           mainBox.addWidget(self.table)
           mainBox.addWidget(cmdGroup)
           mainBox.addWidget(saveGroup)
           mainBox.addWidget(runBtn)
           mainBox.addWidget(self.edit)

           self.setLayout(mainBox)
           self.setGeometry(300, 300, 600, 500)
           self.setWindowTitle('FFMPEG Batch Converter')

           # triggers/events
           runBtn.clicked.connect(self.run)

       def RepresentsInt(self, s):
           try:
               int(s)
               return True
           except ValueError:
               return False

       def run(self):
           if (self.outputLocation.text() == ''):
               return
           for projIndex in range(self.table.rowCount()):
               # collect some data
               ffmpeg_app = "C:\\Program Files\\ffmpeg-20150702-git-03b2b40-win64-static\\bin\\ffmpeg"
               frameRate = self.fpsCombo.currentText()
               inputFile = self.table.model().index(projIndex,3).data().toString()
               outputPath = self.outputLocation.text()
               outputPath = outputPath.replace("/", "\\")

               # format the input for ffmpeg
               # find how the exact number range, stored as 'd'
               imageName = os.path.split(str(inputFile))[1]
               imageName, imageExt = os.path.splitext(imageName)
               length = len(imageName)
               d = 0
               while (self.RepresentsInt(imageName[length-2:length-1]) == True):
                   length = length-1
                   d = d+1
               inputPath = os.path.split(str(inputFile))[0]
               inputFile = imageName[0:length-1]
               inputFile = inputPath + "/" + inputFile + "%" + str(d+1) + "d" + imageExt
               inputFile = inputFile.replace("/", "\\")

               # format the output
               outputFile = outputPath + "\\" + imageName[0:length-2] + ".mov"


               # build the commandline
               cmd = '"' + ffmpeg_app + '"' + ' -y -r ' + frameRate + ' -i ' + '"' + inputFile + '"' + ' -vcodec dnxhd -b:v 145M -vf colormatrix=bt601:bt709 -flags +ildct ' + '"' + outputFile + '"'

               # launch the process
               proc = QtCore.QProcess(self)
               proc.finished.connect(lambda: self.finished(projIndex))
               proc.setProcessChannelMode(proc.MergedChannels)
               proc.start(cmd)
               proc.readyReadStandardOutput.connect(lambda: self.readStdOutput(proc, projIndex, 100))
               self.table.setItem(projIndex, 0, QtGui.QTableWidgetItem("Running..."))
               self.table.item(projIndex, 0).setBackgroundColor(QtGui.QColor(110, 145, 30))

       def readStdOutput(self, proc, projIndex, total):
           currentLine = QtCore.QString(proc.readAllStandardOutput())
           currentLine = str(currentLine)
           frameEnd = currentLine.find("fps", 0, 15)
           if frameEnd != -1:
               m = re.search("\d", currentLine)
               if m:
                   frame = currentLine[m.start():frameEnd]
                   percent = (float(frame)/total)*100
                   print "Percent: " + str(percent)
                   self.edit.append(str(percent))
                   self.table.setItem(projIndex, 0, QtGui.QTableWidgetItem("Encoded: " + str(percent) + "%"))

       def finished(self, projIndex):
           # TODO: This isn't totally working properly for multiple processes (seems to get confused)
           print "A process completed"
           print self.sender().readAllStandardOutput()
           if self.sender().exitStatus() == 0:
               self.table.setItem(projIndex, 0, QtGui.QTableWidgetItem("Encoded"))
               self.table.item(projIndex, 0).setBackgroundColor(QtGui.QColor(45, 145, 240))


    def main():
       app = QtGui.QApplication(sys.argv)
       ex = ffmpegBatch()
       ex.show()
       sys.exit(app.exec_())

    if __name__ == '__main__':
       main()

    (And yes I do know that my percentage update is totally wrong right now, still working on that...)