Recherche avancée

Médias (5)

Mot : - Tags -/open film making

Autres articles (35)

  • Librairies et binaires spécifiques au traitement vidéo et sonore

    31 janvier 2010, par

    Les logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
    Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
    Binaires complémentaires et facultatifs flvtool2 : (...)

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

  • De l’upload à la vidéo finale [version standalone]

    31 janvier 2010, par

    Le chemin d’un document audio ou vidéo dans SPIPMotion est divisé en trois étapes distinctes.
    Upload et récupération d’informations de la vidéo source
    Dans un premier temps, il est nécessaire de créer un article SPIP et de lui joindre le document vidéo "source".
    Au moment où ce document est joint à l’article, deux actions supplémentaires au comportement normal sont exécutées : La récupération des informations techniques des flux audio et video du fichier ; La génération d’une vignette : extraction d’une (...)

Sur d’autres sites (6449)

  • Precise method of segmenting & transcoding video+audio (via ffmpeg), into an on-demand HLS stream ?

    17 novembre 2019, par Felix

    recently I’ve been messing around with FFMPEG and streams through Nodejs. My ultimate goal is to serve a transcoded video stream - from any input filetype - via HTTP, generated in real-time as it’s needed in segments.

    I’m currently attempting to handle this using HLS. I pre-generate a dummy m3u8 manifest using the known duration of the input video. It contains a bunch of URLs that point to individual constant-duration segments. Then, once the client player starts requesting the individual URLs, I use the requested path to determine which time range of video the client needs. Then I transcode the video and stream that segment back to them.

    Now for the problem : This approach mostly works, but has a small audio bug. Currently, with most test input files, my code produces a video that - while playable - seems to have a very small (< .25 second) audio skip at the start of each segment.

    I think this may be an issue with splitting using time in ffmpeg, where possibly the audio stream cannot be accurately sliced at the exact frame the video is. So far, I’ve been unable to figure out a solution to this problem.

    If anybody has any direction they can steer me - or even a prexisting library/server that solves this use-case - I appreciate the guidance. My knowledge of video encoding is fairly limited.

    I’ll include an example of my relevant current code below, so others can see where I’m stuck. You should be able to run this as a Nodejs Express server, then point any HLS player at localhost:8080/master to load the manifest and begin playback. See the transcode.get('/segment/:seg.ts' line at the end, for the relevant transcoding bit.

    'use strict';
    const express = require('express');
    const ffmpeg = require('fluent-ffmpeg');
    let PORT = 8080;
    let HOST = 'localhost';
    const transcode = express();


    /*
    * This file demonstrates an Express-based server, which transcodes &amp; streams a video file.
    * All transcoding is handled in memory, in chunks, as needed by the player.
    *
    * It works by generating a fake manifest file for an HLS stream, at the endpoint "/m3u8".
    * This manifest contains links to each "segment" video clip, which browser-side HLS players will load as-needed.
    *
    * The "/segment/:seg.ts" endpoint is the request destination for each clip,
    * and uses FFMpeg to generate each segment on-the-fly, based off which segment is requested.
    */


    const pathToMovie = 'C:\\input-file.mp4';  // The input file to stream as HLS.
    const segmentDur = 5; //  Controls the duration (in seconds) that the file will be chopped into.


    const getMetadata = async(file) => {
       return new Promise( resolve => {
           ffmpeg.ffprobe(file, function(err, metadata) {
               console.log(metadata);
               resolve(metadata);
           });
       });
    };



    // Generate a "master" m3u8 file, which the player should point to:
    transcode.get('/master', async(req, res) => {
       res.set({"Content-Disposition":"attachment; filename=\"m3u8.m3u8\""});
       res.send(`#EXTM3U
    #EXT-X-STREAM-INF:BANDWIDTH=150000
    /m3u8?num=1
    #EXT-X-STREAM-INF:BANDWIDTH=240000
    /m3u8?num=2`)
    });

    // Generate an m3u8 file to emulate a premade video manifest. Guesses segments based off duration.
    transcode.get('/m3u8', async(req, res) => {
       let met = await getMetadata(pathToMovie);
       let duration = met.format.duration;

       let out = '#EXTM3U\n' +
           '#EXT-X-VERSION:3\n' +
           `#EXT-X-TARGETDURATION:${segmentDur}\n` +
           '#EXT-X-MEDIA-SEQUENCE:0\n' +
           '#EXT-X-PLAYLIST-TYPE:VOD\n';

       let splits = Math.max(duration / segmentDur);
       for(let i=0; i&lt; splits; i++){
           out += `#EXTINF:${segmentDur},\n/segment/${i}.ts\n`;
       }
       out+='#EXT-X-ENDLIST\n';

       res.set({"Content-Disposition":"attachment; filename=\"m3u8.m3u8\""});
       res.send(out);
    });

    // Transcode the input video file into segments, using the given segment number as time offset:
    transcode.get('/segment/:seg.ts', async(req, res) => {
       const segment = req.params.seg;
       const time = segment * segmentDur;

       let proc = new ffmpeg({source: pathToMovie})
           .seekInput(time)
           .duration(segmentDur)
           .outputOptions('-preset faster')
           .outputOptions('-g 50')
           .outputOptions('-profile:v main')
           .withAudioCodec('aac')
           .outputOptions('-ar 48000')
           .withAudioBitrate('155k')
           .withVideoBitrate('1000k')
           .outputOptions('-c:v h264')
           .outputOptions(`-output_ts_offset ${time}`)
           .format('mpegts')
           .on('error', function(err, st, ste) {
               console.log('an error happened:', err, st, ste);
           }).on('progress', function(progress) {
               console.log(progress);
           })
           .pipe(res, {end: true});
    });

    transcode.listen(PORT, HOST);
    console.log(`Running on http://${HOST}:${PORT}`);
  • Vagrant provision fails to execute the next script without an obvious reason why

    14 juin 2016, par JakeTheSnake

    I’ve created/co-opted several bash scripts to provision my guest Ubuntu 14.04 OS ; the one giving me trouble right now is installing ffmpeg. When the script finishes, vagrant simply does nothing save for sending SSH keep-alives.

    Host OS : Windows 7 x64

    The last output before the infinitely repeating keep-alives is :

    INSTALL libavutil/sha.h
    INSTALL libavutil/sha512.h
    INSTALL libavutil/stereo3d.h
    INSTALL libavutil/threadmessage.h
    INSTALL libavutil/time.h
    INSTALL libavutil/timecode.h
    INSTALL libavutil/timestamp.h
    INSTALL libavutil/tree.h
    INSTALL libavutil/twofish.h
    INSTALL libavutil/version.h
    INSTALL libavutil/xtea.h
    INSTALL libavutil/tea.h
    INSTALL libavutil/lzo.h
    INSTALL libavutil/avconfig.h
    INSTALL libavutil/ffversion.h

    DEBUG ssh: stdout: INSTALL      libavutil/libavutil.pc

    DEBUG ssh: stdout: Done

    DEBUG ssh: Sending SSH keep-alive...
    DEBUG ssh: Sending SSH keep-alive...
    DEBUG ssh: Sending SSH keep-alive...

    Here are the relevant scripts :

    Vagrantfile

    # -*- mode: ruby -*-
    # vi: set ft=ruby :

    # All Vagrant configuration is done below. The "2" in Vagrant.configure
    # configures the configuration version (we support older styles for
    # backwards compatibility). Please don't change it unless you know what
    # you're doing.
    Vagrant.configure(2) do |config|
     # The most common configuration options are documented and commented below.
     # For a complete reference, please see the online documentation at
     # https://docs.vagrantup.com.

     # Every Vagrant development environment requires a box. You can search for
     # boxes at https://atlas.hashicorp.com/search.
     config.vm.box = 'ubuntu/trusty64'
     config.vm.hostname = 'dev'

     config.ssh.forward_agent = true
     config.ssh.pty = true

     # Create a private network, which allows host-only access to the machine
     # using a specific IP.
     config.vm.network :private_network, type: :dhcp, auto_config: false

     # Create a public network, which generally matched to bridged network.
     # Bridged networks make the machine appear as another physical device on
     # your network.
     config.vm.network :public_network,
                       ip: '192.168.11.14',
                       bridge: 'Realtek PCIe GBE Family Controller'

     # Share an additional folder to the guest VM. The first argument is
     # the path on the host to the actual folder. The second argument is
     # the path on the guest to mount the folder. And the optional third
     # argument is a set of non-required options.
     #
     # Do not share root directory of vagrant
     # config.vm.synced_folder '.', '/vagrant', disabled: true
     # Share ruby repository directories
     config.vm.synced_folder '.',
                             '/home/vagrant/apps',
                             nfs: true,
                             mount_options: [
                               'nfsvers=3',
                               'vers=3',
                               'actimeo=1',
                               'rsize=8192',
                               'wsize=8192',
                               'timeo=14',
                               :nolock,
                               :udp,
                               :intr,
                               :user,
                               :auto,
                               :exec,
                               :rw
                             ]

     # Provider-specific configuration so you can fine-tune various
     # backing providers for Vagrant. These expose provider-specific options.
     # Example for VirtualBox:
     #
     config.vm.provider :virtualbox do |vb|
       # Display the VirtualBox GUI when booting the machine
       vb.gui = true

       # Use VBoxManage to customize the VM.
       vb.name = 'Ubuntu'
       vb.cpus = 4
       vb.memory = 2048
       vb.customize ['modifyvm', :id, '--vram', 64]
       vb.customize ['modifyvm', :id, '--audio', :dsound]
       vb.customize ['modifyvm', :id, '--audiocontroller', :ac97]
       vb.customize ['modifyvm', :id, '--clipboard', :bidirectional]
     end

     # Provisioning
     config.vm.provision :shell, path: './provisioning/user/install-apps.sh',
                                 privileged: false, name: 'Applications'
     config.vm.provision :shell, path: './provisioning/user/install-rvm.sh',
                                 args: 'stable', privileged: false, name: 'RVM'
     config.vm.provision :shell, path: './provisioning/user/install-ruby.sh',
                                 args: '2.3.1', privileged: false, name: 'Ruby'
     config.vm.provision :shell, path: './provisioning/user/install-ruby-gems.sh',
                                 privileged: false, name: 'Ruby Gems'
     config.vm.provision :shell, path: './provisioning/root/install-nginx.sh',
                                 args: '1.9.9', name: 'Nginx'

     config.vm.provision :chef_solo do |chef|
       # chef.version = '12.10.40'

       # Paths to your cookbooks (on the host)
       chef.cookbooks_path = ['cookbooks']
       # Add chef recipes
       chef.add_recipe 'apt'
       chef.add_recipe 'git' # Is required for NPM
       chef.add_recipe 'sqlite'
       chef.add_recipe 'mysql'
       chef.add_recipe 'nodejs'
       chef.add_recipe 'memcached'
       chef.add_recipe 'imagemagick'
       chef.add_recipe 'optipng'
       chef.add_recipe 'sublime-text'
       chef.add_recipe 'tomcat'
     end
    end

    install-apps.sh

    #!/usr/bin/env bash

    echo Turning off console beeps...
    grep '^set bell-style none' /etc/inputrc || echo 'set bell-style none' >> /etc/inputrc

    echo Installing languages
    sudo apt-get -y update
    sudo locale-gen en_US en_US.UTF-8
    sudo dpkg-reconfigure locales

    echo Installing essential apps
    sudo apt-get -y install build-essential curl yasm

    echo Installing desktop apps
    sudo apt-get -y install ubuntu-desktop

    hash ffmpeg 2>/dev/null || {
     # Build ffmpeg
     echo Installing ffmpeg

     sudo apt-get -y install autoconf automake libass-dev libfreetype6-dev \
       libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
       libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev libx264-dev libmp3lame-dev libopus-dev

     mkdir ~/ffmpeg_sources
     cd ~/ffmpeg_sources
     wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
     tar xjvf ffmpeg-snapshot.tar.bz2
     cd ffmpeg
     PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
       --prefix="$HOME/ffmpeg_build" \
       --pkg-config-flags="--static" \
       --extra-cflags="-I$HOME/ffmpeg_build/include" \
       --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
       --bindir="$HOME/bin" \
       --enable-gpl \
       --enable-libass \
       --enable-libfreetype \
       --enable-libmp3lame \
       --enable-libopus \
       --enable-libtheora \
       --enable-libvorbis \
       --enable-libx264 \
       --enable-nonfree

     PATH="$HOME/bin:$PATH" make
     make install
     make distclean
     hash -r

     source ~/.profile
    }

    echo Done
    exit 0

    install-rvm.sh

    #!/usr/bin/env bash

    echo Installing RVM gpg key
    gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 --trust-model always

    echo Installing RVM
    \curl -sSL https://get.rvm.io | bash -s $1

    exit 0

    I won’t include the other scripts for the sake of brevity. When logging into vagrant with the gui nothing seems out of the ordinary, and ffmpeg is available...but nothing else is provisioned. No RVM, no Nginx, nothing.

  • avfilter/avf_showcqt : cqt_calc optimization on x86

    4 juin 2016, par Muhammad Faiz
    avfilter/avf_showcqt : cqt_calc optimization on x86
    

    on x86_64 :
    time PSNR
    plain 3.303 inf
    SSE 1.649 107.087535
    SSE3 1.632 107.087535
    AVX 1.409 106.986771
    FMA3 1.265 107.108437

    on x86_32 (PSNR compared to x86_64 plain) :
    time PSNR
    plain 7.225 103.951979
    SSE 1.827 105.859282
    SSE3 1.819 105.859282
    AVX 1.533 105.997661
    FMA3 1.384 105.885377

    FMA4 test is not available

    Reviewed-by : James Almer <jamrial@gmail.com>
    Signed-off-by : Muhammad Faiz <mfcc64@gmail.com>

    • [DH] libavfilter/avf_showcqt.c
    • [DH] libavfilter/avf_showcqt.h
    • [DH] libavfilter/x86/Makefile
    • [DH] libavfilter/x86/avf_showcqt.asm
    • [DH] libavfilter/x86/avf_showcqt_init.c