Recherche avancée

Médias (0)

Mot : - Tags -/images

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (86)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Encoding and processing into web-friendly formats

    13 avril 2011, par

    MediaSPIP automatically converts uploaded files to internet-compatible formats.
    Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
    Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
    Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
    All uploaded files are stored online in their original format, so you can (...)

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

Sur d’autres sites (6368)

  • ffmpeg streaming fails to stream over internet to twitch.tv

    15 avril 2021, par josh joyer

    I did already streaming to twitch.tv with command :

    


    ffmpeg -stream_loop -1 -i 9stream.wav 
-f dshow -i audio="mic"
 -f dshow -i audio="realTek" 
-filter_complex "[0:a]volume=2[a0];[1:a]volume=1.5[a1];[2:a]volume=1.5[a2];[a0][a1][a2]amix=inputs=3"
 -f dshow -i video="USB2.0 PC CAMERA" 
-ac 1 -ar 11025 -acodec libmp3lame -c:v libx264 -b:v 100k -f flv -s 80x120 
rtmp://live.twitch.tv/app/live_streamingKey


    


    It was most advanced command that I used to stream online.

    


    (I do not know how to make enter in here so I put double enter)

    


    9stream.wav was played in loop as background music

    


    microphone was added

    


    stereoMix named realTek was the playback of system sounds

    


    volume was adjusted and all sounds mixed into one stream

    


    camera view was added

    


    THEN network flow was reduced by sending only one channel with low frequency of 11025 with lowest

    


    possible data size made by mp3 encoder and libx264 was used to encode video in png files.

    


    It was working fine SO I decided to make final version

    


    (this one worked with all sounds(background music,microphone,system sounds) and camera)

    


    Final version was about adding screen view and logo.

    


    I succeded writing everything to disc with command :

    


    ffmpeg 
-stream_loop -1 -i 9stream.wav 
-f dshow -i audio="mic" 
-f dshow -i audio="stereoMixRealtek" 
-i camera.png 
-f gdigrab -framerate 1 -i desktop 
-f dshow -framerate 15 -i video="USB2.0 PC CAMERA" 
-filter_complex "[0:a]volume=2[a0];[1:a]volume=1.5[a1];[2:a]volume=1.5[a2];
[a0][a1][a2]amix=inputs=3[aMix];
[4:v]scale=200:-1[v4];[5:v]scale=50:-1[v5];
[v4][v5]overlay=(W-w)-5:(H-h)-5[vScreenCam];
[vScreenCam][3:v]overlay=5:5[v]" 
-map "[v]" -map "[aMix]" -ac 1 -ar 11025 -c:a libmp3lame -r 1 -c:v libx264 output.mkv


    


    That was

    


    background music

    


    microphone

    


    system sounds

    


    logo picture

    


    screen view

    


    camera

    


    adjusting sound volume

    


    mixing sounds

    


    reducing size of screen view and camera view

    


    overlaying reduced camera view over reduced screen view

    


    adding logo

    


    choosing final view, final mixed sounds,

    


    reducing data size to one channel, reducing sample frequency,

    


    choosing mp3 codec to reduce final data size,

    


    choosing minimal framerate of one per second to reduce data size

    


    choosing libx264 codec for video.

    


    THEN I tried to use final command for network streaming with slight modification :

    


    ffmpeg 
-stream_loop -1 -i 9stream.wav 
-f dshow -i audio="mic" 
-f dshow -i audio="stereo mix" 
-i camera.png 
-f gdigrab -framerate 1 -i desktop 
-f dshow -framerate 15 -i video="USB2.0 PC CAMERA" 
-filter_complex "[0:a]volume=2[a0];[1:a]volume=1.5[a1];[2:a]volume=1.5[a2];
[a0][a1][a2]amix=inputs=3[aMix];
[4:v]scale=200:-1[v4];[5:v]scale=50:-1[v5];
[v4][v5]overlay=(W-w)-5:(H-h)-5[vScreenCam];[vScreenCam][3:v]overlay=5:5[v]" 
-map "[v]" -map "[aMix]" 
-ac 1 -ar 11025 -c:a libmp3lame -r 1 -c:v libx264 -b:v 100k -b:a 10k -f flv rtmp://live.twitch.tv/app/live_streamingKey


    


    I added parameter
-b:v 100k to reduce video flow
-b:a 10k to reduce sound flow
-f flv to be good for twitch.tv otherwise it would not accept stream

    


    BUT ffmpeg is always stopping sending data with message like this :

    


    testosteron_@testosteron MINGW64 ~/Desktop/2021b/magisterka/ScreenRecorderXi/ScreenRecorderXi/bin
$ cmd
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. Wszelkie prawa zastrze▒one.

C:\Users\testosteron_\Desktop\2021b\magisterka\ScreenRecorderXi\ScreenRecorderXi\bin>ffmpeg -stream_loop -1 -i 9stream.wav -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{5B4DB0B5-B645-4AFA-930D-4710AAF753DB}" -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{ADECEC1D-C3CC-4BAE-8516-752251B8B63F}" -i camera.png -f gdigrab -framerate 1 -i desktop -f dshow -framerate 15 -i video="USB2.0 PC CAMERA" -filter_complex "[0:a]volume=2[a0];[1:a]volume=1.5[a1];[2:a]volume=1.5[a2];[a0][a1][a2]amix=inputs=3[aMix];[4:v]scale=200:-1[v4];[5:v]scale=50:-1[v5];[v4][v5]overlay=(W-w)-5:(H-h)-5[vScreenCam];[vScreenCam][3:v]overlay=5:5[v]" -map "[v]" -map "[aMix]" -ac 1 -ar 11025 -c:a libmp3lame -r 1 -c:v libx264 -b:v 100k -b:a 10k -f flv rtmp://live.twitch.tv/app/live_674912043_oAwGnACTndHyeZnlA6scLegm8gaxwf
ffmpeg -stream_loop -1 -i 9stream.wav -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{5B4DB0B5-B645-4AFA-930D-4710AAF753DB}" -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{ADECEC1D-C3CC-4BAE-8516-752251B8B63F}" -i camera.png -f gdigrab -framerate 1 -i desktop -f dshow -framerate 15 -i video="USB2.0 PC CAMERA" -filter_complex "[0:a]volume=2[a0];[1:a]volume=1.5[a1];[2:a]volume=1.5[a2];[a0][a1][a2]amix=inputs=3[aMix];[4:v]scale=200:-1[v4];[5:v]scale=50:-1[v5];[v4][v5]overlay=(W-w)-5:(H-h)-5[vScreenCam];[vScreenCam][3:v]overlay=5:5[v]" -map "[v]" -map "[aMix]" -ac 1 -ar 11025 -c:a libmp3lame -r 1 -c:v libx264 -b:v 100k -b:a 10k -f flv rtmp://live.twitch.tv/app/live_674912043_oAwGnACTndHyeZnlA6scLegm8gaxwf
ffmpeg version git-2020-08-02-b48397e Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 10.2.1 (GCC) 20200726
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-librav1e --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 57.100 / 56. 57.100
  libavcodec     58. 99.100 / 58. 99.100
  libavformat    58. 49.100 / 58. 49.100
  libavdevice    58. 11.101 / 58. 11.101
  libavfilter     7. 87.100 /  7. 87.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from '9stream.wav':
  Metadata:
    encoder         : Lavf58.49.100
  Duration: 00:00:13.48, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, dshow, from 'audio=@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{5B4DB0B5-B645-4AFA-930D-4710AAF753DB}':
  Duration: N/A, start: 209609.948000, bitrate: 1411 kb/s
    Stream #1:0: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s
Guessed Channel Layout for Input Stream #2.0 : stereo
Input #2, dshow, from 'audio=@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{ADECEC1D-C3CC-4BAE-8516-752251B8B63F}':
  Duration: N/A, start: 209610.502000, bitrate: 1411 kb/s
    Stream #2:0: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s
Input #3, png_pipe, from 'camera.png':
  Duration: N/A, bitrate: N/A
    Stream #3:0: Video: png, rgba(pc), 32x32 [SAR 3779:3779 DAR 1:1], 25 tbr, 25 tbn, 25 tbc
[gdigrab @ 0000009a3f019700] Capturing whole desktop as 1280x1024x32 at (0,0)
[gdigrab @ 0000009a3f019700] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #4, gdigrab, from 'desktop':
  Duration: N/A, start: 1618506176.140738, bitrate: 41943 kb/s
    Stream #4:0: Video: bmp, bgra, 1280x1024, 41943 kb/s, 1 fps, 1000k tbr, 1000k tbn, 1000k tbc
Input #5, dshow, from 'video=USB2.0 PC CAMERA':
  Duration: N/A, start: 209613.583000, bitrate: N/A
    Stream #5:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 640x480, 15 fps, 15 tbr, 10000k tbn, 10000k tbc
[dshow @ 0000009a3f034900] real-time buffer [USB2.0 PC CAMERA] [video input] too full or near too full (101% of size: 3041280 [rtbufsize parameter])! frame dropped!
    Last message repeated 9 times
Stream mapping:
  Stream #0:0 (pcm_s16le) -> volume
  Stream #1:0 (pcm_s16le) -> volume
  Stream #2:0 (pcm_s16le) -> volume
  Stream #3:0 (png) -> overlay:overlay
  Stream #4:0 (bmp) -> scale
  Stream #5:0 (rawvideo) -> scale
  overlay -> Stream #0:0 (libx264)
  amix -> Stream #0:1 (libmp3lame)
Press [q] to stop, [?] for help
[dshow @ 0000009a3efd5b80] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[dshow @ 0000009a406fb280] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[libx264 @ 0000009a4082ddc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264 @ 0000009a4082ddc0] profile High, level 1.1, 4:2:0, 8-bit
[libx264 @ 0000009a4082ddc0] 264 - core 161 - H.264/MPEG-4 AVC codec - Copyleft 2003-2020 - 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=5 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=1 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=100 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, flv, to 'rtmp://live.twitch.tv/app/live_streamingKey':
  Metadata:
    encoder         : Lavf58.49.100
    Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p(progressive), 200x160, q=-1--1, 100 kb/s, 1 fps, 1k tbn, 1 tbc (default)
    Metadata:
      encoder         : Lavc58.99.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/100000 buffer size: 0 vbv_delay: N/A
    Stream #0:1: Audio: mp3 (libmp3lame) ([2][0][0][0] / 0x0002), 11025 Hz, mono, fltp, 10 kb/s (default)
    Metadata:
      encoder         : Lavc58.99.100 libmp3lame
frame=    1 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   frame=    1 fps=1.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   frame=    1 fps=0.7 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   frame=    3 fps=1.5 q=0.0 size=       0kB time=00:00:03.08 bitrate=   1.0kbits/sframe=    4 fps=1.6 q=0.0 size=       0kB time=00:00:03.66 bitrate=   0.8kbits/sframe=    4 fps=1.3 q=0.0 size=       0kB time=00:00:03.66 bitrate=   0.8kbits/sframe=    5 fps=1.4 q=0.0 size=       0kB time=00:00:04.65 bitrate=   0.7kbits/sframe=    5 fps=1.2 q=0.0 size=       0kB time=00:00:04.65 bitrate=   0.7kbits/sframe=    6 fps=1.3 q=0.0 size=       0kB time=00:00:05.64 bitrate=   0.5kbits/sframe=    6 fps=1.2 q=0.0 size=       0kB time=00:00:05.64 bitrate=   0.5kbits/sframe=    7 fps=1.3 q=0.0 size=       0kB time=00:00:06.64 bitrate=   0.5kbits/sframe=    7 fps=1.2 q=0.0 size=       0kB time=00:00:06.64 bitrate=   0.5kbits/sframe=    8 fps=1.2 q=0.0 size=       0kB time=00:00:07.58 bitrate=   0.4kbits/sframe=    8 fps=1.1 q=0.0 size=       0kB time=00:00:07.58 bitrate=   0.4kbits/sframe=    9 fps=1.2 q=0.0 size=       0kB time=00:00:08.57 bitrate=   0.4kbits/sframe=    9 fps=1.1 q=0.0 size=       0kB time=00:00:08.57 bitrate=   0.4kbits/sframe=   10 fps=1.2 q=0.0 size=       0kB time=00:00:09.56 bitrate=   0.3kbits/sframe=   10 fps=1.1 q=0.0 size=       0kB time=00:00:09.56 bitrate=   0.3kbits/sframe=   11 fps=1.1 q=0.0 size=       1kB time=00:00:10.55 bitrate=   0.9kbits/sframe=   11 fps=1.1 q=0.0 size=       1kB time=00:00:10.55 bitrate=   0.9kbits/sframe=   12 fps=1.1 q=0.0 size=       2kB time=00:00:11.55 bitrate=   1.7kbits/sframe=   12 fps=1.1 q=0.0 size=       2kB time=00:00:11.55 bitrate=   1.7kbits/sframe=   13 fps=1.1 q=0.0 size=       4kB time=00:00:12.59 bitrate=   2.5kbits/sframe=   13 fps=1.1 q=0.0 size=       4kB time=00:00:12.59 bitrate=   2.5kbits/sframe=   14 fps=1.1 q=0.0 size=       5kB time=00:00:13.58 bitrate=   3.0kbits/sframe=   14 fps=1.1 q=0.0 size=       5kB time=00:00:13.58 bitrate=   3.0kbits/sframe=   15 fps=1.1 q=0.0 size=       6kB time=00:00:14.58 bitrate=   3.5kbits/sframe=   15 fps=1.1 q=0.0 size=       6kB time=00:00:14.58 bitrate=   3.5kbits/sframe=   16 fps=1.1 q=0.0 size=       8kB time=00:00:15.57 bitrate=   4.0kbits/sframe=   16 fps=1.1 q=0.0 size=       8kB time=00:00:15.57 bitrate=   4.0kbits/sframe=   17 fps=1.1 q=0.0 size=       9kB time=00:00:16.56 bitrate=   4.4kbits/sframe=   17 fps=1.1 q=0.0 size=       9kB time=00:00:16.56 bitrate=   4.4kbits/sframe=   18 fps=1.1 q=0.0 size=      10kB time=00:00:17.55 bitrate=   4.7kbits/sframe=   18 fps=1.0 q=0.0 size=      10kB time=00:00:17.55 bitrate=   4.7kbits/sframe=   19 fps=1.1 q=0.0 size=      11kB time=00:00:18.55 bitrate=   5.0kbits/sframe=   19 fps=1.0 q=0.0 size=      11kB time=00:00:18.55 bitrate=   5.0kbits/sframe=   20 fps=1.1 q=0.0 size=      13kB time=00:00:19.54 bitrate=   5.3kbits/sframe=   20 fps=1.0 q=0.0 size=      13kB time=00:00:19.54 bitrate=   5.3kbits/sframe=   21 fps=1.1 q=0.0 size=      14kB time=00:00:20.58 bitrate=   5.6kbits/sframe=   21 fps=1.0 q=0.0 size=      14kB time=00:00:20.58 bitrate=   5.6kbits/sframe=   22 fps=1.1 q=0.0 size=      15kB time=00:00:21.58 bitrate=   5.8kbits/sframe=   22 fps=1.0 q=0.0 size=      15kB time=00:00:21.58 bitrate=   5.8kbits/sframe=   23 fps=1.1 q=0.0 size=      17kB time=00:00:22.57 bitrate=   6.0kbits/sframe=   23 fps=1.0 q=0.0 size=      17kB time=00:00:22.57 bitrate=   6.0kbits/sframe=   24 fps=1.1 q=0.0 size=      18kB time=00:00:23.56 bitrate=   6.2kbits/sframe=   24 fps=1.0 q=0.0 size=      18kB time=00:00:23.56 bitrate=   6.2kbits/sframe=   25 fps=1.1 q=0.0 size=      19kB time=00:00:24.56 bitrate=   6.4kbits/sframe=   25 fps=1.0 q=0.0 size=      19kB time=00:00:24.56 bitrate=   6.4kbits/sframe=   26 fps=1.1 q=0.0 size=      20kB time=00:00:25.55 bitrate=   6.5kbits/sframe=   26 fps=1.0 q=0.0 size=      20kB time=00:00:25.55 bitrate=   6.5kbits/sframe=   27 fps=1.0 q=0.0 size=      22kB time=00:00:26.54 bitrate=   6.7kbits/sframe=   27 fps=1.0 q=0.0 size=      22kB time=00:00:26.54 bitrate=   6.7kbits/sframe=   28 fps=1.0 q=0.0 size=      23kB time=00:00:27.58 bitrate=   6.8kbits/sframe=   28 fps=1.0 q=0.0 size=      23kB time=00:00:27.58 bitrate=   6.8kbits/sframe=   29 fps=1.0 q=0.0 size=      24kB time=00:00:28.58 bitrate=   6.9kbits/sframe=   30 fps=1.1 q=0.0 size=      25kB time=00:00:29.00 bitrate=   7.0kbits/sframe=   30 fps=1.0 q=0.0 size=      25kB time=00:00:29.57 bitrate=   7.0kbits/sframe=   30 fps=1.0 q=0.0 size=      25kB time=00:00:29.57 bitrate=   7.0kbits/sframe=   31 fps=1.0 q=0.0 size=      27kB time=00:00:30.56 bitrate=   7.2kbits/sframe=   32 fps=1.1 q=0.0 size=      27kB time=00:00:30.56 bitrate=   7.2kbits/sframe=   32 fps=1.0 q=0.0 size=      28kB time=00:00:31.56 bitrate=   7.3kbits/sframe=   33 fps=1.1 q=0.0 size=      29kB time=00:00:32.55 bitrate=   7.4kbits/sframe=   33 fps=1.0 q=0.0 size=      29kB time=00:00:32.55 bitrate=   7.4kbits/sframe=   33 fps=1.0 q=0.0 size=      29kB time=00:00:32.55 bitrate=   7.4kbits/sframe=   34 fps=1.0 q=0.0 size=      31kB time=00:00:33.54 bitrate=   7.4kbits/sframe=   35 fps=1.1 q=0.0 size=      31kB time=00:00:33.96 bitrate=   7.5kbits/sframe=   35 fps=1.0 q=0.0 size=      32kB time=00:00:34.53 bitrate=   7.5kbits/sframe=   36 fps=1.0 q=0.0 size=      33kB time=00:00:35.58 bitrate=   7.6kbits/sframe=   36 fps=1.0 q=0.0 size=      33kB time=00:00:35.58 bitrate=   7.6kbits/sframe=   36 fps=1.0 q=0.0 size=      33kB time=00:00:35.58 bitrate=   7.6kbits/sframe=   37 fps=1.0 q=0.0 size=      34kB time=00:00:36.57 bitrate=   7.7kbits/sframe=   38 fps=1.0 q=0.0 size=      36kB time=00:00:37.56 bitrate=   7.8kbits/sframe=   38 fps=1.0 q=0.0 size=      36kB time=00:00:37.56 bitrate=   7.8kbits/sframe=   39 fps=1.0 q=0.0 size=      37kB time=00:00:38.56 bitrate=   7.8kbits/sframe=   39 fps=1.0 q=0.0 size=      37kB time=00:00:38.56 bitrate=   7.8kbits/sframe=   40 fps=1.0 q=0.0 size=      38kB time=00:00:39.55 bitrate=   7.9kbits/sframe=   40 fps=1.0 q=0.0 size=      38kB time=00:00:39.55 bitrate=   7.9kbits/sframe=   41 fps=1.0 q=0.0 size=      39kB time=00:00:40.54 bitrate=   8.0kbits/sframe=   41 fps=1.0 q=0.0 size=      39kB time=00:00:40.54 bitrate=   8.0kbits/sframe=   42 fps=1.0 q=0.0 size=      41kB time=00:00:41.59 bitrate=   8.0kbits/sframe=   42 fps=1.0 q=0.0 size=      41kB time=00:00:41.59 bitrate=   8.0kbits/sframe=   43 fps=1.0 q=0.0 size=      42kB time=00:00:42.58 bitrate=   8.1kbits/sframe=   43 fps=1.0 q=0.0 size=      42kB time=00:00:42.58 bitrate=   8.1kbits/sframe=   44 fps=1.0 q=0.0 size=      43kB time=00:00:43.57 bitrate=   8.1kbits/sframe=   44 fps=1.0 q=0.0 size=      43kB time=00:00:43.57 bitrate=   8.1kbits/sframe=   45 fps=1.0 q=0.0 size=      45kB time=00:00:44.56 bitrate=   8.2kbits/sframe=   45 fps=1.0 q=0.0 size=      45kB time=00:00:44.56 bitrate=   8.2kbits/sframe=   46 fps=1.0 q=0.0 size=      46kB time=00:00:45.56 bitrate=   8.2kbits/sframe=   46 fps=1.0 q=0.0 size=      46kB time=00:00:45.56 bitrate=   8.2kbits/sframe=   47 fps=1.0 q=0.0 size=      47kB time=00:00:46.55 bitrate=   8.3kbits/sframe=   47 fps=1.0 q=0.0 size=      47kB time=00:00:46.55 bitrate=   8.3kbits/sframe=   48 fps=1.0 q=0.0 size=      48kB time=00:00:47.54 bitrate=   8.3kbits/sframe=   48 fps=1.0 q=0.0 size=      48kB time=00:00:47.54 bitrate=   8.3kbits/sframe=   49 fps=1.0 q=0.0 size=      50kB time=00:00:48.59 bitrate=   8.4kbits/sframe=   49 fps=1.0 q=0.0 size=      50kB time=00:00:48.59 bitrate=   8.4kbits/s[flv @ 0000009a40865940] Packets poorly interleaved, failed to avoid negative timestamp -3900 in stream 0.
Try -max_interleave_delta 0 as a possible workaround.
[flv @ 0000009a40865940] Packets are not in the proper order with respect to DTS
av_interleaved_write_frame(): Invalid argument
[flv @ 0000009a40865940] Failed to update header with correct duration.
[flv @ 0000009a40865940] Failed to update header with correct filesize.
frame=   50 fps=1.0 q=6.0 Lsize=      63kB time=00:00:49.11 bitrate=  10.5kbits/s speed=   1x
video:27kB audio:48kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[libx264 @ 0000009a4082ddc0] frame I:1     Avg QP: 0.56  size: 27197
[libx264 @ 0000009a4082ddc0] frame P:15    Avg QP: 0.76  size:  2567
[libx264 @ 0000009a4082ddc0] frame B:34    Avg QP: 3.98  size:  1481
[libx264 @ 0000009a4082ddc0] consecutive B-frames:  8.0%  0.0% 12.0% 80.0%
[libx264 @ 0000009a4082ddc0] mb I  I16..4: 13.1% 13.8% 73.1%
[libx264 @ 0000009a4082ddc0] mb P  I16..4:  0.0%  0.1%  0.8%  P16..4: 17.5%  5.9%  4.2%  0.0%  0.0%    skip:71.5%
[libx264 @ 0000009a4082ddc0] mb B  I16..4:  0.0%  0.0%  0.3%  B16..8: 12.1%  4.2%  2.4%  direct: 6.3%  skip:74.7%  L0:42.9% L1:41.8% BI:15.4%
[libx264 @ 0000009a4082ddc0] final ratefactor: -7.50
[libx264 @ 0000009a4082ddc0] 8x8 transform intra:12.3% inter:14.5%
[libx264 @ 0000009a4082ddc0] coded y,uvDC,uvAC intra: 95.2% 96.9% 96.9% inter: 16.0% 14.9% 14.8%
[libx264 @ 0000009a4082ddc0] i16 v,h,dc,p: 26% 32% 32% 11%
[libx264 @ 0000009a4082ddc0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  8% 40% 14%  8%  1%  2%  1%  1% 25%
[libx264 @ 0000009a4082ddc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 45%  7%  4%  5%  3%  7%  3%  9%
[libx264 @ 0000009a4082ddc0] i8c dc,h,v,p: 36% 40% 18%  6%
[libx264 @ 0000009a4082ddc0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0000009a4082ddc0] ref P L0: 65.2%  2.2% 19.9% 12.7%
[libx264 @ 0000009a4082ddc0] ref B L0: 71.8% 23.0%  5.2%
[libx264 @ 0000009a4082ddc0] ref B L1: 88.2% 11.8%
[libx264 @ 0000009a4082ddc0] kb/s:17.86
Conversion failed!


    


    Main message from above was :

    


    [flv @ 0000009a40865940] Packets poorly interleaved, failed to avoid negative timestamp -3900 in stream 0.


    


    It was problem to stream 0 so it was mixed sounds stream BUT earlier it was fine with mixing

    


    and sending mix over internet BUT after I added screen view and scaling it failed to work.

    


    What is problem ?

    


    How to fix it ?

    


    Since I was able to do this to stream to disc I would assume that

    


    computer processing power is enough. Since I was able to stream over internet mixed sounds I

    


    would assume that it is not problem here. So the problem must be with sending

    


    screen view. BUT I put framerate 1 per second and downsized its resolution. I compressed

    


    sounds as much as I could. I added -b:a and -b:v commands to reduce network flow.

    


    WHAT ELSE COULD I DO TO FIX IT ?

    


  • Visualizing Call Graphs Using Gephi

    1er septembre 2014, par Multimedia Mike — General

    When I was at university studying computer science, I took a basic chemistry course. During an accompanying lab, the teaching assistant chatted me up and asked about my major. He then said, “Computer science ? Well, that’s just typing stuff, right ?”

    My impulsive retort : “Sure, and chemistry is just about mixing together liquids and coming up with different colored liquids, as seen on the cover of my high school chemistry textbook, right ?”


    Chemistry fun

    In fact, pure computer science has precious little to do with typing (as is joked in CS circles, computer science is about computers in the same way that astronomy is about telescopes). However, people who study computer science often pursue careers as programmers, or to put it in fancier professional language, software engineers.

    So, what’s a software engineer’s job ? Isn’t it just typing ? That’s where I’ve been going with this overly long setup. After thinking about it for long enough, I like to say that a software engineer’s trade is managing complexity.

    A few years ago, I discovered Gephi, an open source tool for graph and data visualization. It looked neat but I didn’t have much use for it at the time. Recently, however, I was trying to get a better handle on a large codebase. I.e., I was trying to manage the project’s complexity. And then I thought of Gephi again.

    Prior Work
    One way to get a grip on a large C codebase is to instrument it for profiling and extract details from the profiler. On Linux systems, this means compiling and linking the code using the -pg flag. After running the executable, there will be a gmon.out file which is post-processed using the gprof command.

    GNU software development tools have a reputation for being rather powerful and flexible, but also extremely raw. This first hit home when I was learning how to use the GNU tool for code coverage — gcov — and the way it outputs very raw data that you need to massage with other tools in order to get really useful intelligence.

    And so it is with gprof output. The output gives you a list of functions sorted by the amount of processing time spent in each. Then it gives you a flattened call tree. This is arranged as “during the profiled executions, function c was called by functions a and b and called functions d, e, and f ; function d was called by function c and called functions g and h”.

    How can this call tree data be represented in a more instructive manner that is easier to navigate ? My first impulse (and I don’t think I’m alone in this) is to convert the gprof call tree into a representation suitable for interpretation by Graphviz. Unfortunately, doing so tends to generate some enormous and unwieldy static images.

    Feeding gprof Data To Gephi
    I learned of Gephi a few years ago and recalled it when I developed an interest in gaining better perspective on a large base of alien C code. To understand what this codebase is doing for a particular use case, instrument it with gprof, gather execution data, and then study the code paths.

    How could I feed the gprof data into Gephi ? Gephi supports numerous graphing formats including an XML-based format named GEXF.

    Thus, the challenge becomes converting gprof output to GEXF.

    Which I did.

    Demonstration
    I have been absent from FFmpeg development for a long time, which is a pity because a lot of interesting development has occurred over the last 2-3 years after a troubling period of stagnation. I know that 2 big video codec developments have been HEVC (next in the line of MPEG codecs) and VP9 (heir to VP8’s throne). FFmpeg implements them both now.

    I decided I wanted to study the code flow of VP9. So I got the latest FFmpeg code from git and built it using the options "--extra-cflags=-pg --extra-ldflags=-pg". Annoyingly, I also needed to specify "--disable-asm" because gcc complains of some register allocation snafus when compiling inline ASM in profiling mode (and this is on x86_64). No matter ; ASM isn’t necessary for understanding overall code flow.

    After compiling, the binary ‘ffmpeg_g’ will have symbols and be instrumented for profiling. I grabbed a sample from this VP9 test vector set and went to work.

    ./ffmpeg_g -i vp90-2-00-quantizer-00.webm -f null /dev/null
    gprof ./ffmpeg_g > vp9decode.txt
    convert-gprof-to-gexf.py vp9decode.txt > /bigdisk/vp9decode.gexf
    

    Gephi loads vp9decode.gexf with no problem. Using Gephi, however, can be a bit challenging if one is not versed in any data exploration jargon. I recommend this Gephi getting starting guide in slide deck form. Here’s what the default graph looks like :


    gprof-ffmpeg-gephi-1

    Not very pretty or helpful. BTW, that beefy arrow running from mid-top to lower-right is the call from decode_coeffs_b -> iwht_iwht_4x4_add_c. There were 18774 from the former to the latter in this execution. Right now, the edge thicknesses correlate to number of calls between the nodes, which I’m not sure is the best representation.

    Following the tutorial slide deck, I at least learned how to enable the node labels (function symbols in this case) and apply a layout algorithm. The tutorial shows the force atlas layout. Here’s what the node neighborhood looks like for probing file type :


    gprof-ffmpeg-gephi-2

    Okay, so that’s not especially surprising– avprobe_input_format3 calls all of the *_probe functions in order to automatically determine input type. Let’s find that decode_coeffs_b function and see what its neighborhood looks like :


    gprof-ffmpeg-gephi-3

    That’s not very useful. Perhaps another algorithm might help. I select the Fruchterman–Reingold algorithm instead and get a slightly more coherent representation of the decoding node neighborhood :


    gprof-ffmpeg-gephi-4

    Further Work
    Obviously, I’m just getting started with this data exploration topic. One thing I would really appreciate in such a tool is the ability to interactively travel the graph since that’s what I’m really hoping to get out of this experiment– watching the code flows.

    Perhaps someone else can find better use cases for visualizing call graph data. Thus, I have published the source code for this tool at Github.

  • Thread in Thread

    28 mai 2014, par user3679963

    My company is working for visual effects and we set up an internal shot playback via a browser for our clients. For that we need to upload the video file to a FTP server.

    I want to convert a image sequence to mp4 and upload this file directly after the rendering will finish.

    For that I use :

    • one command prompt to convert
    • one command prompt to get an `md5hash
    • one for uploading the file

    I already achieved that on my local computer, where I just chained os.system('command').

    After recognizing that the program freezes very long with longer image sequences I changed the script to spawn a thread using the os.system chain.
    But on the Render Farm Server this script does not actually work.

    The RenderFarm Server runs Python 2.5

    There are some code examples :

    class CopraUpload(threading.Thread):

       # initializing Thread
       # via super constructor
       def __init__(self):
           threading.Thread.__init__(self)


       # return the size of the
       # created mp4 file
       #
       # @return: the file size in byte
       def _getFileSize(self):


       # creates a random id for organising
       # the server upload used as flag
       #
       # @return: a hash
       def _getHash(self):
               self.fileLoc = str(self.outputfileName + '.mp4')
               self.fileLoc = os.path.normpath(self.fileLoc)
               return str(os.path.getsize(self.fileLoc))

       # integrates the "missing" data for the xml file
       # generated post render from the mp4 file
       def _setPreviewDataToXML(self):
           self.xmlFile = str(self.outputfileName + '_copraUpload.xml')
           self.xmlFile = os.path.normpath(self.xmlFile)

           ett = ET.parse(self.xmlFile)
           root = ett.getroot()
           for child in root.getiterator('preview_size'):
               child.text = self._getFileSize()
           for child in root.getiterator('preview_md5hash'):
               child.text = self._getHash()
           ett.write(self.xmlFile)


       # create a connection to a ftp server
       # and copies the mp4 file and the xml file
       # on the server
       def _uploadToCopra(self):

           os.system(self.uploadCommand)
           #process = Popen(self.uploadCommand)


       # the main function of the program
       # called via start from a Thread Object
       def run(self):

           # the command which will be send to the commando shell
           # for further adjustments see ffmpeg help with ffmpeg.exe -h
           FinalCommand = self.ffmpegLocation + " -r "+ self.framerate + " -i " + self.inputPath + " -an -strict experimental -s hd720 -vcodec libx264 -preset slow -profile:v baseline -level 31 -refs 1 -maxrate 6M -bufsize 10M -vb 6M -threads 0 -g 8 -r " + self.framerate + " " + self.outputfileName + ".mp4 -y"
           FinalCommandList = FinalCommand.split(" ")


           # calling the program
           print "Start ffmpeg convertion"

           outInfo = os.path.normpath("C:\\Users\\sarender\\Desktop\\stdoutFFMPEG.txt")
           outError = os.path.normpath("C:\\Users\\sarender\\Desktop\\stderrFFMPEG.txt")
           stdoutFile = open(outInfo,"w")
           stderrFile = open(outError,"w")

           handle = subp.check_all(FinalCommandList,stdout = stdoutFile,stderr = stderrFile)
           handle.communicate()
           stdoutFile.close()
           stderrFile.close()
           print "Convertion from ffmpeg done"

           # fill the xml file with the missing data
           # - preview file size
           # - preview md5hash
           self._setPreviewDataToXML()
           self._uploadToCopra()
           print "---------------------------------->FINISHED------------------------------------------------------>"


       # Creates a callable Thread for the Copra Upload.
       # start is calling the run method which will start the Uploading

    and the main start :

       if "$(RenderSet.writenode)" == "PREVIEW":
           print "---------------------------------->Initializing Script------------------------------------------------------>"
           process = CopraUpload()
           process.start()

    What happens :

    The script starts after the rendering and ffmpeg converts the image sequence and creates an mp4. But it stops after that. It does not print "Conversion from ffmpeg complet". Just stops the script.

    It actually should create the Thread converting with ffmpeg and wait until it finishes. After it should write some stuff in an xml file and upload both to the server.

    Do I miss something ? Is subprocess within a thread not the way to go ? But I need a Thread because I can not deadlock the render management server.