Recherche avancée

Médias (1)

Mot : - Tags -/illustrator

Autres articles (39)

  • Les formats acceptés

    28 janvier 2010, par

    Les commandes suivantes permettent d’avoir des informations sur les formats et codecs gérés par l’installation local de ffmpeg :
    ffmpeg -codecs ffmpeg -formats
    Les format videos acceptés en entrée
    Cette liste est non exhaustive, elle met en exergue les principaux formats utilisés : h264 : H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 m4v : raw MPEG-4 video format flv : Flash Video (FLV) / Sorenson Spark / Sorenson H.263 Theora wmv :
    Les formats vidéos de sortie possibles
    Dans un premier temps on (...)

  • 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 : (...)

  • MediaSPIP v0.2

    21 juin 2013, par

    MediaSPIP 0.2 is the first MediaSPIP stable release.
    Its official release date is June 21, 2013 and is announced here.
    The zip file provided here only contains the sources of MediaSPIP in its standalone version.
    To get a working installation, you must manually install all-software dependencies on the server.
    If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...)

Sur d’autres sites (7546)

  • What permission ffmpeg-static need in AWS Lambda ?

    17 février 2023, par János

    I have this code. It download a image, made a video from it and upload it to S3. It runs on Lambda. Added packages, intalled, zipped, uploaded.

    


    npm install --production
zip -r my-lambda-function.zip ./


    


    But get an error code 126

    


    2023-02-17T09:27:55.236Z    5c845bb6-02c1-41b0-8759-4459591b57b0    INFO    Error: ffmpeg exited with code 126&#xA;    at ChildProcess.<anonymous> (/var/task/node_modules/fluent-ffmpeg/lib/processor.js:182:22)&#xA;    at ChildProcess.emit (node:events:513:28)&#xA;    at ChildProcess._handle.onexit (node:internal/child_process:291:12)&#xA;2023-02-17T09:27:55.236Z 5c845bb6-02c1-41b0-8759-4459591b57b0 INFO Error: ffmpeg exited with code 126 at ChildProcess.<anonymous> (/var/task/node_modules/fluent-ffmpeg/lib/processor.js:182:22) at ChildProcess.emit (node:events:513:28) at ChildProcess._handle.onexit (node:internal/child_process:291:12)&#xA;</anonymous></anonymous>

    &#xA;

    Do I need to set a specific premission for ffmpeg ?

    &#xA;

    import { PutObjectCommand, S3Client } from &#x27;@aws-sdk/client-s3&#x27;&#xA;import { fromNodeProviderChain } from &#x27;@aws-sdk/credential-providers&#x27;&#xA;import axios from &#x27;axios&#x27;&#xA;import pathToFfmpeg from &#x27;ffmpeg-static&#x27;&#xA;import ffmpeg from &#x27;fluent-ffmpeg&#x27;&#xA;import fs from &#x27;fs&#x27;&#xA;ffmpeg.setFfmpegPath(pathToFfmpeg)&#xA;const credentials = fromNodeProviderChain({&#xA;    clientConfig: {&#xA;        region: &#x27;eu-central-1&#x27;,&#xA;    },&#xA;})&#xA;const client = new S3Client({ credentials })&#xA;&#xA;export const handler = async (event, context) => {&#xA;    try {&#xA;        let body&#xA;        let statusCode = 200&#xA;        const query = event?.queryStringParameters&#xA;        if (!query?.imgId &amp;&amp; !query?.video1Id &amp;&amp; !query?.video2Id) {&#xA;            return&#xA;        }&#xA;&#xA;        const imgId = query?.imgId&#xA;        const video1Id = query?.video1Id&#xA;        const video2Id = query?.video2Id&#xA;        console.log(&#xA;            `Parameters received, imgId: ${imgId}, video1Id: ${video1Id}, video2Id: ${video2Id}`&#xA;        )&#xA;        const imgURL = getFileURL(imgId)&#xA;        const video1URL = getFileURL(`${video1Id}.mp4`)&#xA;        const video2URL = getFileURL(`${video2Id}.mp4`)&#xA;        const imagePath = `/tmp/${imgId}`&#xA;        const video1Path = `/tmp/${video1Id}.mp4`&#xA;        const video2Path = `/tmp/${video2Id}.mp4`&#xA;        const outputPath = `/tmp/${imgId}.mp4`&#xA;        await Promise.all([&#xA;            downloadFile(imgURL, imagePath),&#xA;            downloadFile(video1URL, video1Path),&#xA;            downloadFile(video2URL, video2Path),&#xA;        ])&#xA;        await new Promise((resolve, reject) => {&#xA;            console.log(&#x27;Input files downloaded&#x27;)&#xA;            ffmpeg()&#xA;                .input(imagePath)&#xA;                .inputFormat(&#x27;image2&#x27;)&#xA;                .inputFPS(30)&#xA;                .loop(1)&#xA;                .size(&#x27;1080x1080&#x27;)&#xA;                .videoCodec(&#x27;libx264&#x27;)&#xA;                .format(&#x27;mp4&#x27;)&#xA;                .outputOptions([&#xA;                    &#x27;-tune animation&#x27;,&#xA;                    &#x27;-pix_fmt yuv420p&#x27;,&#xA;                    &#x27;-profile:v baseline&#x27;,&#xA;                    &#x27;-level 3.0&#x27;,&#xA;                    &#x27;-preset medium&#x27;,&#xA;                    &#x27;-crf 23&#x27;,&#xA;                    &#x27;-movflags &#x2B;faststart&#x27;,&#xA;                    &#x27;-y&#x27;,&#xA;                ])&#xA;                .output(outputPath)&#xA;                .on(&#x27;end&#x27;, () => {&#xA;                    console.log(&#x27;Output file generated&#x27;)&#xA;                    resolve()&#xA;                })&#xA;                .on(&#x27;error&#x27;, (e) => {&#xA;                    console.log(e)&#xA;                    reject()&#xA;                })&#xA;                .run()&#xA;            &#xA;        })&#xA;        await uploadFile(outputPath, imgId &#x2B; &#x27;.mp4&#x27;)&#xA;            .then((url) => {&#xA;                body = JSON.stringify({&#xA;                    url,&#xA;                })&#xA;            })&#xA;            .catch((error) => {&#xA;                console.error(error)&#xA;                statusCode = 400&#xA;                body = error?.message ?? error&#xA;            })&#xA;        console.log(`File uploaded to S3`)&#xA;        const headers = {&#xA;            &#x27;Content-Type&#x27;: &#x27;application/json&#x27;,&#xA;            &#x27;Access-Control-Allow-Headers&#x27;: &#x27;Content-Type&#x27;,&#xA;            &#x27;Access-Control-Allow-Origin&#x27;: &#x27;https://tikex.com, https://borespiac.hu&#x27;,&#xA;            &#x27;Access-Control-Allow-Methods&#x27;: &#x27;GET&#x27;,&#xA;        }&#xA;        return {&#xA;            statusCode,&#xA;            body,&#xA;            headers,&#xA;        }&#xA;    } catch (error) {&#xA;        console.error(error)&#xA;        return {&#xA;            statusCode: 500,&#xA;            body: JSON.stringify(&#x27;Error fetching data&#x27;),&#xA;        }&#xA;    }&#xA;}&#xA;&#xA;const downloadFile = async (url, path) => {&#xA;    try {&#xA;        console.log(`Download will start: ${url}`)&#xA;        const response = await axios(url, {&#xA;            responseType: &#x27;stream&#x27;,&#xA;        })&#xA;        if (response.status !== 200) {&#xA;            throw new Error(&#xA;                `Failed to download file, status code: ${response.status}`&#xA;            )&#xA;        }&#xA;        response.data&#xA;            .pipe(fs.createWriteStream(path))&#xA;            .on(&#x27;finish&#x27;, () => console.log(`File downloaded to ${path}`))&#xA;            .on(&#x27;error&#x27;, (e) => {&#xA;                throw new Error(`Failed to save file: ${e}`)&#xA;            })&#xA;    } catch (e) {&#xA;        console.error(`Error downloading file: ${e}`)&#xA;    }&#xA;}&#xA;const uploadFile = async (path, id) => {&#xA;    const buffer = fs.readFileSync(path)&#xA;    const params = {&#xA;        Bucket: &#x27;t44-post-cover&#x27;,&#xA;        ACL: &#x27;public-read&#x27;,&#xA;        Key: id,&#xA;        ContentType: &#x27;video/mp4&#x27;,&#xA;        Body: buffer,&#xA;    }&#xA;    await client.send(new PutObjectCommand(params))&#xA;    return getFileURL(id)&#xA;}&#xA;const getFileURL = (id) => {&#xA;    const bucket = &#x27;t44-post-cover&#x27;&#xA;    const url = `https://${bucket}.s3.eu-central-1.amazonaws.com/${id}`&#xA;    return url&#xA;}&#xA;

    &#xA;

    Added AWSLambdaBasicExecutionRole-16e770c8-05fa-4c42-9819-12c468cb5b49 permission, with policy :

    &#xA;

    {&#xA;    "Version": "2012-10-17",&#xA;    "Statement": [&#xA;        {&#xA;            "Effect": "Allow",&#xA;            "Action": "logs:CreateLogGroup",&#xA;            "Resource": "arn:aws:logs:eu-central-1:634617701827:*"&#xA;        },&#xA;        {&#xA;            "Effect": "Allow",&#xA;            "Action": [&#xA;                "logs:CreateLogStream",&#xA;                "logs:PutLogEvents"&#xA;            ],&#xA;            "Resource": [&#xA;                "arn:aws:logs:eu-central-1:634617701827:log-group:/aws/lambda/promo-video-composer-2:*"&#xA;            ]&#xA;        },&#xA;        {&#xA;            "Effect": "Allow",&#xA;            "Action": [&#xA;                "s3:GetObject",&#xA;                "s3:PutObject",&#xA;                "s3:ListBucket"&#xA;            ],&#xA;            "Resource": [&#xA;                "arn:aws:s3:::example-bucket",&#xA;                "arn:aws:s3:::example-bucket/*"&#xA;            ]&#xA;        },&#xA;        {&#xA;            "Effect": "Allow",&#xA;            "Action": [&#xA;                "logs:CreateLogGroup",&#xA;                "logs:CreateLogStream",&#xA;                "logs:PutLogEvents"&#xA;            ],&#xA;            "Resource": [&#xA;                "arn:aws:logs:*:*:*"&#xA;            ]&#xA;        },&#xA;        {&#xA;            "Effect": "Allow",&#xA;            "Action": [&#xA;                "ec2:DescribeNetworkInterfaces"&#xA;            ],&#xA;            "Resource": [&#xA;                "*"&#xA;            ]&#xA;        },&#xA;        {&#xA;            "Effect": "Allow",&#xA;            "Action": [&#xA;                "sns:*"&#xA;            ],&#xA;            "Resource": [&#xA;                "*"&#xA;            ]&#xA;        },&#xA;        {&#xA;            "Effect": "Allow",&#xA;            "Action": [&#xA;                "cloudwatch:*"&#xA;            ],&#xA;            "Resource": [&#xA;                "*"&#xA;            ]&#xA;        },&#xA;        {&#xA;            "Effect": "Allow",&#xA;            "Action": [&#xA;                "kms:Decrypt"&#xA;            ],&#xA;            "Resource": [&#xA;                "*"&#xA;            ]&#xA;        }&#xA;    ]&#xA;}&#xA;

    &#xA;

    What do I miss ?

    &#xA;

    janoskukoda@Janoss-MacBook-Pro promo-video-composer-2 % ls -l $(which ffmpeg)&#xA;lrwxr-xr-x  1 janoskukoda  admin  35 Feb 10 12:50 /opt/homebrew/bin/ffmpeg -> ../Cellar/ffmpeg/5.1.2_4/bin/ffmpeg&#xA;

    &#xA;

  • avcodec : export motion vectors in frame side data on demand

    16 juillet 2014, par Clément Bœsch
    avcodec : export motion vectors in frame side data on demand
    

    The reasoning behind this addition is that various third party
    applications are interested in getting some motion information out of a
    video "for free" when it is available.

    It was considered to export other information as well (such as the intra
    information about the block, or the quantization) but the structure
    might have ended up into a half full-generic, half full of codec
    specific cruft. If more information is necessary, it should either be
    added in the "flags" field of the AVMotionVector structure, or in
    another side-data.

    This commit also includes an example exporting them in a CSV stream.

    • [DH] .gitignore
    • [DH] configure
    • [DH] doc/APIchanges
    • [DH] doc/Makefile
    • [DH] doc/codecs.texi
    • [DH] doc/examples/Makefile
    • [DH] doc/examples/extract_mvs.c
    • [DH] libavcodec/avcodec.h
    • [DH] libavcodec/mpegvideo.c
    • [DH] libavcodec/options_table.h
    • [DH] libavutil/Makefile
    • [DH] libavutil/frame.c
    • [DH] libavutil/frame.h
    • [DH] libavutil/motion_vector.h
    • [DH] libavutil/version.h
  • Merge commit ’a6a750c7ef240b72ce01e9653343a0ddf247d196’

    22 juin 2016, par Clément Bœsch
    Merge commit ’a6a750c7ef240b72ce01e9653343a0ddf247d196’
    

    * commit ’a6a750c7ef240b72ce01e9653343a0ddf247d196’ :
    tests : Move all test programs to a subdirectory

    Merged-by : Clément Bœsch <clement@stupeflix.com>

    • [DH] .gitignore
    • [DH] common.mak
    • [DH] libavcodec/Makefile
    • [DH] libavcodec/tests/.gitignore
    • [DH] libavcodec/tests/arm/dct.c
    • [DH] libavcodec/tests/avfft.c
    • [DH] libavcodec/tests/cabac.c
    • [DH] libavcodec/tests/dct.c
    • [DH] libavcodec/tests/fft-fixed.c
    • [DH] libavcodec/tests/fft-fixed32.c
    • [DH] libavcodec/tests/fft.c
    • [DH] libavcodec/tests/golomb.c
    • [DH] libavcodec/tests/iirfilter.c
    • [DH] libavcodec/tests/imgconvert.c
    • [DH] libavcodec/tests/jpeg2000dwt.c
    • [DH] libavcodec/tests/mathops.c
    • [DH] libavcodec/tests/motion.c
    • [DH] libavcodec/tests/options.c
    • [DH] libavcodec/tests/ppc/dct.c
    • [DH] libavcodec/tests/rangecoder.c
    • [DH] libavcodec/tests/snowenc.c
    • [DH] libavcodec/tests/utils.c
    • [DH] libavcodec/tests/x86/dct.c
    • [DH] libavdevice/tests/.gitignore
    • [DH] libavdevice/tests/timefilter.c
    • [DH] libavfilter/tests/.gitignore
    • [DH] libavfilter/tests/drawutils.c
    • [DH] libavfilter/tests/filtfmts.c
    • [DH] libavfilter/tests/formats.c
    • [DH] libavformat/matroskaenc.c
    • [DH] libavformat/tests/.gitignore
    • [DH] libavformat/tests/movenc.c
    • [DH] libavformat/tests/noproxy.c
    • [DH] libavformat/tests/rtmpdh.c
    • [DH] libavformat/tests/seek.c
    • [DH] libavformat/tests/srtp.c
    • [DH] libavformat/tests/url.c
    • [DH] libavresample/tests/.gitignore
    • [DH] libavresample/tests/avresample.c
    • [DH] libavutil/Makefile
    • [DH] libavutil/des.c
    • [DH] libavutil/tests/.gitignore
    • [DH] libavutil/tests/adler32.c
    • [DH] libavutil/tests/aes.c
    • [DH] libavutil/tests/atomic.c
    • [DH] libavutil/tests/avstring.c
    • [DH] libavutil/tests/base64.c
    • [DH] libavutil/tests/blowfish.c
    • [DH] libavutil/tests/bprint.c
    • [DH] libavutil/tests/camellia.c
    • [DH] libavutil/tests/cast5.c
    • [DH] libavutil/tests/color_utils.c
    • [DH] libavutil/tests/cpu.c
    • [DH] libavutil/tests/crc.c
    • [DH] libavutil/tests/des.c
    • [DH] libavutil/tests/dict.c
    • [DH] libavutil/tests/display.c
    • [DH] libavutil/tests/error.c
    • [DH] libavutil/tests/eval.c
    • [DH] libavutil/tests/fifo.c
    • [DH] libavutil/tests/file.c
    • [DH] libavutil/tests/float_dsp.c
    • [DH] libavutil/tests/hash.c
    • [DH] libavutil/tests/hmac.c
    • [DH] libavutil/tests/lfg.c
    • [DH] libavutil/tests/lls.c
    • [DH] libavutil/tests/log.c
    • [DH] libavutil/tests/lzo.c
    • [DH] libavutil/tests/md5.c
    • [DH] libavutil/tests/murmur3.c
    • [DH] libavutil/tests/opt.c
    • [DH] libavutil/tests/parseutils.c
    • [DH] libavutil/tests/pca.c
    • [DH] libavutil/tests/pixdesc.c
    • [DH] libavutil/tests/pixelutils.c
    • [DH] libavutil/tests/random_seed.c
    • [DH] libavutil/tests/rational.c
    • [DH] libavutil/tests/ripemd.c
    • [DH] libavutil/tests/sha.c
    • [DH] libavutil/tests/sha512.c
    • [DH] libavutil/tests/softfloat.c
    • [DH] libavutil/tests/tea.c
    • [DH] libavutil/tests/tree.c
    • [DH] libavutil/tests/twofish.c
    • [DH] libavutil/tests/utf8.c
    • [DH] libavutil/tests/xtea.c
    • [DH] library.mak
    • [DH] libswresample/tests/.gitignore
    • [DH] libswresample/tests/swresample.c
    • [DH] libswscale/tests/.gitignore
    • [DH] libswscale/tests/colorspace.c
    • [DH] libswscale/tests/swscale.c
    • [DH] tests/fate-run.sh
    • [DH] tests/fate/fft.mak
    • [DH] tests/fate/filter-audio.mak
    • [DH] tests/fate/filter-video.mak
    • [DH] tests/fate/libavcodec.mak
    • [DH] tests/fate/libavdevice.mak
    • [DH] tests/fate/libavformat.mak
    • [DH] tests/fate/libavutil.mak
    • [DH] tests/fate/seek.mak