Recherche avancée

Médias (17)

Mot : - Tags -/wired

Autres articles (83)

  • MediaSPIP version 0.1 Beta

    16 avril 2011, par

    MediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • MediaSPIP 0.1 Beta version

    25 avril 2011, par

    MediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
    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 (...)

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

  • Revision 1161055129 : Be consistent with SAD values SAD returns unsigned values. Make all the declara

    26 juin 2012, par Johann

    Changed Paths : Modify /test/sad_test.cc Modify /vp8/common/mfqe.c Modify /vp8/common/rtcd_defs.sh Modify /vp8/common/sad_c.c Modify /vp8/common/variance.h Modify /vp8/common/x86/sad_sse2.asm Modify /vp8/encoder/mcomp.c Modify /vp8/encoder/rdopt.c Be consistent with SAD (...)

  • seeking with av_seek_frame returns invalid data

    27 juin 2016, par mtadmk

    Based on dranger tutorial I’m trying to implement seeking in video file. Problem is with seeking to beginning milliseconds - it always returns 0 when seeking backward, or some place in file (based on file format).

    I.e. with this video file and seeking forward to 500 pts there is always 6163 pts returned. Seeking backward to 500 is always returning 0. I have no idea why.

    Code to do this :

    import java.util.Arrays;
    import java.util.List;
    import org.bytedeco.javacpp.BytePointer;
    import org.bytedeco.javacpp.DoublePointer;
    import org.bytedeco.javacpp.PointerPointer;
    import org.bytedeco.javacpp.avcodec;
    import org.bytedeco.javacpp.avformat;
    import org.bytedeco.javacpp.avutil;
    import org.bytedeco.javacpp.swscale;

    import static org.bytedeco.javacpp.avcodec.av_free_packet;
    import static org.bytedeco.javacpp.avcodec.avcodec_close;
    import static org.bytedeco.javacpp.avcodec.avcodec_decode_video2;
    import static org.bytedeco.javacpp.avcodec.avcodec_find_decoder;
    import static org.bytedeco.javacpp.avcodec.avcodec_flush_buffers;
    import static org.bytedeco.javacpp.avcodec.avcodec_open2;
    import static org.bytedeco.javacpp.avcodec.avpicture_fill;
    import static org.bytedeco.javacpp.avcodec.avpicture_get_size;
    import static org.bytedeco.javacpp.avformat.AVSEEK_FLAG_BACKWARD;
    import static org.bytedeco.javacpp.avformat.av_dump_format;
    import static org.bytedeco.javacpp.avformat.av_read_frame;
    import static org.bytedeco.javacpp.avformat.av_register_all;
    import static org.bytedeco.javacpp.avformat.av_seek_frame;
    import static org.bytedeco.javacpp.avformat.avformat_close_input;
    import static org.bytedeco.javacpp.avformat.avformat_find_stream_info;
    import static org.bytedeco.javacpp.avformat.avformat_open_input;
    import static org.bytedeco.javacpp.avutil.AVMEDIA_TYPE_VIDEO;
    import static org.bytedeco.javacpp.avutil.AV_PIX_FMT_RGB24;
    import static org.bytedeco.javacpp.avutil.AV_TIME_BASE;
    import static org.bytedeco.javacpp.avutil.av_frame_alloc;
    import static org.bytedeco.javacpp.avutil.av_frame_get_best_effort_timestamp;
    import static org.bytedeco.javacpp.avutil.av_free;
    import static org.bytedeco.javacpp.avutil.av_make_q;
    import static org.bytedeco.javacpp.avutil.av_malloc;
    import static org.bytedeco.javacpp.avutil.av_q2d;
    import static org.bytedeco.javacpp.avutil.av_rescale_q;
    import static org.bytedeco.javacpp.swscale.SWS_BILINEAR;
    import static org.bytedeco.javacpp.swscale.sws_getContext;
    import static org.bytedeco.javacpp.swscale.sws_scale;

    public class SeekTest1 {
       private avformat.AVFormatContext videoFile;
       private final avcodec.AVPacket framePacket = new avcodec.AVPacket();
       private avcodec.AVCodecContext videoCodec;
       private avutil.AVFrame yuvFrame;
       private swscale.SwsContext scalingContext;
       private avutil.AVFrame rgbFrame;
       private int streamId;
       private long lastTime;

       public static void main(String[] args) {
           if (args.length > 0) {
               new SeekTest1().start(args[0]);
           } else {
               new SeekTest1().start("/path/to/file");
           }

       }

       private void start(String path) {
           init(path);
           //test for forward
    //        List<integer> seekPos = Arrays.asList(0, 100, 0, 200, 0, 300, 0, 400, 0, 500, 0, 600, 0, 700);
           //test for backward
           List<integer> seekPos = Arrays.asList(10000, 8000, 10000, 7000, 10000, 6000, 10000, 4000, 10000, 2000, 10000, 1000, 10000, 200);
           seekPos.forEach(seekPosition -> {
               readFrame();
               seek(seekPosition);
           });
           readFrame();
           cleanUp();
       }

       long seek(long seekPosition) {
           final avutil.AVRational timeBase = fetchTimeBase();
           long timeInBaseUnit = fetchTimeInBaseUnit(seekPosition, timeBase);

           //changing flag to AVSEEK_FLAG_ANY does not change behavior
           int flag = 0;
           if (timeInBaseUnit &lt; lastTime) {
               flag = AVSEEK_FLAG_BACKWARD;
               System.out.println("seeking backward to " + timeInBaseUnit);
           } else {
               System.out.println("seeking forward to " + timeInBaseUnit);
           }
           avcodec_flush_buffers(videoCodec);
           av_seek_frame(videoFile, streamId, timeInBaseUnit, flag);
           return timeInBaseUnit;
       }

       private long fetchTimeInBaseUnit(long seekPositionMillis, avutil.AVRational timeBase) {
           return av_rescale_q((long) (seekPositionMillis / 1000.0 * AV_TIME_BASE), av_make_q(1, AV_TIME_BASE), timeBase);
       }

       private void readFrame() {
           while (av_read_frame(videoFile, framePacket) >= 0) {
               if (framePacket.stream_index() == streamId) {
                   // Decode video frame
                   final int[] frameFinished = new int[1];
                   avcodec_decode_video2(this.videoCodec, yuvFrame, frameFinished, framePacket);

                   if (frameFinished[0] != 0) {
                       av_free_packet(framePacket);
                       long millis = produceFinishedFrame();
                       System.out.println("produced time " + millis);
                       break;
                   }
               }
               av_free_packet(framePacket);
           }
       }

       private long produceFinishedFrame() {
           sws_scale(scalingContext, yuvFrame.data(), yuvFrame.linesize(), 0,
               videoCodec.height(), rgbFrame.data(), rgbFrame.linesize());
           final long pts = av_frame_get_best_effort_timestamp(yuvFrame);
           final double timeBase = av_q2d(fetchTimeBase());
           final long foundMillis = (long) (pts * 1000 * timeBase);
           lastTime = foundMillis;
           return foundMillis;
       }

       private avutil.AVRational fetchTimeBase() {
           return videoFile.streams(streamId).time_base();
       }

       private void init(String videoPath) {
           final avformat.AVFormatContext videoFile = new avformat.AVFormatContext(null);

           av_register_all();
           if (avformat_open_input(videoFile, videoPath, null, null) != 0) throw new RuntimeException("unable to open");
           if (avformat_find_stream_info(videoFile, (PointerPointer) null) &lt; 0) throw new RuntimeException("Couldn't find stream information");

           av_dump_format(videoFile, 0, videoPath, 0);

           final int streamId = findFirstVideoStream(videoFile);

           final avcodec.AVCodecContext codec = videoFile.streams(streamId).codec();

           final avcodec.AVCodec pCodec = avcodec_find_decoder(codec.codec_id());
           if (pCodec == null) throw new RuntimeException("Unsupported codec");

           if (avcodec_open2(codec, pCodec, (avutil.AVDictionary) null) &lt; 0) throw new RuntimeException("Could not open codec");

           final avutil.AVFrame yuvFrame = av_frame_alloc();

           final avutil.AVFrame rgbFrame = av_frame_alloc();
           if (rgbFrame == null) throw new RuntimeException("Can't allocate avframe");

           final int numBytes = avpicture_get_size(AV_PIX_FMT_RGB24, codec.width(), codec.height());
           final BytePointer frameBuffer = new BytePointer(av_malloc(numBytes));

           final swscale.SwsContext swsContext = sws_getContext(codec.width(), codec.height(), codec.pix_fmt(), codec.width(), codec.height(),
               AV_PIX_FMT_RGB24, SWS_BILINEAR, null, null, (DoublePointer) null);

           avpicture_fill(new avcodec.AVPicture(rgbFrame), frameBuffer, AV_PIX_FMT_RGB24, codec.width(), codec.height());

           this.videoFile = videoFile;
           this.videoCodec = codec;
           this.yuvFrame = yuvFrame;
           this.scalingContext = swsContext;
           this.rgbFrame = rgbFrame;
           this.streamId = streamId;
       }

       private static int findFirstVideoStream(avformat.AVFormatContext videoFile) {
           int videoStream = -1;
           for (int i = 0; i &lt; videoFile.nb_streams(); i++) {
               if (videoFile.streams(i).codec().codec_type() == AVMEDIA_TYPE_VIDEO) {
                   videoStream = i;
                   break;
               }
           }
           if (videoStream == -1) throw new RuntimeException("Didn't find video stream");
           return videoStream;
       }

       private void cleanUp() {
           av_free(this.rgbFrame);
           av_free(yuvFrame);
           avcodec_close(videoCodec);
           avformat_close_input(videoFile);
       }
    }
    </integer></integer>

    As input arg should be provided file from above.

  • subprocess call of ffmpeg returns negative value

    11 juin 2019, par Zak44

    Here is the original command line call that works at shell :

    ffmpeg -i /Users/abc/Desktop/Test/Full_Mov.mov -vf "drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf: text='SCENE BLAH BLAH - %{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: fontsize=20: box=1: boxcolor=black: boxborderw=5","format=yuv420p" -f segment -segment_frames 123 -reset_timestamps 1 -c:a copy -map 0 "/Users/abc/Desktop/Test/%03d_test40.mov"

    Getting a negative value when trying to run ffmpeg via subprocess, causing it to fail and not process. I’ve even tried dumbing down the call to just run ffmpeg by itself with no arguments, and it still returns a negative value.

    import subprocess
    ffmpeg = "/usr/local/bin/ffmpeg"
    source = "/Users/abc/Desktop/Test/Full_Mov.mov"
    destination = "/Users/abc/Desktop/Test/%03d_test40.mov"
    cmd = "%s -i %s -vf \"drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf: text='SCENE BLAH BLAH - %%{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5\",\"format=yuv420p\" -f segment -segment_frames 123 -reset_timestamps 1 -c:a copy -map 0 \"%s\"" % (ffmpeg, source, destination)
    log("ffmpeg cmd: %s" % cmd)
    log(subprocess.check_output(cmd, shell=True))

    When running full command :

    CalledProcessError: Command '/usr/local/bin/ffmpeg -i /Users/abc/Desktop/Full_Mov.mov -vf "drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf: text='SCENE BLAH BLAH - %{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5","format=yuv420p" -f segment -segment_frames 318 -reset_timestamps 1 -c:a copy -map 0 "/Users/abc/Desktop/Test/%03d.tmp.mov"' returned non-zero exit status -8
       raise CalledProcessError(retcode, cmd, output=output)

    When running just ffmpeg no arguments :

    CalledProcessError: Command '/usr/local/bin/ffmpeg' returned non-zero exit status 1
       raise CalledProcessError(retcode, cmd, output=output)

    Latest output with suggested changes below :

    subprocess.CalledProcessError: Command '['/usr/local/bin/ffmpeg', '-i', '/Users/szaharak/Desktop/Flix_Test/ep888_sq66_main_mov_2019_05_20_14_15.mov', '-vf', 'drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf:', 'text=SCENE BLAH BLAH - %%{frame_num}:', 'start_number=1:', 'x=(w-tw)/2:', 'y=h-(2*lh):', 'fontcolor=black:', 'fontsize=20:', 'box=1:', 'boxcolor=white:', 'boxborderw=5', 'format=yuv420p', '-f', 'segment', '-segment_frames', '123', '-reset_timestamps', '1', '-c:a', 'copy', '-map', '0', '/Users/szaharak/Desktop/Flix_Test/%03d_test40.mov']' returned non-zero exit status 1

    [NULL @ 0x7f88c3012200] Unable to find a suitable output format for 'text=SCENE BLAH BLAH - %%{frame_num}:'
    text=SCENE BLAH BLAH - %%{frame_num}:: Invalid argument

    And here is latest...

       >>> rc = subprocess.check_call(cmd)
    ffmpeg version N-93891-ge1839283bc-tessus  https://evermeet.cx/ffmpeg/  Copyright (c) 2000-2019 the FFmpeg developers
     built with Apple LLVM version 10.0.1 (clang-1001.0.46.4)
     configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay

     libavutil      56. 28.100 / 56. 28.100
     libavcodec     58. 52.102 / 58. 52.102
     libavformat    58. 27.103 / 58. 27.103
     libavdevice    58.  7.100 / 58.  7.100
     libavfilter     7. 53.101 /  7. 53.101
     libswscale      5.  4.101 /  5.  4.101
     libswresample   3.  4.100 /  3.  4.100
     libpostproc    55.  4.100 / 55.  4.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/szaharak/Desktop/Flix_Test/ep888_sq66_main_mov_2019_05_20_14_15.mov':
     Metadata:
       major_brand     : qt  
       minor_version   : 537199360
       compatible_brands: qt  
       creation_time   : 2019-05-14T17:58:24.000000Z
       com.apple.quicktime.player.movie.audio.gain: 1.000000
       com.apple.quicktime.player.movie.audio.treble: 0.000000
       com.apple.quicktime.player.movie.audio.bass: 0.000000
       com.apple.quicktime.player.movie.audio.balance: 0.000000
       com.apple.quicktime.player.movie.audio.pitchshift: 0.000000
       com.apple.quicktime.player.movie.audio.mute:
       com.apple.quicktime.player.movie.visual.brightness: 0.000000
       com.apple.quicktime.player.movie.visual.color: 1.000000
       com.apple.quicktime.player.movie.visual.tint: 0.000000
       com.apple.quicktime.player.movie.visual.contrast: 1.000000
       com.apple.quicktime.player.version: 7.6.6 (7.6.6)
       com.apple.quicktime.version: 7.7.3 (2943.14) 0x7738000 (Mac OS X, 10.11.6, 15G22010)
     Duration: 00:01:12.67, start: 0.000000, bitrate: 23379 kb/s
       Stream #0:0(eng): Video: mjpeg (Baseline) (jpeg / 0x6765706A), yuvj422p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 72:72 DAR 16:9], 21838 kb/s, 24 fps, 24 tbr, 24k tbn, 24k tbc (default)
       Metadata:
         creation_time   : 2019-05-14T17:58:24.000000Z
         handler_name    : Apple Video Media Handler
         encoder         : Photo - JPEG
       Stream #0:1(eng): Audio: pcm_s16be (twos / 0x736F7774), 48000 Hz, stereo, s16, 1536 kb/s (default)
       Metadata:
         creation_time   : 2019-05-14T17:58:24.000000Z
         handler_name    : Apple Sound Media Handler
    [NULL @ 0x7f8ddc8ce200] Unable to find a suitable output format for 'text=SCENE BLAH BLAH - %{frame_num}: start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5: format=yuv420p'
    text=SCENE BLAH BLAH - %{frame_num}: start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5: format=yuv420p: Invalid argument
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 190, in check_call
       raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command '['/usr/local/bin/ffmpeg', '-i', '/Users/szaharak/Desktop/Flix_Test/ep888_sq66_main_mov_2019_05_20_14_15.mov', '-vf', 'drawtext=fontfile=/System/Library/Fonts/Keyboard.ttf:', 'text=SCENE BLAH BLAH - %{frame_num}: start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5: format=yuv420p', '-f', 'segment', '-segment_frames', '123', '-reset_timestamps', '1', '-c:a', 'copy', '-map', '0', '/Users/szaharak/Desktop/Flix_Test/%03d_test40.mov']' returned non-zero exit status 1
    </module></stdin>