Recherche avancée

Médias (91)

Autres articles (72)

  • Demande de création d’un canal

    12 mars 2010, par

    En fonction de la configuration de la plateforme, l’utilisateur peu avoir à sa disposition deux méthodes différentes de demande de création de canal. La première est au moment de son inscription, la seconde, après son inscription en remplissant un formulaire de demande.
    Les deux manières demandent les mêmes choses fonctionnent à peu près de la même manière, le futur utilisateur doit remplir une série de champ de formulaire permettant tout d’abord aux administrateurs d’avoir des informations quant à (...)

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

  • (Dés)Activation de fonctionnalités (plugins)

    18 février 2011, par

    Pour gérer l’ajout et la suppression de fonctionnalités supplémentaires (ou plugins), MediaSPIP utilise à partir de la version 0.2 SVP.
    SVP permet l’activation facile de plugins depuis l’espace de configuration de MediaSPIP.
    Pour y accéder, il suffit de se rendre dans l’espace de configuration puis de se rendre sur la page "Gestion des plugins".
    MediaSPIP est fourni par défaut avec l’ensemble des plugins dits "compatibles", ils ont été testés et intégrés afin de fonctionner parfaitement avec chaque (...)

Sur d’autres sites (7237)

  • How to build FFmpeg into static libs for MacOS for usage in a C++ application

    29 septembre 2017, par Programist

    How can I build static libs of FFmpeg for MacOS.

    All I need is to make a .mp4 with H264 codecs out of some images using ffmpeg. Dont need the build to be fully loaded with features.

    I built it for iOS using a script from here which was really simple and smooth. It checked out the code & smoothly built the output into include/ & lib/ folders.

    I checked the official FFmpeg site offers excutables for MacOS. But I need static libs to use in my C++ code.

    Question :
    I want to build FFmpeg into static libs for MacOS only for creating .mp4 videos. How can I do it OR
    How can I change this script to do the same for MacOS ?

    PS :
    I am Mac OS Sierra with Xcode9

  • How to efficiently store variable frame rate video stream in a pyqt application ?

    1er octobre 2024, par Jeroen De Geeter

    I am developing a PyQT (PySide6) application that needs to display and store multiple camera streams at the same time. The display of the camera streams goes well, however, storing these streams seems to slow down the application significantly up to a point where the GUI doesn't work fluently anymore.

    


    I have a minimal working example using a stub to demonstrate how my code currently works. However, given that it is a minimal working example, it will not visibly slow down.

    


    import sys
from time import sleep

import av
import numpy as np
import pyqtgraph as pg
from PySide6.QtCore import QThread, Signal, Slot, Qt
from PySide6.QtWidgets import QApplication, QHBoxLayout, QWidget, QVBoxLayout, QPushButton, QGroupBox


class RGBCameraStub(QThread):

    newFrame = Signal(np.ndarray)

    def __init__(self):
        super().__init__()
        self.killSwitch = True

    def stop(self):
        self.killSwitch = False
        self.quit()
        self.wait()

    def run(self):
        self.killSwitch = True
        while self.killSwitch:
            self.newFrame.emit((np.random.rand(1456, 1080, 3) * 255).astype(np.uint8))
            sleep((20 + int(np.random.rand() * 30))/ 1000)


class VideoWriter(QThread):

    def __init__(self):
        super().__init__()
        self.output_container = av.open('output_video.mkv', mode='w')
        self.stream = self.output_container.add_stream('ffv1', rate=None)
        self.stream.width = 1456
        self.stream.height = 1080
        self.stream.pix_fmt = 'yuv420p'

    @Slot(np.ndarray)
    def addFrame(self, frame: np.ndarray):
        av_frame = av.VideoFrame.from_ndarray(frame, format='rgb24')
        av_frame.pts = None # Leave emtpy for auto-handling - variable framerate?
        for packet in self.stream.encode(av_frame):
            self.output_container.mux(packet)

    def stop(self):
        self.output_container.close()
        self.quit()
        self.wait()

    def run(self):
        self.exec()


class VideoBox(QGroupBox):

    def __init__(self, title):
        super().__init__(title=title)
        self.createLayout()
        self.videoWidget.setImage((np.random.rand(1456, 1080, 3) * 255).astype(np.uint8))

    def createLayout(self):
        layout = QVBoxLayout()
        self.videoWidget = pg.RawImageWidget()
        layout.addWidget(self.videoWidget)
        self.setLayout(layout)
        self.setStyleSheet("""QGroupBox {
            border: 1px solid #494B4F;
            margin-top: 8px;
            min-width: 180px;
            min-height: 180px;
            padding: 2px 0px 0px 0px;
            }
        QGroupBox::title {
            color: #aeb0b8;
            subcontrol-origin: margin;
            subcontrol-position: top left;
            left: 20px;
            padding: 0 8px;
        }""")

    def setImage(self, data: np.ndarray):
        self.videoWidget.setImage(data)

class MainWindow(QWidget):

    closeSignal = Signal()

    def __init__(self):
        super().__init__()
        self.setGeometry(0, 0, 900, 720)
        self.createLayout()

    def createLayout(self):
        self.vimbaImage = VideoBox("RGB")
        self.info = self.infoLayout()

        layout = QVBoxLayout()
        layout.addWidget(self.vimbaImage)
        layout.addWidget(self.info)
        self.setLayout(layout)

        self.setAttribute(Qt.WA_StyledBackground, True)
        self.setStyleSheet("MainWindow { background-color: #1e1f22; }")

    def infoLayout(self):
        widget = QWidget()
        layout = QVBoxLayout()

        rgbButtonWidget = QWidget()
        buttonLayout = QHBoxLayout()
        self.connectButton = QPushButton('Connect', parent=self)
        self.disconnectButton = QPushButton('Disconnect', parent=self)
        buttonLayout.addWidget(self.connectButton)
        buttonLayout.addWidget(self.disconnectButton)
        buttonLayout.addStretch()
        rgbButtonWidget.setLayout(buttonLayout)
        layout.addWidget(rgbButtonWidget)

        widget.setLayout(layout)
        return widget

    def closeEvent(self, event):
        self.closeSignal.emit()
        event.accept()



if __name__ == "__main__":
    app = QApplication(sys.argv)

    rgbCamera = RGBCameraStub()
    videoWriter = VideoWriter()
    videoWriter.start()

    main_window = MainWindow()

    # Button connections
    main_window.connectButton.clicked.connect(rgbCamera.start)
    main_window.disconnectButton.clicked.connect(rgbCamera.stop)
    # main_window.disconnectButton.clicked.connect(videoWriter.stop)

    # Display frames
    rgbCamera.newFrame.connect(main_window.vimbaImage.setImage)

    # Write frame to file
    rgbCamera.newFrame.connect(videoWriter.addFrame)

    # Close application
    main_window.closeSignal.connect(rgbCamera.stop)
    main_window.closeSignal.connect(videoWriter.stop)

    main_window.show()
    sys.exit(app.exec())



    


    My question(s) therefore are :

    


      

    • How can I increase the performance of the VideoWriter ? I am currently adding frame by frame as soon as the camera thread provides a new frame. Maybe this is not the best approach ?
    • 


    • The frame rate of the camera is not completely stable, I therefore set av_frame.pts = None but maybe this is also not the approach to take ?
    • 


    • With code as is, the resulting media file quickly blows up in size, is there a way of dealing with this without quality loss ?
    • 


    


    As a side not, I currently use the PyAV wrapper for the FFmpeg libraries, however I am open to other suggestions.

    


  • Cannot link an application with libavcodec

    25 mars 2020, par Igor Evdokimov

    I’m trying to make a simplest app with usage of ffmpeg libs.
    Here is my code :

    main.c :

    #include <libavcodec></libavcodec>avcodec.h>
    #include <libavformat></libavformat>avformat.h>
    #include <libswscale></libswscale>swscale.h>

    int main()
    {

       avformat_network_init();
       return 0;
    }

    compiler command :

    gcc -o main main.c -Wall  -lavformat -lavcodec -lswresample -lswscale -lavutil -lm -lz -lpthread -L/usr/local/lib/

    leads to :

    /usr/local/lib//libavformat.a(matroskaenc.o) : In function

    get_aac_sample_rates':
     /home/ievdokimov/repos/FFmpeg/libavformat/matroskaenc.c:709: undefined
     reference to

    avpriv_mpeg4audio_get_config2’
    /home/ievdokimov/repos/FFmpeg/libavformat/matroskaenc.c:709 : undefined
    reference to

    avpriv_mpeg4audio_get_config2'
     /usr/local/lib//libavformat.a(mux.o): In function
     

    ff_interleave_add_packet’ :
    /home/ievdokimov/repos/FFmpeg/libavformat/mux.c:936 : undefined
    reference to

    av_packet_make_refcounted'
     /usr/local/lib//libavformat.a(utils.o): In function
     

    ff_packet_list_put’ :
    /home/ievdokimov/repos/FFmpeg/libavformat/utils.c:461 : undefined
    reference to

    av_packet_make_refcounted'
     /usr/local/lib//libavformat.a(utils.o): In function

    parse_packet’ :
    /home/ievdokimov/repos/FFmpeg/libavformat/utils.c:1494 : undefined
    reference to

    av_packet_make_refcounted'
     /usr/local/lib//libavformat.a(utils.o): In function

    ff_read_packet’ :
    /home/ievdokimov/repos/FFmpeg/libavformat/utils.c:876 : undefined
    reference to

    av_packet_make_refcounted'
     /usr/local/lib//libavformat.a(codec2.o): In function
     

    codec2_read_header_common’ :
    /home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:74 : undefined
    reference to

    avpriv_codec2_mode_bit_rate'
     /home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:75: undefined
     reference to

    avpriv_codec2_mode_frame_size’
    /home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:76 : undefined
    reference to

    avpriv_codec2_mode_block_align'
     /home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:74: undefined
     reference to

    avpriv_codec2_mode_bit_rate’
    /home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:75 : undefined
    reference to

    avpriv_codec2_mode_frame_size'
     /home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:76: undefined
     reference to

    avpriv_codec2_mode_block_align’
    /usr/local/lib//libavformat.a(isom.o) : In function

    ff_mp4_read_dec_config_descr':
     /home/ievdokimov/repos/FFmpeg/libavformat/isom.c:552: undefined
     reference to

    avpriv_mpeg4audio_get_config2’
    /usr/local/lib//libavformat.a(latmenc.o) : In function

    latm_decode_extradata':
     /home/ievdokimov/repos/FFmpeg/libavformat/latmenc.c:65: undefined
     reference to

    avpriv_mpeg4audio_get_config2’
    /home/ievdokimov/repos/FFmpeg/libavformat/latmenc.c:65 : undefined
    reference to

    avpriv_mpeg4audio_get_config2'
     /usr/local/lib//libavformat.a(matroskadec.o): In function
     

    matroska_decode_buffer’ :
    /home/ievdokimov/repos/FFmpeg/libavformat/matroskadec.c:1657 :
    undefined reference to

    BZ2_bzDecompressInit'
     /home/ievdokimov/repos/FFmpeg/libavformat/matroskadec.c:1672:
     undefined reference to

    BZ2_bzDecompress’
    /home/ievdokimov/repos/FFmpeg/libavformat/matroskadec.c:1665 :
    undefined reference to

    BZ2_bzDecompressEnd'
     /home/ievdokimov/repos/FFmpeg/libavformat/matroskadec.c:1675:
     undefined reference to

    BZ2_bzDecompressEnd’
    /usr/local/lib//libavformat.a(mxfenc.o) : In function

    get_ue_golomb_31':
     /home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:140: undefined
     reference to

    ff_ue_golomb_vlc_code’
    /usr/local/lib//libavformat.a(mxfenc.o) : In function

    mxf_parse_dnxhd_frame':
     /home/ievdokimov/repos/FFmpeg/libavformat/mxfenc.c:2030: undefined
     reference to

    avpriv_dnxhd_get_hr_frame_size’
    /usr/local/lib//libavformat.a(rtpenc_vc2hq.o) : In function

    init_get_bits_xe':
     /home/ievdokimov/repos/FFmpeg/./libavcodec/get_bits.h:628: undefined
     reference to

    ff_interleaved_golomb_vlc_len’
    /usr/local/lib//libavformat.a(rtpenc_vc2hq.o) : In function

    get_interleaved_ue_golomb':
     /home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:197: undefined
     reference to

    ff_interleaved_dirac_golomb_vlc_code’
    /home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:185 : undefined
    reference to

    ff_interleaved_dirac_golomb_vlc_code'
     /home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:197: undefined
     reference to

    ff_interleaved_dirac_golomb_vlc_code’
    /home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:197 : undefined
    reference to

    ff_interleaved_dirac_golomb_vlc_code'
     /home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:185: undefined
     reference to

    ff_interleaved_dirac_golomb_vlc_code’
    /usr/local/lib//libavformat.a(rtpenc_vc2hq.o) :/home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:185 :
    more undefined references to

    ff_interleaved_dirac_golomb_vlc_code'
     follow /usr/local/lib//libavformat.a(rtpenc_vc2hq.o): In function
     

    get_interleaved_ue_golomb’ :
    /home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:183 : undefined
    reference to

    ff_interleaved_ue_golomb_vlc_code'
     /home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:183: undefined
     reference to

    ff_interleaved_ue_golomb_vlc_code’
    /home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:183 : undefined
    reference to

    ff_interleaved_ue_golomb_vlc_code'
     /usr/local/lib//libavformat.a(spdifdec.o): In function
     

    spdif_get_offset_and_codec’ :
    /home/ievdokimov/repos/FFmpeg/libavformat/spdifdec.c:63 : undefined
    reference to

    av_adts_header_parse'
     /home/ievdokimov/repos/FFmpeg/libavformat/spdifdec.c:63: undefined
     reference to

    av_adts_header_parse’
    /usr/local/lib//libavformat.a(spdifenc.o) : In function

    spdif_header_aac':
     /home/ievdokimov/repos/FFmpeg/libavformat/spdifenc.c:362: undefined
     reference to

    av_adts_header_parse’
    /usr/local/lib//libavformat.a(ac3dec.o) : In function

    ac3_eac3_probe':
     /home/ievdokimov/repos/FFmpeg/libavformat/ac3dec.c:63: undefined
     reference to

    av_ac3_parse_header’
    /home/ievdokimov/repos/FFmpeg/libavformat/ac3dec.c:60 : undefined
    reference to

    av_ac3_parse_header'
     /usr/local/lib//libavformat.a(adtsenc.o): In function
     

    adts_decode_extradata’ :
    /home/ievdokimov/repos/FFmpeg/libavformat/adtsenc.c:56 : undefined
    reference to `avpriv_mpeg4audio_get_config2’ collect2 : error : ld
    returned 1 exit status

    Is there any way to fix that ?