
Recherche avancée
Médias (91)
-
999,999
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
The Slip - Artworks
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Texte
-
Demon seed (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
-
The four of us are dying (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
-
Corona radiata (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
-
Lights in the sky (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
Autres articles (72)
-
Demande de création d’un canal
12 mars 2010, parEn 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, parCette 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, parPour 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 ProgramistHow 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 GeeterI 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.


- How can I increase the performance of the
-
Cannot link an application with libavcodec
25 mars 2020, par Igor EvdokimovI’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 toavpriv_mpeg4audio_get_config2’
/home/ievdokimov/repos/FFmpeg/libavformat/matroskaenc.c:709 : undefined
reference toavpriv_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 toav_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 toav_packet_make_refcounted'
/usr/local/lib//libavformat.a(utils.o): In functionparse_packet’ :
/home/ievdokimov/repos/FFmpeg/libavformat/utils.c:1494 : undefined
reference toav_packet_make_refcounted'
/usr/local/lib//libavformat.a(utils.o): In functionff_read_packet’ :
/home/ievdokimov/repos/FFmpeg/libavformat/utils.c:876 : undefined
reference toav_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 toavpriv_codec2_mode_bit_rate'
/home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:75: undefined
reference toavpriv_codec2_mode_frame_size’
/home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:76 : undefined
reference toavpriv_codec2_mode_block_align'
/home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:74: undefined
reference toavpriv_codec2_mode_bit_rate’
/home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:75 : undefined
reference toavpriv_codec2_mode_frame_size'
/home/ievdokimov/repos/FFmpeg/libavformat/codec2.c:76: undefined
reference toavpriv_codec2_mode_block_align’
/usr/local/lib//libavformat.a(isom.o) : In functionff_mp4_read_dec_config_descr':
/home/ievdokimov/repos/FFmpeg/libavformat/isom.c:552: undefined
reference toavpriv_mpeg4audio_get_config2’
/usr/local/lib//libavformat.a(latmenc.o) : In functionlatm_decode_extradata':
/home/ievdokimov/repos/FFmpeg/libavformat/latmenc.c:65: undefined
reference toavpriv_mpeg4audio_get_config2’
/home/ievdokimov/repos/FFmpeg/libavformat/latmenc.c:65 : undefined
reference toavpriv_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 toBZ2_bzDecompressInit'
/home/ievdokimov/repos/FFmpeg/libavformat/matroskadec.c:1672:
undefined reference toBZ2_bzDecompress’
/home/ievdokimov/repos/FFmpeg/libavformat/matroskadec.c:1665 :
undefined reference toBZ2_bzDecompressEnd'
/home/ievdokimov/repos/FFmpeg/libavformat/matroskadec.c:1675:
undefined reference toBZ2_bzDecompressEnd’
/usr/local/lib//libavformat.a(mxfenc.o) : In functionget_ue_golomb_31':
/home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:140: undefined
reference toff_ue_golomb_vlc_code’
/usr/local/lib//libavformat.a(mxfenc.o) : In functionmxf_parse_dnxhd_frame':
/home/ievdokimov/repos/FFmpeg/libavformat/mxfenc.c:2030: undefined
reference toavpriv_dnxhd_get_hr_frame_size’
/usr/local/lib//libavformat.a(rtpenc_vc2hq.o) : In functioninit_get_bits_xe':
/home/ievdokimov/repos/FFmpeg/./libavcodec/get_bits.h:628: undefined
reference toff_interleaved_golomb_vlc_len’
/usr/local/lib//libavformat.a(rtpenc_vc2hq.o) : In functionget_interleaved_ue_golomb':
/home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:197: undefined
reference toff_interleaved_dirac_golomb_vlc_code’
/home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:185 : undefined
reference toff_interleaved_dirac_golomb_vlc_code'
/home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:197: undefined
reference toff_interleaved_dirac_golomb_vlc_code’
/home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:197 : undefined
reference toff_interleaved_dirac_golomb_vlc_code'
/home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:185: undefined
reference toff_interleaved_dirac_golomb_vlc_code’
/usr/local/lib//libavformat.a(rtpenc_vc2hq.o) :/home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:185 :
more undefined references toff_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 toff_interleaved_ue_golomb_vlc_code'
/home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:183: undefined
reference toff_interleaved_ue_golomb_vlc_code’
/home/ievdokimov/repos/FFmpeg/./libavcodec/golomb.h:183 : undefined
reference toff_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 toav_adts_header_parse'
/home/ievdokimov/repos/FFmpeg/libavformat/spdifdec.c:63: undefined
reference toav_adts_header_parse’
/usr/local/lib//libavformat.a(spdifenc.o) : In functionspdif_header_aac':
/home/ievdokimov/repos/FFmpeg/libavformat/spdifenc.c:362: undefined
reference toav_adts_header_parse’
/usr/local/lib//libavformat.a(ac3dec.o) : In functionac3_eac3_probe':
/home/ievdokimov/repos/FFmpeg/libavformat/ac3dec.c:63: undefined
reference toav_ac3_parse_header’
/home/ievdokimov/repos/FFmpeg/libavformat/ac3dec.c:60 : undefined
reference toav_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 statusIs there any way to fix that ?