Recherche avancée

Médias (1)

Mot : - Tags -/epub

Autres articles (101)

Sur d’autres sites (15679)

  • Split a movie into 1000+ shots using PyAV in a single pass ?

    3 mai 2019, par Andrew Klaassen

    I need to split a 44 minute MP4 into 1000 shots (i.e. separate MP4s) with ffmpeg. I want to do it quickly (i.e. in a single pass rather than 1000 passes), I need perfect frame accuracy, and I need to do it in Windows.

    The Windows command-line length limit is stopping me from doing this, and I’m wondering if someone could show me an example of how to do this using a library like PyAV or Avpy. (Libraries like ffmpeg-python and ffmpy won’t help, since they simply construct an ffmpeg command line and run it, leading to the same Windows command-line length issue that I already have.)

    After much testing and gnashing of teeth, I’ve learned that the only way to get perfect frame accuracy from ffmpeg, 100% of the time, is to use the "select" filter. ("-ss" in the newest versions of ffmpeg is frame accurate 99% of the time ; unfortunately, that’s not good enough for this application.)

    There are two ways to use "select" for this. There’s the slow way, which I’m doing now, and which requires having ffmpeg open the file 1000 times :

    for (start, end, name) in shots:
       audio_start = start / frame_rate
       audio_end = end + 1 / frame_rate
       cmd = [
           path_to_ffmpeg,
           '-y',
           '-i', input_movie,
           '-vf', r'select=between(n\,%s\,%s),setpts=PTS-STARTPTS' % (start, end),
           '-af', 'atrim=%s:%s,asetpts=PTS-STARTPTS' % (audio_start, audio_end),
           '-c:v', 'libx264',
           '-c:a', 'aac',
           '-write_tmcd', '0',
           '-g', '1',
           '-r', str(frame_rate),
           name + '.mp4',
           '-af', 'atrim=%s:%s' % (audio_start, audio_end),
           name + '.wav',
       ]
       subprocess.call(cmd)

    And there’s the fast way, which causes the Windows command line to explode when there are too many shots. The long command line leads to a failure to run :

    cmd = [
       path_to_ffmpeg,
       '-y',
       '-i',
       input_movie,
    ]
    for (start, end, name) in shots:
       audio_start = start / frame_rate
       audio_end = end + 1 / frame_rate
       cmd.extend([
           '-vf', r'select=between(n\,%s\,%s),setpts=PTS-STARTPTS' % (start, end),
           '-af', 'atrim=%s:%s,asetpts=PTS-STARTPTS' % (audio_start, audio_end),
           '-c:v', 'libx264',
           '-c:a', 'aac',
           '-write_tmcd', '0',
           '-g', '1',
           '-r', str(frame_rate),
           name + '.mp4',
           '-af', 'atrim=%s:%s' % (audio_start, audio_end),
           name + '.wav',
       ]
    subprocess.call(cmd)

    I’ve looked through the documentation of PyAV and Avpy, but I haven’t been able to figure out whether the second form of my function is something I could do there, or how I’d go about doing it. If it is possible, would someone be able to write a function equivalent to my second function, using either library ?

  • How to convert jquery animation to movie or gif format ?

    19 avril 2019, par Barış Demirdelen

    How to convert jquery animation to movie or gif format ?
    Animation and screenshot functions call or too slow.
    Help me please

    Animation Function

    function resim1(){
       $("#resim-1").animate({ left: leftx}, startEffectTime1);
       ......
    }

    ScreenShot Function but too slow

    function shot(){
             html2canvas($("#main"), {
                 onrendered: function(canvas) {
                     theCanvas = canvas;
                     document.body.appendChild(canvas);
                     Canvas2Image.saveAsPNG(canvas);
                     $("#img-out").append(canvas);
                 }
             });
    }

    Call animation and screenshot functions

    $(document).ready(function() {
        resim1(); // Animate start
        setInterval(function(){ // Screenshot start
             shot();
        },500);

    });

    Bottom function call animation breaking :/

    $(document).ready(function() {
        resim1(); // Animate start
        setInterval(function(){ // Screenshot start
             shot();
        },500);

    });
  • Error : No such filter : '"movie', what's the isssue ?

    16 mars 2019, par uno

    I am using the code to add watermarks to videos on upload for carrierwave-video :

    process encode_video: [:mp4, resolution: "640x480", watermark: {
       path: "app/assets/images/logo-nike.jpg",
       position: :bottom_right,
       pixels_from_edge: 10
     }]

    When i use this code, i get error :

    (in short)

    Stream mapping:
     Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
     Stream #0:1 -> #0:1 (aac (native) -> aac (native))
    Press [q] to stop, [?] for help
    [AVFilterGraph @ 0x55c8909bf180] No such filter: '"movie'
    Error reinitializing filters!
    Failed to inject frame into filter network: Invalid argument
    Error while processing the decoded data for stream #0:0
    Conversion failed!
    ):

    my ffmpeg version is 4.1.1

    Is there something missing from ffmpeg i need to install ? I have looked around and found no issues with others using this code (most posts are years old though)

    I found this : No such filter : ’drawtext’

    but isn’t the same thing ?