Newest 'ffmpeg' Questions - Stack Overflow

http://stackoverflow.com/questions/tagged/ffmpeg

Les articles publiés sur le site

  • Is it possible to add an outline/border/edge to a person in a chroma-key video ?

    18 juillet, par Mouaad Abdelghafour AITALI

    I hope you're doing well. Is it possible to use FFmpeg to add an outline to a chroma-keyed video, like in the images below? My goal is to blend a background video with a foreground video, where the foreground has a white outline.

    enter image description here

    enter image description here

    Here’s my current code that blends the background and foreground videos by removing the chroma key and replacing it with the background. I want to keep this functionality but add a white outline effect around the foreground video.

    Thank you so much in advance for your help.

    public static String overlayVideo(String backgroundCroppedPath, String foregroundVideoPath, String overlayedVideoPath,
                                      double bgDurationSec, double fgDurationSec, boolean loopBg, boolean loopFg) {
        String bgInput = loopBg ? "-stream_loop -1 -i \"" + backgroundCroppedPath + "\"" : "-i \"" + backgroundCroppedPath + "\"";
        String fgInput = "";
        if (loopFg) {
            int loopCount = (int) Math.
    ceil
    (bgDurationSec / fgDurationSec);
            loopCount = Math.
    max
    (0, loopCount - 1);
            fgInput = "-stream_loop " + loopCount + " -i \"" + foregroundVideoPath + "\"";
        } else {
            fgInput = "-i \"" + foregroundVideoPath + "\"";
        }
        return "-y " + bgInput + " " + fgInput +
                " -filter_complex \"[1:v]colorkey=0x01fe01:0.3:0.2[fg];[0:v][fg]overlay=format=auto\" " +
                "-t " + bgDurationSec + " -c:v libx264 -crf 18 -preset ultrafast -pix_fmt yuv420p " +
                "\"" + overlayedVideoPath + "\"";
    }
    
  • Continuously stream audio from .m3u8 file between FFmpeg processes

    18 juillet, par demerf

    My webserver streams audio using HLS. I'm using a Python script to create an FFmpeg process that takes a random MP3 file and segments it so it can be delivered by the webserver. My issue occurs when the track ends. The player stops and the page needs to be reloaded to start the next track.

    From my understanding the .m3u8 file is continuously updating with the latest segment which the browser asks for and it should be seamlessly transitioning between tracks because the segment number is incrementing properly across processes. Code starting the FFmpeg process:

    def start_worker(self, track: Track):
        next_playing_hash = track.hash
        track_hash = track.hash
    
        input_path = os.path.join(self.source_path, track.filepath.name)
        segment_path = os.path.join(self.output_path, "segment_%03d.ts")
        output_path = os.path.join(self.output_path, "playlist.m3u8")
    
        command = ["ffmpeg", "-re", "-i", input_path,
                   "-map", "a", "-c:a", "aac", "-b:a", "128k", "-f", "hls",
                   "-hls_time", "8", "-threads", "2","-hls_list_size", "6",
                   "-hls_flags", "delete_segments+append_list+discont_start+program_date_time",
                   "-hls_segment_filename", segment_path, output_path]
    
        logging.info(f"Started Worker for {self.name}, playing {input_path}")
        self.current_worker = subprocess.Popen(command)
    
        self.last_played = track
    
        return self.current_worker
    

    This is creating 8 second segments and replacing the 6th oldest segment with the newest. I suspect this could be an issue with the new process creating a new "playlist.m3u8" file. If so, what is a way around that?

  • How to install pytorch and opencv using a fixed conda channel order ?

    18 juillet, par progquester

    Conda creates a pristine environment, configures a fixed channel order, and then starts installing pytorch torchvisioni pytorch-cuda and opencv, and it prompts for dependency conflicts. Do I have to install opencv via pip?

    The same thing happens with python 3.10

    $ conda create -n my_env3.9 python=3.9
    $ conda activate my_env3.9
    $ conda install pytorch torchvision pytorch-cuda=11.8 opencv
    Channels:
     - pytorch
     - nvidia
     - conda-forge
     - defaults
    Platform: linux-64
    Collecting package metadata (repodata.json): done
    Solving environment: failed
    
    LibMambaUnsatisfiableError: Encountered problems while solving:
      - nothing provides libopencv 4.2.0 py36_5 needed by opencv-4.2.0-py36_5
    
    Could not solve for environment specs
    The following packages are incompatible
    ├─ opencv =* * is installable with the potential options
    │  ├─ opencv [4.10.0|4.11.0] would require
    │  │  └─ libopencv [==4.10.0 headless_py310h05fcec3_10|==4.10.0 headless_py310h2251c23_11|...|==4.11.0 qt6_py39hd96f159_602], which requires
    │  │     └─ ffmpeg >=7.1.0,<8.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv [4.10.0|4.9.0] would require
    │  │  └─ libopencv [==4.10.0 headless_py310h3d4b477_1|==4.10.0 headless_py310hef7d0a5_0|...|==4.9.0 qt6_py39hed63795_614], which requires
    │  │     └─ ffmpeg >=6.1.1,<7.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv 4.10.0 would require
    │  │  └─ libopencv [==4.10.0 headless_py310h8d94708_2|==4.10.0 headless_py38h5642e36_2|...|==4.10.0 qt6_py39hfd9fb6d_602], which requires
    │  │     └─ ffmpeg >=7.0.1,<8.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv 4.10.0 would require
    │  │  └─ libopencv [==4.10.0 headless_py310h5bfabb9_4|==4.10.0 headless_py310h5bfabb9_5|...|==4.10.0 qt6_py39hdeb11db_605], which requires
    │  │     └─ ffmpeg >=6.1.2,<7.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv 4.10.0 would require
    │  │  └─ libopencv [==4.10.0 headless_py311h63eac36_5|==4.10.0 headless_py311h63eac36_6|...|==4.10.0 qt6_py39h5d2977a_603], which requires
    │  │     └─ ffmpeg >=7.0.2,<8.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv 4.11.0 would require
    │  │  └─ libopencv [==4.11.0 headless_py310h8ace835_4|==4.11.0 headless_py310h8ace835_5|...|==4.11.0 qt6_py39hbfaaa73_603], which requires
    │  │     └─ ffmpeg >=7.1.1,<8.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv [4.5.3|4.5.5|4.6.0] would require
    │  │  └─ libopencv [==4.5.3 py310hc72b5f5_8|==4.5.3 py38hc6b509d_8|...|==4.6.0 py39hf4bb9d8_2], which requires
    │  │     └─ ffmpeg >=4.4.2,<5.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv [4.6.0|4.7.0] would require
    │  │  └─ libopencv [==4.6.0 py310h5bd1119_9|==4.6.0 py310h6214075_5|...|==4.7.0 py39hf99ad11_5], which requires
    │  │     └─ ffmpeg >=5.1.2,<6.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv [4.7.0|4.8.0|4.8.1] would require
    │  │  └─ libopencv [==4.7.0 py310h245f934_4|==4.7.0 py310h3e876cf_5|...|==4.8.1 py39hf605482_5], which requires
    │  │     └─ ffmpeg >=6.0.0,<7.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv 4.9.0 would require
    │  │  └─ libopencv [==4.9.0 headless_py310hae237af_14|==4.9.0 headless_py38h0f7b093_14|...|==4.9.0 qt6_py39h067c833_615], which requires
    │  │     └─ ffmpeg >=7.0.0,<8.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv [2.4.12|2.4.13|3.1.0|3.2.0] would require
    │  │  └─ python =2.7 *, which can be installed;
    │  ├─ opencv [2.4.13.4|3.2.0|3.3.0|3.4.1] would require
    │  │  └─ ffmpeg >=3.2.3,<3.2.6 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv 3.1.0 would require
    │  │  └─ python =3.4 *, which can be installed;
    │  ├─ opencv [3.1.0|3.2.0] would require
    │  │  └─ python =3.5 *, which can be installed;
    │  ├─ opencv [3.1.0|3.2.0] would require
    │  │  └─ python =3.6 *, which can be installed;
    │  ├─ opencv [3.4.1|3.4.3|3.4.4|3.4.7] would require
    │  │  ├─ ffmpeg >=4.0.2,<4.1.0a0 *, which conflicts with any installable versions previously reported;
    │  │  └─ libopencv ==3.4.7 hc173e35_5, which requires
    │  │     └─ ffmpeg >=4.0.2,<4.1.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv 3.4.1 would require
    │  │  └─ ffmpeg >=4.0.1,<4.1.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv [3.4.4|3.4.7|...|4.1.1] would require
    │  │  ├─ ffmpeg =4.1 *, which conflicts with any installable versions previously reported;
    │  │  └─ libopencv [==3.4.7 h0cc45ee_4|==4.1.1 h0cc45ee_3], which requires
    │  │     └─ ffmpeg =4.1 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv [3.4.7|3.4.8|...|4.2.0] would require
    │  │  └─ libopencv [==3.4.7 h32d60f7_6|==3.4.7 py27_7|...|==4.2.0 py38_4], which requires
    │  │     └─ ffmpeg >=4.1.3,<4.2.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv 4.2.0 would require
    │  │  └─ libopencv ==4.2.0 py36_5, which does not exist (perhaps a missing channel);
    │  ├─ opencv [4.2.0|4.3.0|4.4.0] would require
    │  │  └─ py-opencv [==4.2.0 py36h0b673f9_6|==4.3.0 py36h0b673f9_2|==4.4.0 py36h0b673f9_2], which requires
    │  │     └─ python >=3.6,<3.7.0a0 *, which can be installed;
    │  ├─ opencv [4.2.0|4.3.0] would require
    │  │  └─ libopencv [==4.2.0 py36_7|==4.2.0 py37_7|...|==4.3.0 py38_1], which requires
    │  │     └─ ffmpeg >=4.2.3,<4.3.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv [4.2.0|4.3.0|4.4.0] would require
    │  │  └─ py-opencv [==4.2.0 py37h43977f1_5|==4.2.0 py37h43977f1_6|==4.3.0 py37h43977f1_2|==4.4.0 py37h43977f1_2], which requires
    │  │     └─ python >=3.7,<3.8.0a0 *, which can be installed;
    │  ├─ opencv [4.2.0|4.3.0|4.4.0] would require
    │  │  └─ py-opencv [==4.2.0 py38h23f93f0_5|==4.2.0 py38h23f93f0_6|==4.3.0 py38h23f93f0_2|==4.4.0 py38h23f93f0_2], which requires
    │  │     └─ python >=3.8,<3.9.0a0 *, which can be installed;
    │  ├─ opencv [4.4.0|4.5.0|4.5.1|4.5.2] would require
    │  │  └─ libopencv [==4.4.0 py36_3|==4.4.0 py37_3|...|==4.5.2 py39h70bf20d_1], which requires
    │  │     └─ ffmpeg >=4.3.1,<4.4.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv 4.5.0 would require
    │  │  └─ libopencv ==4.5.0 py36_5, which does not exist (perhaps a missing channel);
    │  ├─ opencv 4.5.0 would require
    │  │  └─ libopencv ==4.5.0 py36_6, which does not exist (perhaps a missing channel);
    │  ├─ opencv [4.5.3|4.5.5] would require
    │  │  └─ libopencv [==4.5.3 py31hbd5a65a_6|==4.5.3 py31he7a5e20_7|...|==4.5.5 py39hfb30bf4_6], which requires
    │  │     └─ ffmpeg >=4.3.2,<4.4.0a0 *, which conflicts with any installable versions previously reported;
    │  ├─ opencv 4.5.5 would require
    │  │  └─ libopencv [==4.5.5 py310h1897127_9|==4.5.5 py310hc83fb77_10|...|==4.5.5 py39he64e9e9_10], which requires
    │  │     └─ ffmpeg >=4.4.1,<5.0a0 *, which conflicts with any installable versions previously reported;
    │  └─ opencv [3.3.1|3.4.1|...|4.6.0] conflicts with any installable versions previously reported;
    └─ pin on python 3.9.* =* * is not installable because it requires
       └─ python =3.9 *, which conflicts with any installable versions previously reported.
    
    Pins seem to be involved in the conflict. Currently pinned specs:
     - python=3.9
    
  • macOS : ffmpeg runs OK but ffprobe fails to find a dynamic library [closed]

    17 juillet, par Kim Silverman

    I'm running macOS 15.5 on an M4 MacBook Pro. I have some .mov movie files, produced by taking screen recordings. I want to extract the audio from them, normalize its volume (it contains speech which is too quiet), perhaps also attenuating some background noise, and then reinsert the modified audio back into the movies. It seems to me that ffmpeg will support these needs. It has an accompanying tool ffprobe which will report on the content structure (how many audio tracks, etc) of a movie file.

    I installed ffmpeg using brew and can successfully run it:

    $ ffmpeg -version
    ffmpeg version 2.2.4
    built on Jun 27 2014 09:57:37 with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
    configuration: --prefix=/Volumes/Ramdisk/sw --enable-gpl --enable-pthreads --enable-version3 --enable-libspeex --enable-libvpx --disable-decoder=libvpx --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-avfilter --enable-libopencore_amrwb --enable-libopencore_amrnb --enable-filters --enable-libgsm --enable-libvidstab --enable-libx265 --arch=x86_64 --enable-runtime-cpudetect
    libavutil      52. 66.100 / 52. 66.100
    libavcodec     55. 52.102 / 55. 52.102
    libavformat    55. 33.100 / 55. 33.100
    libavdevice    55. 10.100 / 55. 10.100
    libavfilter     4.  2.100 /  4.  2.100
    libswscale      2.  5.102 /  2.  5.102
    libswresample   0. 18.100 /  0. 18.100
    libpostproc    52.  3.100 / 52.  3.100
    

    But if I try to launch the associated tool ffprobe, it fails looking for a library:

    $ ffprobe
    dyld[90050]: Library not loaded: @@HOMEBREW_CELLAR@@/ffmpeg/4.4_2/lib/libavdevice.58.dylib
      Referenced from: <1BF90DFA-AFA6-3011-BF50-B3515C3A7477> /opt/brew/Cellar/ffmpeg/4.4_2/bin/ffprobe
      Reason: tried: '/usr/local/lib/libavdevice.58.dylib' (no such file), '/usr/lib/libavdevice.58.dylib' (no such file, not in dyld cache)
    Abort trap: 6
    

    I uninstalled then reinstalled, updated, and upgrade brew and then ffmpeg, but the behaviour remains the same.

    The two tools are in different places:

    $ ls -l `which ffmpeg`
    -rwxr-xr-x@ 1 kimsilverman  staff  17474952 Jun 27  2014 /usr/local/bin/ffmpeg
    $ ls -l `which ffprobe`
    lrwxr-xr-x  1 kimsilverman  staff  36 Jul 16 21:21 /opt/homebrew/bin/ffprobe -> ../Cellar/ffmpeg/7.1.1_3/bin/ffprobe
    

    And I notice that ffmpeg is 11 years old, whereas ffprobe is dated today.

  • Enable Quality Selector Control in Angular Using Video.js

    17 juillet, par Abhay Singh

    I am using Video.js in an Angular 19.1.3 application, with version 8.21.0 of Video.js. I have successfully set up an HLS stream using a master index.m3u8 file, and the player automatically switches to lower quality segments when the network is slow, and to higher quality when the network is good. This part works as expected.

    However, I would like to add a manual quality selection option to allow users to choose the video quality themselves. Despite trying several plugins (such as videojs-hls-quality-selector and videojs-contrib-quality-levels), I haven't been able to get it working.

    Can anyone guide me on how to implement this feature in Video.js, ensuring that the quality selector is available for manual selection?

    Below is my Components code -

    import {AfterViewInit, Component} from '@angular/core';
    import videojs from 'video.js';
    import '@videojs/http-streaming';
    import 'video.js/dist/video-js.css';
    
    @Component({
      selector: 'app-home',
      imports: [],
      templateUrl: './home.component.html',
      styleUrl: './home.component.css'
    })
    export class HomeComponent implements AfterViewInit {
      
      ngAfterViewInit(): void {
        const player = videojs('my-video', {
          autoplay: false,
          controls: true,
          preload: 'auto',
          fluid: true,
          aspectRatio: '16:9',
        })
      
      }
    }
    

    Below is my HTML code -