
Recherche avancée
Autres articles (45)
-
Soumettre améliorations et plugins supplémentaires
10 avril 2011Si vous avez développé une nouvelle extension permettant d’ajouter une ou plusieurs fonctionnalités utiles à MediaSPIP, faites le nous savoir et son intégration dans la distribution officielle sera envisagée.
Vous pouvez utiliser la liste de discussion de développement afin de le faire savoir ou demander de l’aide quant à la réalisation de ce plugin. MediaSPIP étant basé sur SPIP, il est également possible d’utiliser le liste de discussion SPIP-zone de SPIP pour (...) -
Menus personnalisés
14 novembre 2010, parMediaSPIP utilise le plugin Menus pour gérer plusieurs menus configurables pour la navigation.
Cela permet de laisser aux administrateurs de canaux la possibilité de configurer finement ces menus.
Menus créés à l’initialisation du site
Par défaut trois menus sont créés automatiquement à l’initialisation du site : Le menu principal ; Identifiant : barrenav ; Ce menu s’insère en général en haut de la page après le bloc d’entête, son identifiant le rend compatible avec les squelettes basés sur Zpip ; (...) -
Possibilité de déploiement en ferme
12 avril 2011, parMediaSPIP peut être installé comme une ferme, avec un seul "noyau" hébergé sur un serveur dédié et utilisé par une multitude de sites différents.
Cela permet, par exemple : de pouvoir partager les frais de mise en œuvre entre plusieurs projets / individus ; de pouvoir déployer rapidement une multitude de sites uniques ; d’éviter d’avoir à mettre l’ensemble des créations dans un fourre-tout numérique comme c’est le cas pour les grandes plate-formes tout public disséminées sur le (...)
Sur d’autres sites (9565)
-
Broadcast mjpeg stream via websocket using ffmpeg and Python Tornado
25 février 2016, par AsampaizWell, i have been strugling for weeks now. Searching and reading a hundred of pages and nearly surrender.
I need your help, this is the story : I want to stream my Logitech C930e webcam (connected to Raspi 2) to web browser. I have tried so many different way, such as using ffserver to pass the stream from ffmpeg to the web browser, but all of that is using same basic, it’s all need a re-encoding. ffserver will always re-encode the stream that passed by ffmpeg, no matter it is already on the right format or not. My webcam have built-in video encoding to mjpeg until 1080p, so that is the reason why i use this webcam, i don’t want using all of Raspi 2 resource just for encoding those stream.
This approach end up in eating all my Raspi 2 Resources.
Logitech C930e ---mjpeg 720p (compressed) instead of rawvideo---> ffmjpeg (copy, no reencoding) —http—> ffserver(mjpeg, reencoding to mjpeg ;this is the problem) —http—> Firefox
My new approach
Logitech C930e ---mjpeg 720p (compressed) instead of rawvideo---> ffmjpeg (copy, no reencoding —pipe—> Python3 (using tornado as the web framework) —websocket—> Firefox
The problem of the new approach
The problem is i can not make sure the stream format that passed by ffmpeg via pipe to Python is ready | compatible to be streamed to browser via websocket. I mean i already do all these step above but the result is unreadable image shown in the browser (like TV lost signal).
- I need help figuring out how to feed python the right mjpeg stream format with ffmpeg
- I need help on the client side (javascript) how to show the binary message that sent via websocket (the mjpeg stream)
This is my current script
Executing ffmpeg in Python (pipe) - Server Side
--- cut ---
multiprocessing.Process.__init__(self)
self.resultQ = resultQ
self.taskQ = taskQ
self.FFMPEG_BIN = "/home/pi/bin/ffmpeg"
self.video_w = 1280
self.video_h = 720
self.video_res = '1280x720'
self.webcam = '/dev/video0'
self.frame_rate = '10'
self.command = ''
self.pipe = ''
self.stdout = ''
self.stderr = ''
#Start the ffmpeg, this parameter need to be ajusted,
#video format already tried rawvide, singlejpeg, mjpeg
#mpjpeg, image2pipe
#i need help here (to make sure the format is right for pipe)
def camera_stream_start(self):
self.command = [ self.FFMPEG_BIN,
'-loglevel', 'debug',
'-y',
'-f', 'v4l2',
'-input_format', 'mjpeg',
'-s', self.video_res,
'-r', self.frame_rate,
'-i', self.webcam,
'-c:v', 'copy',
'-an',
'-f', 'rawvideo',
#'-pix_fmts', 'rgb24',
'-']
self.pipe = sp.Popen(self.command, stdin=sp.PIPE, stdout = sp.PIPE, shell=False)
#return self.pipe
#stop ffmpeg
def camera_stream_stop(self):
self.pipe.stdout.flush()
self.pipe.terminate()
self.pipe = ''
#return self.pipe
def run(self):
#start stream
self.camera_stream_start()
logging.info("** Camera process started")
while True:
#get the stream from pipe,
#this part is also need to be ajusted
#i need help here
#processing the stream read so it can be
#send to browser via websocket
stream = self.pipe.stdout.read(self.video_w*self.video_h*3)
#reply format to main process
#in main process, the data will be send over binary websocket
#to client (self.write_message(data, binary=True))
rpl = {
'task' : 'feed',
'is_binary': True,
'data' : stream
}
self.pipe.stdout.flush()
self.resultQ.put(rpl)
#add some wait
time.sleep(0.01)
self.camera_stream_stop()
logging.info("** Camera process ended")ffmpeg output
--- Cut ---
Successfully opened the file.
Output #0, rawvideo, to 'pipe:':
Metadata:
encoder : Lavf57.26.100
Stream #0:0, 0, 1/10: Video: mjpeg, 1 reference frame, yuvj422p(center), 1280x720 (0x0), 1/10, q=2-31, -1 kb/s, 10 fps, 10 tbr, 10 tbn, 10 tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
--- Cut ---JavaScript websocket - on the client side
--- Cut ---
socket = new WebSocket(url, protocols || []);
socket.binaryType = "arraybuffer";
socket.onmessage = function (message) {
//log.debug(message.data instanceof ArrayBuffer);
//This is for the stream that sent via websocket
if(message.data instanceof ArrayBuffer)
{
//I need help here
//How can i process the binary stream
//so its can be shown in the browser (img)
var bytearray = new Uint8Array(message.data);
var imageheight = 720;
var imagewidth = 1280;
var tempcanvas = document.createElement('canvas');
tempcanvas.height = imageheight;
tempcanvas.width = imagewidth;
var tempcontext = tempcanvas.getContext('2d');
var imgdata = tempcontext.getImageData(0,0,imagewidth,imageheight);
var imgdatalen = imgdata.data.length;
for(var i=8;i/this is for ordinary string that sent via websocket
else{
pushData = JSON.parse(message.data);
console.log(pushData);
}
--- Cut ---Any help, feedback or anything is very appreciated. If something not clear please advice me.
-
How can I determine the resolution of incoming RTMP streams with ffmpeg ?
12 mars 2019, par toastedDeliI’m using ffmpeg to transcode RTMP from my own RTMP server into HLS ready H.264. At the moment, I’m executing a command of the following form
ffmpeg -i rtmp://<ip>:<port> <options for="for" 480p="480p"> <options for="for" 720p30="720p30"> <options for="for" 720p60="720p60"> <options for="for" 1080p="1080p">
</options></options></options></options></port></ip>This is causing me to attempt to transcode lower resolutions to higher resolutions.
The RTMP server I’m using is nginx with RTMP module
Is there a way I can determine the source resolution, so that I only transcode into resolutions smaller than the source one ?
-
Using ffmpeg to overlay dvdsub
27 avril 2019, par ib11I am trying to overlay a dvdsub file pair (*.idx + *.sub) to a video file.
This is the batch script with the command line I am trying to use :
@echo off
set srcVidFile1="myvideo.mov"
set srcSubFile=mysub.sub
set srcIdxFile=mysub.idx
set destFile=D:\testsub.mp4
ffmpeg.exe -i %srcVidFile1% -i %srcSubFile% -i %srcIdxFile%
-filter_complex "[0:v][1:s]overlay" -c:s dvdsub -c:v
libx264 -crf 24 -c:a aac -b:a 160K -ar 48K -strict -2 -y
%destFile%This however only accepts 720x576 VOBsub files. And also the color gets inverted.
My video however is 1080p and do have a 1920x1080 VOBsub file pair, but when I trying use them, I get an error sub2video : rectange (xxx xxx xxx xxx) overflowing 720 576
The full output :
ffmpeg version N-81516-gbe07c25 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-libebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --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-lzma --enable-decklink --enable-zlib
libavutil 55. 29.100 / 55. 29.100
libavcodec 57. 54.101 / 57. 54.101
libavformat 57. 48.101 / 57. 48.101
libavdevice 57. 0.102 / 57. 0.102
libavfilter 6. 58.100 / 6. 58.100
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'myvideo.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2017-07-18T19:00:46.000000Z
timecode : 00:59:58;00
Duration: 00:01:19.01, start: 0.000000, bitrate: 146880 kb/s
Stream #0:0(eng): Video: dnxhd (DNXHD) (AVdn / 0x6E645641), yuv422p(tv, bt709/unknown/unknown), 1920x1080, 145344 kb/s, 29.97 fps,
29.97 tbr, 29970 tbn, 29970 tbc (default)
Metadata:
creation_time : 2017-07-18T19:00:46.000000Z
handler_name : Apple Alias Data Handler
encoder : Avid DNxHD Codec
Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, stereo, s16, 1536 kb/s (default)
Metadata:
creation_time : 2017-07-18T19:00:46.000000Z
handler_name : Apple Alias Data Handler
Stream #0:2(eng): Data: none (tmcd / 0x64636D74) (default)
Metadata:
creation_time : 2017-07-18T19:01:18.000000Z
handler_name : Apple Alias Data Handler
timecode : 00:59:58;00
Input #1, mpeg, from 'mysub.sub':
Duration: 00:00:52.88, start: 3600.042000, bitrate: 10 kb/s
Stream #1:0[0x20]: Subtitle: dvd_subtitle
Input #2, vobsub, from 'mysub.idx':
Duration: N/A, bitrate: N/A
Stream #2:0[0x0](en): Subtitle: dvd_subtitle, 1920x1080 (default)
[mpeg @ 0000000002de4580] sub2video: using 720x576 canvas
[libx264 @ 00000000005234c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 00000000005234c0] profile High, level 4.0
[libx264 @ 00000000005234c0] 264 - core 148 r2705 3f5ed56 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=24.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[mp4 @ 00000000005218a0] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
Last message repeated 2 times
Output #0, mp4, to 'D:\testsub.mp4':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
timecode : 00:59:58;00
encoder : Lavf57.48.101
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1920x1080, q=-1--1, 0.03 fps, 11988 tbn, 29.97 tbc (default)
Metadata:
encoder : Lavc57.54.101 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream #0:1(eng): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, delay 1024, padding 0, 160 kb/s (default)
Metadata:
creation_time : 2017-07-18T19:00:46.000000Z
handler_name : Apple Alias Data Handler
encoder : Lavc57.54.101 aac
Stream #0:2: Subtitle: dvd_subtitle (dvdsub) ([224][0][0][0] / 0x00E0), 720x480
Metadata:
encoder : Lavc57.54.101 dvdsub
Stream mapping:
Stream #0:0 (dnxhd) -> overlay:main (graph 0)
Stream #1:0 (dvdsub) -> overlay:overlay (graph 0)
overlay (graph 0) -> Stream #0:0 (libx264)
Stream #0:1 -> #0:1 (pcm_s16le (native) -> aac (native))
Stream #1:0 -> #0:2 (dvd_subtitle (dvdsub) -> dvd_subtitle (dvdsub))
Press [q] to stop, [?] for help
sub2video: rectangle (942 858 163 60) overflowing 720 576
Last message repeated 1 times
frame= 33 fps=0.0 q=0.0 size= 0kB time=00:00:07.08 bitrate= 0.1kbits/s speed=14.1x
frame= 63 fps= 62 q=30.0 size= 10kB time=00:00:07.08 bitrate= 11.1kbits/s speed=7.01x
frame= 91 fps= 59 q=30.0 size= 30kB time=00:00:07.08 bitrate= 34.7kbits/s speed= 4.6x
frame= 112 fps= 55 q=30.0 size= 197kB time=00:00:07.08 bitrate= 227.9kbits/s speed=3.45x
frame= 124 fps= 47 q=30.0 size= 407kB time=00:00:07.08 bitrate= 470.6kbits/s speed=2.69x
frame= 137 fps= 44 q=30.0 size= 639kB time=00:00:07.08 bitrate= 738.6kbits/s speed=2.26x
frame= 152 fps= 41 q=30.0 size= 861kB time=00:00:07.08 bitrate= 995.4kbits/s speed=1.89x
frame= 163 fps= 37 q=30.0 size= 1002kB time=00:00:07.08 bitrate=1158.6kbits/s speed=1.63x
frame= 175 fps= 36 q=30.0 size= 1412kB time=00:00:07.08 bitrate=1633.3kbits/s speed=1.46x
frame= 187 fps= 35 q=30.0 size= 1642kB time=00:00:07.31 bitrate=1838.4kbits/s speed=1.36x
frame= 202 fps= 34 q=30.0 size= 1892kB time=00:00:07.82 bitrate=1979.7kbits/s speed=1.31x
frame= 213 fps= 33 q=30.0 size= 2071kB time=00:00:08.19 bitrate=2071.2kbits/s speed=1.26x
sub2video: rectangle (419 785 1209 133) overflowing 720 576
frame= 225 fps= 32 q=30.0 size= 2363kB time=00:00:09.54 bitrate=2028.5kbits/s speed=1.36x
frame= 236 fps= 31 q=30.0 size= 2554kB time=00:00:09.54 bitrate=2192.6kbits/s speed=1.26x
frame= 249 fps= 31 q=30.0 size= 2760kB time=00:00:09.54 bitrate=2369.7kbits/s speed=1.18x
frame= 262 fps= 30 q=30.0 size= 2957kB time=00:00:09.83 bitrate=2463.4kbits/s speed=1.14x
frame= 272 fps= 29 q=30.0 size= 3111kB time=00:00:10.15 bitrate=2509.4kbits/s speed=1.09x
frame= 283 fps= 29 q=30.0 size= 3796kB time=00:00:10.51 bitrate=2957.1kbits/s speed=1.07x
sub2video: rectangle (942 858 163 60) overflowing 720 576
frame= 289 fps= 28 q=30.0 size= 4144kB time=00:00:13.62 bitrate=2491.4kbits/s speed=1.32x
frame= 297 fps= 27 q=30.0 size= 4613kB time=00:00:13.62 bitrate=2773.6kbits/s speed=1.26x
frame= 304 fps= 27 q=30.0 size= 5036kB time=00:00:13.62
[---TRUNCATED REST OF FRAMES---]
video:94601kB audio:1616kB subtitle:52kB other streams:0kB global headers:0kB muxing overhead: 0.085206%
[libx264 @ 00000000005234c0] frame I:35 Avg QP:23.92 size:153135
[libx264 @ 00000000005234c0] frame P:958 Avg QP:26.88 size: 69163
[libx264 @ 00000000005234c0] frame B:1375 Avg QP:26.60 size: 18365
[libx264 @ 00000000005234c0] consecutive B-frames: 22.2% 0.7% 1.3% 75.8%
[libx264 @ 00000000005234c0] mb I I16..4: 11.8% 84.0% 4.2%
[libx264 @ 00000000005234c0] mb P I16..4: 3.2% 22.6% 0.4% P16..4: 40.9% 10.7% 6.7% 0.0% 0.0% skip:15.4%
[libx264 @ 00000000005234c0] mb B I16..4: 0.3% 2.2% 0.0% B16..8: 44.9% 2.2% 0.4% direct: 2.8% skip:47.2% L0:45.9% L1:51.3% BI: 2.8%
[libx264 @ 00000000005234c0] 8x8 transform intra:86.2% inter:89.3%
[libx264 @ 00000000005234c0] coded y,uvDC,uvAC intra: 76.4% 65.9% 37.2% inter: 23.4% 29.3% 3.5%
[libx264 @ 00000000005234c0] i16 v,h,dc,p: 18% 42% 5% 34%
[libx264 @ 00000000005234c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 10% 9% 47% 5% 6% 5% 6% 5% 6%
[libx264 @ 00000000005234c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 18% 17% 7% 11% 9% 10% 6% 7%
[libx264 @ 00000000005234c0] i8c dc,h,v,p: 63% 16% 16% 5%
[libx264 @ 00000000005234c0] Weighted P-Frames: Y:5.2% UV:2.9%
[libx264 @ 00000000005234c0] ref P L0: 50.5% 14.8% 22.5% 11.6% 0.6%
[libx264 @ 00000000005234c0] ref B L0: 87.9% 9.7% 2.4%
[libx264 @ 00000000005234c0] ref B L1: 95.2% 4.8%
[libx264 @ 00000000005234c0] kb/s:9808.13
[aac @ 0000000000524340] Qavg: 574.088I would like to input the 1920x1080 VOBsub file pair and overlay it on the 1080p video with 24bit original colors.
Can somebody give me the correct command line for this ?