Recherche avancée

Médias (0)

Mot : - Tags -/protocoles

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (91)

  • Automated installation script of MediaSPIP

    25 avril 2011, par

    To overcome the difficulties mainly due to the installation of server side software dependencies, an "all-in-one" installation script written in bash was created to facilitate this step on a server with a compatible Linux distribution.
    You must have access to your server via SSH and a root account to use it, which will install the dependencies. Contact your provider if you do not have that.
    The documentation of the use of this installation script is available here.
    The code of this (...)

  • Participer à sa documentation

    10 avril 2011

    La documentation est un des travaux les plus importants et les plus contraignants lors de la réalisation d’un outil technique.
    Tout apport extérieur à ce sujet est primordial : la critique de l’existant ; la participation à la rédaction d’articles orientés : utilisateur (administrateur de MediaSPIP ou simplement producteur de contenu) ; développeur ; la création de screencasts d’explication ; la traduction de la documentation dans une nouvelle langue ;
    Pour ce faire, vous pouvez vous inscrire sur (...)

  • Gestion de la ferme

    2 mars 2010, par

    La ferme est gérée dans son ensemble par des "super admins".
    Certains réglages peuvent être fais afin de réguler les besoins des différents canaux.
    Dans un premier temps il utilise le plugin "Gestion de mutualisation"

Sur d’autres sites (6921)

  • FFMPEG Combine multiple commands into one script

    16 février 2017, par ObeeWnn

    I need some help combining ffmpeg commands into a python or bash script :

    \Download
    Youtube-dl URL

    \Concatenate videos

    WD = "C:\"
    import glob
    files = glob.glob ('*.mp4')
    with open ('output.txt', 'w') as in_files:
       for eachfile in files: in_files.write('file \''+eachfile+'\'\n')

    ffmpeg -y -f concat -i output.txt -c copy input.mp4

    \Encode
    ffmpeg -y -threads 16 -i input.mp4 -c:a libfdk_aac -vbr 4 -c:v libx264 intermediate1.ts
    ffmpeg -y -threads 16 -i endscreen720.mp4 -c:a libfdk_aac -vbr 4 -c:v libx264 intermediate2.ts
    ffmpeg -y -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc tmp.mp4
    ffmpeg -y -i tmp.mp4 -itsoffset 00:00:20 -i lt1sub.avi -filter_complex overlay tmp1.mp4
    ffmpeg -y -i tmp1.mp4 -i intro.avi -filter_complex overlay tmp1a.mp4
    ffmpeg -y -i tmp1a.mp4 -i watermarkfile720.png -filter_complex "[0:v]drawtext=enable='between(n,30,116)' : 'fontfile=/Windows/Fonts/arial.ttf':text='TEXTGOESHERE':fontcolor=white:fontsize=50:x=150:y=(300)+th[text]; [text][1:v]overlay[filtered]" -map "[filtered]" -map 0:a -codec:v libx264 -codec:a copy tmp2.mp4
    ffmpeg -y -i tmp2.mp4 -r 60 -vf scale=1920:1080 output.mp4


    \Create Thumbnail
    ffmpeg -y -i tmp1.mp4 -vf drawtext="fontfile=/Windows/Fonts/arial.ttf': text='':fontcolor=white@1.0:fontsize=120:y=0:x=100" -ss 00:00:12 -vframes 1 out.png

    set /p input= Video #

    ffmpeg -y -i out.png  -i tnOverlay.png -filter_complex overlay,drawtext="fontfile=/Windows/Fonts/arial.ttf': text="%input%":fontcolor=white@1.0:fontsize=120:y=25:x=1190" out.png

    This is to download videos, place an intro video in the beginning, draw text over intro, concatenate the videos, apply watermark throughout video, apply outro, create thumbnail, etc.
    My FFmpeg compile :

    ffmpeg version N-83522-g6a37abc59a Copyright (c) 2000-2017 the FFmpeg developers
     built with gcc 6.3.0 (Rev1, Built by MSYS2 project)
     configuration:  --enable-avisynth --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-cuda --enable-cuvid --enable-schannel --enable-sdl2 --enable-decklink --enable-fontconfig --enable-frei0r --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libmfx --enable-libmodplug --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libwavpack --enable-libwebp --enable-libxavs --enable-libxvid --enable-libzimg --enable-openssl --enable-libsnappy --enable-gpl --enable-opencl --enable-opengl --enable-libcdio --enable-libfdk-aac --enable-libkvazaar --enable-librubberband --enable-libssh --enable-libtesseract --enable-libzvbi --enable-chromaprint --enable-libopenh264 --enable-libopenmpt --enable-netcdf --disable-w32threads --enable-version3 --enable-nonfree --enable-filter=frei0r --disable-debug
     libavutil      55. 47.100 / 55. 47.100
     libavcodec     57. 80.100 / 57. 80.100
     libavformat    57. 66.102 / 57. 66.102
     libavdevice    57.  2.100 / 57.  2.100
     libavfilter     6. 73.100 /  6. 73.100
     libswscale      4.  3.101 /  4.  3.101
     libswresample   2.  4.100 /  2.  4.100
     libpostproc    54.  2.100 / 54.  2.100

    Would like to use libfdk-aac and x264, or highest quality possible. The video source will be at 720p60fps and will be rendered to 1080p60fps.

  • FFMPEG Windows Batch - Recursive Convert based and settings based on Frame Height

    3 avril 2017, par Vahid Jamali

    So I’m trying to make a batch file to use FFMPEG to convert around 1000 MP4 video files.

    I want to recursively go through these folders, possibly use ffprobe to discover the frame height, and then based on the frame height options (360, 480, 720, or 1080 frame height) give them individually different ffmpeg commands.

    I’ve been reading up on various approaches to this just as far as batch processing goes.

    So far I’m at this stage :

    for %%a in ("*.*") do C:\ffinstall\local64\bin-video\ffmpeg -i "%%a"  -c:v libx264 -crf 18 -preset veryslow -tune film -refs 8 -bf 6 -aq-mode 2 -filter_complex "[0:v][1:v]overlay=30:main_h-overlay_h-30,subtitles='D:\add.ass'" -c:a copy "encoded\%%~na.mp4"

    pause

    Code to discover the frame height :

    ffprobe -v error -show_entries stream=height -of default=noprint_wrappers=1 inputfile.mp4

    Trying to figure out conditionals and how their syntax is. Also I’m getting a Unable to parse option value "add.ass" as image size error. Which I believe is due to not being to see the subtitle file.

    Any suggestions on where I can start ? Thanks for any help.

  • ffmpeg API muxing h264 endoced frames to mkv

    24 mars 2017, par Pawel K

    Hi I’m having some problems with muxing h264 encoded frames into mkv container using code of ffmpeg-3.2.4.
    I have ended up with the following code that is a mashup of code found on SO and muxing.c example of ffmpeg :
    (and yes I am aware that it is ugly, no errors checked etc. it is meant to be like that for clarity :) )

    char *filename = "out.mkv";
    const uint8_t SPS[] = { 0x67, 0x42, 0x40, 0x1F, 0x96, 0x54, 0x02, 0x80, 0x2D, 0xD0, 0x0F, 0x39, 0xEA };
    const uint8_t PPS[] = { 0x68, 0xCE, 0x38, 0x80 };
    int fps = 5;

    typedef struct OutputStream
    {
      AVStream *st;
      AVCodecContext *enc;

      /* pts of the next frame that will be generated */
      int64_t next_pts;
      int samples_count;
      AVFrame *frame;
      AVFrame *tmp_frame;
      float t, tincr, tincr2;
      struct SwsContext *sws_ctx;
      struct SwrContext *swr_ctx;
    } OutputStream;

    static void avlog_cb(void *s, int level, const char *szFmt, va_list varg)
    {
      vprintf(szFmt, varg);
    }

    void main()
    {
      AVOutputFormat *fmt;
      AVFormatContext *formatCtx;
      AVCodec *audio_codec;
      AVCodec *video_codec;
      OutputStream video_st = { 0 };
      OutputStream audio_st = { 0 };
      av_register_all();

      av_log_set_level(AV_LOG_TRACE);
      //av_log_set_callback(avlog_cb);

      //allocate output and format ctxs
      avformat_alloc_output_context2(&formatCtx, NULL, NULL, filename);
      fmt = formatCtx->oformat;

      //allocate streams
      video_codec = avcodec_find_encoder(fmt->video_codec);
      video_st.st = avformat_new_stream(formatCtx, NULL);
      video_st.st->id = 0;

      AVCodecContext *codecCtx =  avcodec_alloc_context3(video_codec);
      fmt->video_codec = AV_CODEC_ID_H264;
      video_st.enc = codecCtx;

      codecCtx->codec_id = fmt->video_codec;
      codecCtx->bit_rate = 400000;
      codecCtx->width  = 1080;
      codecCtx->height = 720;
      codecCtx->profile = FF_PROFILE_H264_CONSTRAINED_BASELINE;
      codecCtx->level = 31;

      video_st.st->time_base = (AVRational){ 1, fps };
      codecCtx->time_base = video_st.st->time_base;
      codecCtx->gop_size = 4;
      codecCtx->pix_fmt = AV_PIX_FMT_YUV420P;

      //open video codec
      codecCtx->extradata_size = 24;
      codecCtx->extradata = (uint8_t *)av_malloc(codecCtx->extradata_size);
      uint8_t extra_data_array[] = { 0x01, SPS[1], SPS[2], SPS[3], 0xFF, 0xE1, 0xc0, 0, 0x42, 0x40, 0x1F, 0x96, 0x54, 0x02, 0x80, 0x2D, 0xD0, 0x0F, 0x39, 0xEA, 0x03, 0xCE, 0x38, 0x80 };
      memcpy(codecCtx->extradata, extra_data_array, codecCtx->extradata_size);

      AVCodecContext *c = video_st.enc;
      AVDictionary *opt = NULL;
      avcodec_open2(c, video_codec, &opt);
      avcodec_parameters_from_context(video_st.st->codecpar, c);

      //open output file
      avio_open(&formatCtx->pb, filename, AVIO_FLAG_WRITE);

      //write header
      int res = avformat_write_header(formatCtx, NULL);

      //write frames

      // get the frames from file
      uint32_t u32frameCnt = 0;

      do
      {
         int8_t i8frame_name[64] = "";

         uint8_t  *pu8framePtr = NULL;
         AVPacket pkt = { 0 };

         av_init_packet(&pkt);
         sprintf(i8frame_name, "frames/frame%d.bin", u32frameCnt++);
         //reading frames from files
         FILE *ph264Frame = fopen(i8frame_name, "r");
         if(NULL == ph264Frame)
         {
            goto leave;
         }

         //get file size
         fseek(ph264Frame, 0L, SEEK_END);
         uint32_t u32file_size = 0;
         u32file_size = ftell(ph264Frame);
         fseek(ph264Frame, 0L, SEEK_SET);

         pu8framePtr = malloc(u32file_size);
         uint32_t u32readout = fread(pu8framePtr, 1, u32file_size, ph264Frame);

         //if the read frame is a key frame i.e. nalu hdr type = 5 set it as a key frame
         if(0x65 == pu8framePtr[4])
         {
            pkt.flags = AV_PKT_FLAG_KEY;
         }
         pkt.data = (uint8_t *)pu8framePtr;
         pkt.size = u32readout;
         pkt.pts  = u32frameCnt;
         pkt.dts  = pkt.pts;

         av_packet_rescale_ts(&pkt, c->time_base, video_st.st->time_base);
         pkt.stream_index = video_st.st->index;
         av_interleaved_write_frame(formatCtx, &pkt);
         free(pu8framePtr);
         fclose(ph264Frame);
      }
      while(1);
    leave:

      av_write_trailer(formatCtx);
      av_dump_format(formatCtx, 0, filename, 1);
      avcodec_free_context(&video_st.enc);
      avio_closep(&formatCtx->pb);
      avformat_free_context(formatCtx);
    }

    It can be compiled with the following command line (after adding headers) :

    gcc file.c -o test_app -I/usr/local/include -L/usr/local/lib -lxcb-shm -lxcb -lX11 -lx264 -lm -lz -pthread -lswresample -lswscale -lavcodec -lavformat -lavdevice -lavutil

    The files that are read are valid annexB stream (valid as in it’s playable in vlc after concatenating into file) it is a Constrained Baseline 3.1 profile H264 and it comes from an IPcam’s interleaved RTCP/RTP stream (demuxed)

    The result is ... well I don’t see the picture. I get only black screen with the progress bar and timer running. I don’t know if I do something wrong with setting up the codecs and streams, or it’s just wrong timestamps.
    I know I got them wrong in some manner but I don’t understand that fully yet (how to calculate the correct presentation times), i.e. the stream and the codec both contain time_base field, and then I know that the sample rate of the video is 90kHz and the frame rate is 5 fps

    On top of it all the examples I’ve found have to some extend deprecated parts that change the flow/meaning of the application and that doesn’t help at all so thus If anyone could help I would appreciate it (I think not only me I would guess)

    Regards, Pawel