Recherche avancée

Médias (1)

Mot : - Tags -/berlin

Autres articles (77)

  • Gestion des droits de création et d’édition des objets

    8 février 2011, par

    Par défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;

  • Dépôt de média et thèmes par FTP

    31 mai 2013, par

    L’outil MédiaSPIP traite aussi les média transférés par la voie FTP. Si vous préférez déposer par cette voie, récupérez les identifiants d’accès vers votre site MédiaSPIP et utilisez votre client FTP favori.
    Vous trouverez dès le départ les dossiers suivants dans votre espace FTP : config/ : dossier de configuration du site IMG/ : dossier des média déjà traités et en ligne sur le site local/ : répertoire cache du site web themes/ : les thèmes ou les feuilles de style personnalisées tmp/ : dossier de travail (...)

  • XMP PHP

    13 mai 2011, par

    Dixit Wikipedia, XMP signifie :
    Extensible Metadata Platform ou XMP est un format de métadonnées basé sur XML utilisé dans les applications PDF, de photographie et de graphisme. Il a été lancé par Adobe Systems en avril 2001 en étant intégré à la version 5.0 d’Adobe Acrobat.
    Étant basé sur XML, il gère un ensemble de tags dynamiques pour l’utilisation dans le cadre du Web sémantique.
    XMP permet d’enregistrer sous forme d’un document XML des informations relatives à un fichier : titre, auteur, historique (...)

Sur d’autres sites (11212)

  • Converting a OBS Stream (RTMP) to a RTMP & RTSP Output

    4 mai 2022, par cb1986

    I need to take an OBS RTMP output Stream and stream to a Youtube RTMP point and stream to a RTSP link for a client. I am currently using Wowza Streaming cloud but I am trying to find an alternative, like uisng FFMPEG in a AWS virtual machine maybe ?

    


    Help

    


    Thanks

    


  • ffmpeg.exe not detecting UScreenCapture

    14 janvier 2021, par TenG

    I have two version of ffmpeg on the Windows 7 PC.

    


    The first came installed with an application, which uses ffmpeg to capture video/audio of the desktop. This works.

    


    It uses an older version of ffmpeg, so I downloaded the latest version and tried the same command and it reports that the devices are not detected.

    


    Commands run :

    


    Old FFMPEG :

    


    ffmpeg.exe -list_devices true -f dshow -i dummy

    


    ffmpeg version N-70358-g047fd98 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.9.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-f
rei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --ena
ble-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-
amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-li
btheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --e
nable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklin
k --enable-zlib
  libavutil      54. 19.100 / 54. 19.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 23.106 / 56. 23.106
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
[dshow @ 04a8a500] DirectShow video devices (some may be both video and audio devices)
[dshow @ 04a8a500]  "VF0700 Live! Cam Chat HD"
[dshow @ 04a8a500]     Alternative name "@device_pnp_\\?\usb#vid_041e&pid_4088&mi_00#7&b015b04&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c
9223196}\global"
[dshow @ 04a8a500]  "UScreenCapture"
[dshow @ 04a8a500]     Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\UScreenCapture"
[dshow @ 04a8a500]  "screen-capture-recorder"
[dshow @ 04a8a500]     Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{4EA6930A-2C8A-4AE6-A561-56E4B5044439}"
[dshow @ 04a8a500] DirectShow audio devices
[dshow @ 04a8a500]  "Microphone (VF0700 Live! Cam Ch"
[dshow @ 04a8a500]     Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\Microphone (VF0700 Live! Cam Ch"
[dshow @ 04a8a500]  "virtual-audio-capturer"
[dshow @ 04a8a500]     Alternative name "@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\{8E14549B-DB61-4309-AFA1-3578E927E935}"
dummy: Immediate exit requested


    


    New FFMPEG :

    


    ffmpeg version N-100616-gca21cb1e36 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 9.3-win32 (GCC) 20200320
  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --a
rch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv
--enable-zlib --enable-libxml2 --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-open
cl --enable-libvmaf --disable-vulkan --enable-libvorbis --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-li
bdavs2 --enable-ffnvcodec --enable-cuda-llvm --disable-libglslang --enable-libass --enable-libbluray --enable-libmp3lame --enable-li
bopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --en
able-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-
libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-li
bxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp
  libavutil      56. 63.100 / 56. 63.100
  libavcodec     58.116.100 / 58.116.100
  libavformat    58. 65.101 / 58. 65.101
  libavdevice    58. 11.103 / 58. 11.103
  libavfilter     7. 95.100 /  7. 95.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
[dshow @ 000000000052cc00] DirectShow video devices (some may be both video and audio devices)
[dshow @ 000000000052cc00]  "VF0700 Live! Cam Chat HD"
[dshow @ 000000000052cc00]     Alternative name "@device_pnp_\\?\usb#vid_041e&pid_4088&mi_00#7&b015b04&0&0000#{65e8773d-8f56-11d0-a3
b9-00a0c9223196}\global"
[dshow @ 000000000052cc00] DirectShow audio devices
[dshow @ 000000000052cc00]  "Microphone (VF0700 Live! Cam Ch"
[dshow @ 000000000052cc00]     Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\Microphone (VF0700 Live! Cam Ch"
dummy: Immediate exit requested


    


    The new version is not detecting the following :

    


    [dshow @ 04a8a500]  "UScreenCapture"
[dshow @ 04a8a500]     Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\UScreenCapture"
[dshow @ 04a8a500]  "screen-capture-recorder"
[dshow @ 04a8a500]     Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{4EA6930A-2C8A-4AE6-A561-56E4B5044439}"
[dshow @ 04a8a500]  "virtual-audio-capturer"
[dshow @ 04a8a500]     Alternative name "@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\{8E14549B-DB61-4309-AFA1-3578E927E935}"


    


    Why is this ?

    


  • How to queue ffmpeg jobs for transcoding ?

    25 juillet 2019, par sujit patel

    This scripts below check ftp fro any media file and starts transcoding using ffmpeg. Problem is it starts so many ffmpeg process simultaneously. since so many ffmpeg process running servers becomes too slow and takes heavy amount of time to transcodes videos. Sometimes server stops working.

    How to put jobs in a queue ?

    #!/usr/bin/env python3
    import os, sys, time, threading, subprocess
    import logging
    from config import MEDIA_SERVER, MEDIA_SERVER_USERNAME, MEDIA_DIRS, LOCAL_MEDIA_DIR_ROOT, TRANSCODING_SERVER,  TRANSCODING_SERVER_USERNAME, RSYNC_SERVER, RSYNC_USERNAME, RSYNC_DIR, PROCESSING_DIR, PROCESSING_GPU_SCRIPT, PROCESSING_CPU_SCRIPT, EMAIL_SEND_TO, EMAIL_SEND_FROM
    from send_email import sendEmail

    import sqlite3


    logger = logging.getLogger(__name__)

    class FuncThread(threading.Thread):
       def __init__(self, target, *args):
           self._targett = target
           self._argst = args
           threading.Thread.__init__(self)

       def run(self):
           self._targett(*self._argst)


    class Automator(threading.Thread):
       def __init__(self):
           threading.Thread.__init__(self)
           self.sleepTime=60
           self.lastSMILFileCheckTime = 0
           self.newlastSMILFileCheckTime = 0

           self.lastMediaFileCheckTime = 0
           self.newLastMediaFileCheckTime = 0

           self.db = None
           self.fluid_threads = []
           self.scriptRoot = os.path.dirname(os.path.realpath(__file__))


       def fluid_thread_add(self, thd):
           self.fluid_threads.append(thd)
           thd.start()

       def processFluidThreads(self):
           fluid_cond = [x.is_alive() for x in self.fluid_threads]
           finished_threads = [x for x, y in zip(self.fluid_threads, fluid_cond) if not y]
           self.fluid_threads = [x for x, y in zip(self.fluid_threads, fluid_cond) if y]
           if len(finished_threads) > 0:
               logger.info('Fluid threads finished: %s (joining on them now...)' % str(len(finished_threads)))
               [thd.join() for thd in finished_threads]
               logger.info('Joined finished threads successfully')
           if len(self.fluid_threads) > 0:
               logger.info('Fluid threads remaining: %s' % str(len(self.fluid_threads)))

       def run(self):
           self.setupDB()
           self.fetchlastCheckTime()
           while True:
               self.process()
               time.sleep(self.sleepTime)


       def process(self):
           logger.debug("process")
           try:
               self.handleNewSMILFiles()
               self.rsyncFromRemote()
               self.handleNewSourceFiles()
          # fluid_thread_add(FuncThread(start_single_task, user, task_name, task_path, selected_region))
               self.processFluidThreads()
               self.updatelastCheckTimes()
           except Exception as e:
               print(e)
               logger.error("Something went wrong while running this")

       def handleNewSourceFiles(self):
           logger.info("Looking for medial files since  " + str(self.lastMediaFileCheckTime))


           for root, dirs, filenames in os.walk(PROCESSING_DIR):
               for subdir in dirs:
                   pass
               for f in filenames:
                   if (f.lower().endswith("complete")):
                       file_path = os.path.join(root, f)
                       mod_time = self.modification_date(file_path)
                       if (mod_time > self.lastMediaFileCheckTime):
                           logger.info("Found a new media File " + file_path)
                           relDir = os.path.relpath(root, PROCESSING_DIR)
                           f_name = root.split("/")[-1]
                           new_output_localdir = os.path.join(LOCAL_MEDIA_DIR_ROOT, relDir)
                           new_output_localdir = os.path.abspath(os.path.join(new_output_localdir, os.pardir))

                           new_output_remotedir = new_output_localdir
                           if new_output_remotedir.startswith(LOCAL_MEDIA_DIR_ROOT):
                               new_output_remotedir = new_output_remotedir[len(LOCAL_MEDIA_DIR_ROOT):]


                           if(self.startATranscodingThread(root, new_output_localdir, new_output_remotedir, f_name+".mp4")):
                               if(mod_time > self.newLastMediaFileCheckTime):
                                   self.newLastMediaFileCheckTime = mod_time


       def startATranscodingThread(self, inputFile, outputLocalDIR, outputRemoteDIR, fileName):
           self.fluid_thread_add(FuncThread(self.runTranscoder, inputFile, outputLocalDIR, outputRemoteDIR, fileName, MEDIA_SERVER))
           return True


       def handleNewSMILFiles(self):

           if (MEDIA_SERVER != TRANSCODING_SERVER):
               logger.info("Media server is separate, fetching last 24 hours SMIL files from " + MEDIA_SERVER)
               self.rsyncSMILFiles()

           logger.info("Looking for SMIL files since  " + str(self.lastSMILFileCheckTime) + " in " + LOCAL_MEDIA_DIR_ROOT)
           for root, dirs, filenames in os.walk(LOCAL_MEDIA_DIR_ROOT):
               for subdir in dirs:
                   pass
               for f in filenames:
                   file_path = os.path.join(root, f)
                   if (f.lower().endswith("stream.smil")):
                       file_path = os.path.join(root, f)
                       mod_time = self.modification_date(file_path)
                       if(mod_time > self.lastSMILFileCheckTime):
                           logger.info("Found a new SMIL File " + file_path)
                           relDir = os.path.relpath(root, LOCAL_MEDIA_DIR_ROOT)
                           f = f.split(".")[0]
                           new_dir_name = os.path.splitext(os.path.basename(f))[0]
                           new_dir_name = os.path.join(relDir, new_dir_name)
                           if(self.createARemoteDirectory(new_dir_name)):
                               if(mod_time > self.newlastSMILFileCheckTime):
                                   self.newlastSMILFileCheckTime = mod_time


       def modification_date(self, filename):
           t = os.path.getmtime(filename)
           return t

       def createARemoteDirectory(self, dirName):
           HOST = RSYNC_SERVER
           DIR_NAME=RSYNC_DIR + "/" + dirName
           COMMAND = "ssh {}@{} mkdir -p {}".format(RSYNC_USERNAME, RSYNC_SERVER, DIR_NAME)
           logger.info("Going to execute :-- " + COMMAND)
           rv = subprocess.check_call(COMMAND, shell=True)
           return True

       def rsyncSMILFiles(self):
           HOST = RSYNC_SERVER
           for MEDIA_DIR in MEDIA_DIRS:
               epoch_time = int(time.time())
               TEMP_FILE="/tmp/rsync_files.{}".format(epoch_time)
               COMMAND = "ssh -o ConnectTimeout=10 {}@{} \"cd {} && find . -mtime -3  -name *.stream.smil > {} &&  rsync -azP --files-from={} . {}@{}:{}/{}\"".format(MEDIA_SERVER_USERNAME, MEDIA_SERVER, MEDIA_DIR, TEMP_FILE, TEMP_FILE, TRANSCODING_SERVER_USERNAME, TRANSCODING_SERVER, LOCAL_MEDIA_DIR_ROOT, MEDIA_DIR)
               logger.info("Going to execute :-- " + COMMAND)
               try:
                   rv = subprocess.check_call(COMMAND, shell=True)
               except Exception as e:
                   logger.error("Unable to connect to media server")
           return True




       def rsyncFromRemote(self):
           HOST = RSYNC_SERVER
           COMMAND="rsync -azP --delete {}@{}:{} {} ".format(RSYNC_USERNAME, RSYNC_SERVER, RSYNC_DIR+"/", PROCESSING_DIR)
           logger.info("Going to execute :-- " + COMMAND)
           rv = subprocess.check_call(COMMAND, shell=True)
           return True

       def runTranscoder(self, inputDIR, outputLocalDIR, outputRemoteDIR, fileName, media_server):
           HOST = RSYNC_SERVER

           COMMAND="bash {} {} {} {} {} {}".format(PROCESSING_CPU_SCRIPT, inputDIR, outputLocalDIR, outputRemoteDIR, fileName, media_server)
    #        if (len(self.fluid_threads)>2):
    #           COMMAND="bash {} {} {} {} {} {}".format(PROCESSING_CPU_SCRIPT, inputDIR, outputLocalDIR, outputRemoteDIR, fileName, media_server)

           logger.info("Going to execute :-- " + COMMAND)
           #sendEmail(EMAIL_SEND_TO, EMAIL_SEND_FROM, "Transcoding started for file" + fileName.replace('_','-').replace('/','-'), outputRemoteDIR+fileName)
          # sendEmail(EMAIL_SEND_TO, EMAIL_SEND_FROM, "Transcoding started for file" , outputRemoteDIR+fileName)
           try:enter code here
               rv = subprocess.check_call(COMMAND, shell=True)
              # if (rv !=0):
               #    sendEmail(EMAIL_SEND_TO, EMAIL_SEND_FROM, "Transcoding Failed for a file", outputRemoteDIR+fileName)
           except Exception as e:
               logger.error("Transcoding Failed for a file :- " +  outputRemoteDIR+fileName);
    #            sendEmail(EMAIL_SEND_TO, EMAIL_SEND_FROM, "Transcoding Failed for a file", outputRemoteDIR+fileName+"\n contact dev@example.com")
           return True

       def setupDB(self):
         self.db = sqlite3.connect('automator.db', detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES)
         sql = "create table if not exists last_smil_check (last_check_time int)"
         self.db.execute(sql)
         self.db.commit()

         sql = "create table if not exists last_mediafile_check(last_check_time int)"
         self.db.execute(sql)
         self.db.commit()


       def fetchlastCheckTime(self):
         cursor = self.db.execute("select * from last_smil_check")
         count = 0
         for row in cursor:
           logger.info(row)
           count = count+1
           self.lastSMILFileCheckTime = row[0]
           self.newlastSMILFileCheckTime = self.lastSMILFileCheckTime

         cursor = self.db.execute("select * from last_mediafile_check")
         count = 0
         for row in cursor:
           logger.info(row)
           count = count+1
           self.lastMediaFileCheckTime = row[0]
           self.newLastMediaFileCheckTime = self.lastMediaFileCheckTime


       def updatelastCheckTimes(self):

         self.lastSMILFileCheckTime = self.newlastSMILFileCheckTime
         self.lastMediaFileCheckTime = self.newLastMediaFileCheckTime

         cursor = self.db.execute("select * from last_smil_check")
         count = 0
         for row in cursor:
           count = count +1

         if(count == 0):
           sql_query = "insert into last_smil_check values ({})".format(self.lastSMILFileCheckTime)
           logger.info("Executing " + sql_query)

           self.db.execute(sql_query)
         else:
           self.db.execute("update last_smil_check set last_check_time ={}".format(self.lastSMILFileCheckTime))

         self.db.commit()

         cursor = self.db.execute("select * from last_mediafile_check")
         logger.info(cursor)
         count = 0
         for row in cursor:
           count = count +1

         if(count == 0):
           sql_query = "insert into last_mediafile_check values ({})".format(self.lastMediaFileCheckTime)
           logger.info("Executing " + sql_query)

           self.db.execute(sql_query)
         else:
           sql_query = "update last_mediafile_check set last_check_time ={}".format(self.lastMediaFileCheckTime)
           logger.info("Executing " + sql_query)
           self.db.execute(sql_query)

         self.db.commit()



    if __name__ == '__main__':
       logging.basicConfig(level=logging.DEBUG)
       automator = Automator()
       automator.start()

    enter code here