Recherche avancée

Médias (1)

Mot : - Tags -/intégration

Autres articles (73)

  • 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 (14256)

  • FFmpeg continues to process after time specified at "-to"

    4 août 2020, par Yamahabest

    I have a video, where I want to cut a part from the beginning, and from the end. And I want to apply some fade ins/fade outs, and add some text.

    


    So, I came up with the following syntax :

    


    -ss 10 -to 40 
-i "D:\DATA\Software\VideoProcessor_Files\20171015 Zelhem Tandem Frans met Mirthe.MP4" 
-loop 1 -i "Input_Files\logo maurik large.png" 
-loop 1 -i "Input_Files\logo maurik small.png" 
-filter_complex "
    color=0x7F7F7F@0.95:1920x1080[grey_for_fade_out];
    [grey_for_fade_out]fade=t=out:st=12:d=2:alpha=1[grey_fade_out];
    [0:v][grey_fade_out]overlay[video_grey_fade_out];
    color=0x7F7F7F@0.95:1920x1080[grey_for_fade_in];
    [grey_for_fade_in]fade=t=in:st=37:d=2:alpha=1[grey_fade_in];
    [video_grey_fade_out][grey_fade_in]overlay[video_grey_fade_out_in];
    [1:v]fade=t=out:st=13:d=2:alpha=1[over];
    [over]scale=iw/1.5:-1[scaled];
    [video_grey_fade_out_in][scaled]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/10[video_grey_fade_out_in_logo];
    [1:v]fade=t=in:st=36:d=2:alpha=1[over2];
    [over2]scale=iw/1.5:-1[scaled2];
    [video_grey_fade_out_in_logo][scaled2]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[video_grey_fade_out_in_logo2];
    [2:v]colorchannelmixer=aa=0.5,fade=t=in:st=14:d=2:alpha=1,fade=t=out:st=35:d=2:alpha=1[over3];
    [over3]scale=iw/10:-1[scaled3];
    [video_grey_fade_out_in_logo2][scaled3]overlay=10:10[video_complete];
    [video_complete]drawtext=fontfile=Input_Files/Sansation-Bold.ttf:text='Tandemvlucht met Mirthe':fontsize=96:fontcolor=white:alpha='if(lt(t,11),1,(2-(t-11))/2)':x=(w-text_w)/2:y=((h-text_h)/2)+125,drawtext=fontfile=Input_Files/Sansation-Bold.ttf:text='Zeddam':fontsize=96:fontcolor=white:alpha='if(lt(t,11),1,(2-(t-11))/2)':x=(w-text_w)/2:y=((h-text_h)/2)+250,drawtext=fontfile=Input_Files/Sansation-Bold.ttf:text='4 augustus 2020':fontsize=96:fontcolor=white:alpha='if(lt(t,11),1,(2-(t-11))/2)':x=(w-text_w)/2:y=((h-text_h)/2)+375,drawtext=fontfile=Input_Files/Sansation-Bold.ttf:text='Ook een keer meevliegen?':fontsize=96:fontcolor=white:alpha='if(lt(t,37),0,(t-37)/2)':x=(w-text_w)/2:y=((h-text_h)/6),drawtext=fontfile=Input_Files/Sansation-Bold.ttf:text='Of bel 085 - 049 55 69':fontsize=96:fontcolor=white:alpha='if(lt(t,37),0,(t-37)/2)':x=(w-text_w)/2:y=((h-text_h)/2)+350"
-preset medium 
-crf 18 
-c:a copy 
-y ".\Output_Files\Video\Zeddam\2020-08-04\Mirthe\27ed390a-8497-4550-b93f-4f87d9f2c9f0\MP_Tandemvlucht met_Mirthe_Zeddam_2020-08-04.mp4"


    


    I am quite sure this has worked in the past, but now FFmpeg just keeps on processing endlessly. If I then stop the FFmpeg process, and look at the resulting file, I see that the last frame (of the end of the specified period) just keeps on duplicating.

    


    The drop counter in the console output of FFmpeg also starts increasing at the end of the specified period :

    


    frame=  987 fps= 15 q=-1.0 Lsize=   31357kB time=00:00:41.04 bitrate=6259.0kbits/s dup=0 drop=10 speed=0.644x


    


    I am kind of lost on why this doesn't work anymore. I might have upgraded the FFmpeg executable in the mean time. Maybe my syntax was/is not correct, but I believe it just worked.

    


    It has to be in the complex filter, because when I remove that, it works alright.
It is not in the drawtext part of the complex filter, because it still occurs when I remove that. And when I only do the drawtext, FFmpeg stops correctly at the specified time.

    


    I have tried this, but then it still occurs :

    


    -filter_complex "
    color=0x7F7F7F@0.95:1920x1080[grey_for_fade_out];
    [grey_for_fade_out]fade=t=out:st=12:d=2:alpha=1[grey_fade_out];
    [0:v][grey_fade_out]overlay[video_grey_fade_out];
    color=0x7F7F7F@0.95:1920x1080[grey_for_fade_in];
    [grey_for_fade_in]fade=t=in:st=37:d=2:alpha=1[grey_fade_in];
    [video_grey_fade_out][grey_fade_in]overlay"


    


    Also with this, it still occurs :

    


    -filter_complex "
    [1:v]fade=t=out:st=13:d=2:alpha=1[over];
    [over]scale=iw/1.5:-1[scaled];
    [0:v][scaled]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/10[video_grey_fade_out_in_logo];
    [1:v]fade=t=in:st=36:d=2:alpha=1[over2];
    [over2]scale=iw/1.5:-1[scaled2];
    [video_grey_fade_out_in_logo][scaled2]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[video_grey_fade_out_in_logo2];
    [2:v]colorchannelmixer=aa=0.5,fade=t=in:st=14:d=2:alpha=1,fade=t=out:st=35:d=2:alpha=1[over3];
    [over3]scale=iw/10:-1[scaled3];
    [video_grey_fade_out_in_logo2][scaled3]overlay=10:10"


    


    I just don't understand. All my fade-ins/-outs seem to be within the specified range :

    


      

    • fade=t=out:st=12:d=2 : start at 12 seconds, duration 2 seconds. This ends at 14 seconds, which is smaller than 40 seconds.
    • 


    • fade=t=in:st=37:d=2 : start at 37 seconds, duration 2 seconds. This ends at 39 seconds, which is smaller than 40 seconds.
    • 


    • fade=t=out:st=13:d=2 : start at 13 seconds, duration 2 seconds. This ends at 15 seconds, which is smaller than 40 seconds.
    • 


    • fade=t=in:st=36:d=2 : start at 36 seconds, duration 2 seconds. This ends at 38 seconds, which is smaller than 40 seconds.
    • 


    


    It is just like some sequence is not ended properly, which is causing FFmpeg to just continue.

    


  • About the delay of Electron playing FFpmeg transcoded video

    26 juillet 2020, par Yohann

    In the Electron project, you need to try to play the video screen of the camera

    


    The camera is Haikang’s webcam

    


    Get real-time video stream through RTSP protocol

    


    rtsp://admin:admin@192.168.0.253/main/Channels/

    


    There will be a delay of about 3s when playing through the VLC player

    


    Then when used in the project, create a websocket service in Electron through the main process, decode the rtsp video through fluent-ffmpeg, and convert it to flv stream and push it to the rendering process

    


    import * as express from 'express'
import * as expressWebSocket from 'express-ws'
import ffmpeg from 'fluent-ffmpeg'
import webSocketStream from 'websocket-stream/stream'
const path = require('path')

let ffmpegPath
if (process.env.NODE_ENV === 'development') {
  ffmpegPath = path.join(__static, 'ffmpeg', 'bin', 'ffmpeg.exe')
} else {
  ffmpegPath = path.join(process.cwd(), 'ffmpeg', 'bin', 'ffmpeg.exe')
}
ffmpeg.setFfmpegPath(ffmpegPath)

// Start video transcoding service
function videoServer () {
  let app = express()
  app.use(express.static(__dirname))
  expressWebSocket(app, null, {
    perMessageDeflate: true
  })
  app.ws('/rtsp/', rtspRequestHandle)
  app.listen(8888)
  console.log('Create a monitoring service')
}

//RTSP transcoding method
function rtspRequestHandle (ws, req) {
  console.log('rtsp request handle')
  const stream = webSocketStream(ws, {
    binary: true,
    browserBufferTimeout: 1000000
  },
  {
    browserBufferTimeout: 1000000
  })
  let url = req.query.url
  console.log('rtsp url:', url)
  try {
    ffmpeg(url)
      .addInputOption('-rtsp_transport', 'tcp', '-buffer_size', '102400') // Here you can add some RTSP optimized parameters
      .outputOptions([
        '-fflags',
        'nobuffer',
        '-tune',
        'zerolatency'
      ])
      .on('start', function () {
        console.log(url, 'Stream started.')
      })
      .on('codecData', function () {
        console.log(url, 'Stream codecData.')
      })
      .on('error', function (err) {
        console.log(url, 'An error occured: ', err.message)
      })
      .on('end', function () {
        console.log(url, 'Stream end!')
      })
      .outputFormat('flv').videoCodec('copy').noAudio().pipe(stream)
  } catch (error) {
    console.log(error)
  }
}

export default videoServer


    


    The rendering process parses the video stream and plays the video through flv.js

    


    <template>&#xA;  <div class="video">&#xA;    <video class="video-box" ref="player"></video>&#xA;  </div>&#xA;</template>&#xA;&#xA;<code class="echappe-js">&lt;script&gt;&amp;#xA;  import flvjs from &amp;#x27;flv.js&amp;#x27;&amp;#xA;  export default {&amp;#xA;    name: &amp;#x27;videopage&amp;#x27;,&amp;#xA;    props: {&amp;#xA;      rtsp: String&amp;#xA;    },&amp;#xA;    data () {&amp;#xA;      return {&amp;#xA;        player: null&amp;#xA;      }&amp;#xA;    },&amp;#xA;    mounted () {&amp;#xA;      console.log(flvjs.isSupported())&amp;#xA;      if (flvjs.isSupported()) {&amp;#xA;        let video = this.$refs.player&amp;#xA;        console.log(video)&amp;#xA;        if (video) {&amp;#xA;          this.player = flvjs.createPlayer({&amp;#xA;            type: &amp;#x27;flv&amp;#x27;,&amp;#xA;            isLive: true,&amp;#xA;            url: &amp;#x27;ws://localhost:8888/rtsp/?url=&amp;#x27; &amp;#x2B; this.rtsp&amp;#xA;          }, {&amp;#xA;            enableStashBuffer: true&amp;#xA;          })&amp;#xA;          console.log(this.player)&amp;#xA;          this.player.attachMediaElement(video)&amp;#xA;          try {&amp;#xA;            this.player.load()&amp;#xA;            this.player.play()&amp;#xA;          } catch (error) {&amp;#xA;            console.log(error)&amp;#xA;          }&amp;#xA;        }&amp;#xA;      }&amp;#xA;    },&amp;#xA;    methods: {&amp;#xA;      getCurrentFrame () {&amp;#xA;        let video = this.$refs.player&amp;#xA;        let scale = 1&amp;#xA;        let canvas = document.createElement(&amp;#x27;canvas&amp;#x27;)&amp;#xA;        canvas.width = video.videoWidth * scale&amp;#xA;        canvas.height = video.videoHeight * scale&amp;#xA;        canvas.getContext(&amp;#x27;2d&amp;#x27;).drawImage(video, 0, 0, canvas.width, canvas.height)&amp;#xA;        return canvas.toDataURL(&amp;#x27;image/png&amp;#x27;)&amp;#xA;      }&amp;#xA;    },&amp;#xA;    beforeDestroy () {&amp;#xA;      this.player &amp;amp;&amp;amp; this.player.destory &amp;amp;&amp;amp; this.player.destory()&amp;#xA;    }&amp;#xA;  }&amp;#xA;&lt;/script&gt;&#xA;&#xA;&#xA;

    &#xA;

    Then there will be a delay of about 3s when playing, and the delay will increase with the playing time

    &#xA;

    There will be a delay of 10 minutes in the later period

    &#xA;

    Is there any way to control this delay time

    &#xA;

    Or is there any other decoding scheme that can be used ?

    &#xA;

    Solutions that can support electron

    &#xA;

  • bash - forcing globstar asterisk expansion when passed to loop

    1er juillet 2020, par Kittywhiskers Van Gogh

    I am attempting to write a script that finds the extension of all files within a directory and normalise them using ffmpeg to conform to a singular file format, codec and resolution.

    &#xA;

    #!/usr/bin/env bash&#xA;&#xA;# We need to use globstar because we want to run this recursively (bash >4.0)&#xA;# This script won&#x27;t run on macOS unless you install bash from homebrew&#xA;shopt -s globstar nullglob&#xA;&#xA;# macOS doesn&#x27;t have some stuff that we need, presuming you have homebrew already&#xA;# then run "brew install ffmpeg rename"&#xA;if ! [ -x "$(command -v ffmpeg)" ] || ! [ -x "$(command -v rename)" ]; then&#xA;  echo &#x27;Required applications are absent, quitting :(&#x27; >&amp;2&#xA;  exit 1&#xA;fi&#xA;&#xA;# We need to know what file extensions we are dealing with&#xA;DISCOVERED_EXTENSIONS=$(find . -type f -name &#x27;*.*&#x27; | sed &#x27;s|.*\.||&#x27; | sort -u | tr &#x27;\n&#x27; &#x27; &#x27; | sed "s| | ./\**/*.|g" | rev | cut -c9- | rev | echo "./**/*.$(stdin)")&#xA;&#xA;# Let&#x27;s ignore newlines for now&#xA;IFS=$&#x27;\n&#x27;; set -f&#xA;&#xA;# Within the loop&#xA;for f in $(echo $DISCOVERED_EXTENSIONS | tr &#x27; &#x27; &#x27;\n&#x27;); do&#xA;# Do nothing if there are no files to begin with&#xA;#    if [ -z ${f&#x2B;x} ]; then&#xA;#        echo "no files found, exiting";&#xA;#    else&#xA;# First get rid of all period/full-stops except the extension to prevent confusion&#xA;#        rename "s/\.(?=[^.]*\.)/_/g" "$f";&#xA;# Now run conversion and save files with prefix processed_&#xA;#        ffmpeg -i "$f" -vf scale=-1:720 -crf 18 \&#xA;#        -c:v libx264 -preset veryslow -c:a libvo_aacenc -b:a 128k -c:s copy \&#xA;#        "processed_${f%.*}.mp4";&#xA;#    fi&#xA;  ls $f;&#xA;done&#xA;&#xA;# No longer ignore newlines&#xA;unset IFS; set &#x2B;f&#xA;&#xA;# Stop using recursiveness after we&#x27;re done&#xA;shopt -u globstar nullglob&#xA;

    &#xA;

    I have commented out all the actual conversion code in an attempt to debug it, running this script alone, I get :

    &#xA;

    ls: ./**/*.avi: No such file or directory&#xA;ls: ./**/*.jpg: No such file or directory&#xA;ls: ./**/*.mkv: No such file or directory&#xA;ls: ./**/*.mp4: No such file or directory&#xA;

    &#xA;

    It is passing ls "./**/*.avi" instead of ls ./**/*.avi (because of no variable expansion). I attempted to use eval, envsubst and even used a custom expand function, to no avail

    &#xA;

    The result of echo "$DISCOVERED_EXTENSIONS" is :

    &#xA;

    ./**/*.avi ./**/*.jpg ./**/*.mkv ./**/*.mp4&#xA;

    &#xA;

    ShellCheck objected to my lack of quotation marks but adding them in did not do anything. What changes can be recommended so that value of $f is the result of glob expansion and not the expression itself ?

    &#xA;