Recherche avancée

Médias (1)

Mot : - Tags -/bug

Autres articles (44)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

  • 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

Sur d’autres sites (10494)

  • ffmpeg Error while filtering : Cannot allocate memory

    7 juillet 2017, par Andres MERE

    My workstation seems to have plenty of memory (and everything). When I am trying to run ffmpeg as follows :

    /usr/local/bin/ffmpeg \
       -loglevel debug \
       -i "A066C002_170619NU_CANON.mov" \
       -filter_complex "[0:0] [0:2] amerge, aformat=sample_fmts=s16:channel_layouts=stereo [a]" \
       -map "[a]" \
       -map 0:5 \
       -c:a libfdk_aac \
       -vbr 3 \
       -vcodec libx264 \
       -profile:v baseline \
       -level 3.0 \
       -vf scale=1280:720 \
       -pix_fmt yuv420p \
       -crf 20 \
       -metadata title="Test movie" \
       -movflags +faststart \
       -y \
       "A066C002_170619NU_CANON.mp4"

    It fails with "Error while filtering : Cannot allocate memory".

    ffmpeg version N-86721-gf605b56-am Copyright (c) 2000-2017 the FFmpeg developers
         built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
         configuration: --extra-version=am --enable-gpl --enable-libfdk-aac --enable-libsoxr --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-shared
         libavutil      55. 67.100 / 55. 67.100
         libavcodec     57.100.103 / 57.100.103
         libavformat    57. 75.100 / 57. 75.100
         libavdevice    57.  7.100 / 57.  7.100
         libavfilter     6. 94.100 /  6. 94.100
         libswscale      4.  7.101 /  4.  7.101
         libswresample   2.  8.100 /  2.  8.100
         libpostproc    54.  6.100 / 54.  6.100
       Splitting the commandline.
       Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
       Reading option '-i' ... matched as input url with argument 'A066C002_170619NU_CANON.mov'.
       Reading option '-filter_complex' ... matched as option 'filter_complex' (create a complex filtergraph) with argument '[0:0] [0:2] amerge, aformat=sample_fmts=s16:channel_layouts=stereo [a]'.
       Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '[a]'.
       Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:5'.
       Reading option '-c:a' ... matched as option 'c' (codec name) with argument 'libfdk_aac'.
       Reading option '-vbr' ... matched as AVOption 'vbr' with argument '3'.
       Reading option '-vcodec' ... matched as option 'vcodec' (force video codec ('copy' to copy stream)) with argument 'libx264'.
       Reading option '-profile:v' ... matched as option 'profile' (set profile) with argument 'baseline'.
       Reading option '-level' ... matched as AVOption 'level' with argument '3.0'.
       Reading option '-vf' ... matched as option 'vf' (set video filters) with argument 'scale=1280:720'.
       Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'yuv420p'.
       Reading option '-crf' ... matched as AVOption 'crf' with argument '20'.
       Reading option '-metadata' ... matched as option 'metadata' (add metadata) with argument 'title=Test movie'.
       Reading option '-movflags' ... matched as AVOption 'movflags' with argument '+faststart'.
       Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
       Reading option 'A066C002_170619NU_CANON.mp4' ... matched as output url.
       Finished splitting the commandline.
       Parsing a group of options: global .
       Applying option loglevel (set logging level) with argument debug.
       Applying option filter_complex (create a complex filtergraph) with argument [0:0] [0:2] amerge, aformat=sample_fmts=s16:channel_layouts=stereo [a].
       Applying option y (overwrite output files) with argument 1.
       Successfully parsed a group of options.
       Parsing a group of options: input url A066C002_170619NU_CANON.mov.
       Successfully parsed a group of options.
       Opening an input file: A066C002_170619NU_CANON.mov.
       [NULL @ 0x1c4f920] Opening 'A066C002_170619NU_CANON.mov' for reading
       [file @ 0x1c4ffc0] Setting default whitelist 'file,crypto'
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 0, edit list 0 - media time: 0, duration: 129254400
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 1, edit list 0 - media time: 0, duration: 129254400
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 2, edit list 0 - media time: 0, duration: 129254400
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 3, edit list 0 - media time: 0, duration: 129254400
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 4, edit list 0 - media time: 0, duration: 1
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 5, edit list 0 - media time: 0, duration: 67320
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Before avformat_find_stream_info() pos: 59339926200 bytes read:760258 seeks:3 nb_streams:6
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] All info found
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] After avformat_find_stream_info() pos: 1180516 bytes read:1945622 seeks:4 frames:144
       Guessed Channel Layout for Input Stream #0.0 : mono
       Guessed Channel Layout for Input Stream #0.1 : mono
       Guessed Channel Layout for Input Stream #0.2 : mono
       Guessed Channel Layout for Input Stream #0.3 : mono
       Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'A066C002_170619NU_CANON.mov':
         Metadata:
           creation_time   : 2017-06-19T10:12:13.000000Z
           com.apple.quicktime.creationdate: 2017-06-19T13:12:13+0300
           com.apple.proapps.manufacturer: CANON
           com.apple.quicktime.make: CANON
           com.apple.proapps.mio.cameraName: EOS C300 Mark II
           com.apple.proapps.cameraname: EOS C300 Mark II
           com.apple.quicktime.model: EOS C300 Mark II
           com.apple.quicktime.camera.identifier: 060e2b34-0401-010d-0e15-0056454f0200
           com.divergentmedia.editready.timecodeStart: 05:45:28:08
           com.divergentmedia.editready.sonyXDCamTC: 05:45:28:08
           com.divergentmedia.editReady.version: EditReady 1.4.9, 798
           com.apple.proapps.studio.metadataFieldDominanceOverride: 1
           date            : 2017-06-19T13:12:13+0300
           date-eng        : 2017-06-19T13:12:13+0300
           make            : CANON
           make-eng        : CANON
           model           : EOS C300 Mark II
           model-eng       : EOS C300 Mark II
           timecode        : 05:45:28:08
         Duration: 00:44:52.80, start: 0.000000, bitrate: 176292 kb/s
           Stream #0:0(eng), 47, 1/48000: Audio: pcm_s16le (lpcm / 0x6D63706C), 48000 Hz, mono, s16, 768 kb/s (default)
           Metadata:
             creation_time   : 2017-06-19T10:12:13.000000Z
             handler_name    : Apple Alias Data Handler
           Stream #0:1(eng), 47, 1/48000: Audio: pcm_s16le (lpcm / 0x6D63706C), 48000 Hz, mono, s16, 768 kb/s (default)
           Metadata:
             creation_time   : 2017-06-19T10:12:13.000000Z
             handler_name    : Apple Alias Data Handler
           Stream #0:2(eng), 47, 1/48000: Audio: pcm_s16le (lpcm / 0x6D63706C), 48000 Hz, mono, s16, 768 kb/s (default)
           Metadata:
             creation_time   : 2017-06-19T10:12:13.000000Z
             handler_name    : Apple Alias Data Handler
           Stream #0:3(eng), 1, 1/48000: Audio: pcm_s16le (lpcm / 0x6D63706C), 48000 Hz, mono, s16, 768 kb/s (default)
           Metadata:
             creation_time   : 2017-06-19T10:12:13.000000Z
             handler_name    : Apple Alias Data Handler
           Stream #0:4(eng), 1, 1/25: Data: none (tmcd / 0x64636D74), 0/1, 0 kb/s (default)
           Metadata:
             creation_time   : 2017-06-19T10:12:13.000000Z
             handler_name    : Apple Alias Data Handler
             timecode        : 05:45:28:08
           Stream #0:5(eng), 1, 1/25: Video: prores, 1 reference frame (apch / 0x68637061), yuv422p10le(bt709, progressive), 1920x1080, 0/1, 173217 kb/s, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 25 tbn, 25 tbc (default)
           Metadata:
             creation_time   : 2017-06-21T11:52:58.000000Z
             handler_name    : Apple Alias Data Handler
             encoder         : Apple ProRes 422 (HQ)
       Successfully opened the file.
       detected 16 logical cores
       [Parsed_aformat_1 @ 0x1c71a60] Setting 'sample_fmts' to value 's16'
       [Parsed_aformat_1 @ 0x1c71a60] Setting 'channel_layouts' to value 'stereo'
       Parsing a group of options: output url A066C002_170619NU_CANON.mp4.
       Applying option map (set input stream mapping) with argument [a].
       Applying option map (set input stream mapping) with argument 0:5.
       Applying option c:a (codec name) with argument libfdk_aac.
       Applying option vcodec (force video codec ('copy' to copy stream)) with argument libx264.
       Applying option profile:v (set profile) with argument baseline.
       Applying option vf (set video filters) with argument scale=1280:720.
       Applying option pix_fmt (set pixel format) with argument yuv420p.
       Applying option metadata (add metadata) with argument title=Test movie.
       Successfully parsed a group of options.
       Opening an output file: A066C002_170619NU_CANON.mp4.
       [file @ 0x1d4fe40] Setting default whitelist 'file,crypto'
       Successfully opened the file.
       Stream mapping:
         Stream #0:0 (pcm_s16le) -> amerge:in0 (graph 0)
         Stream #0:2 (pcm_s16le) -> amerge:in1 (graph 0)
         aformat (graph 0) -> Stream #0:0 (libfdk_aac)
         Stream #0:5 -> #0:1 (prores (native) -> h264 (libx264))
       Press [q] to stop, [?] for help
       cur_dts is invalid (this is harmless if it occurs once at the start per stream)
           Last message repeated 1 times
       [Parsed_scale_0 @ 0x2397e60] Setting 'w' to value '1280'
       [Parsed_scale_0 @ 0x2397e60] Setting 'h' to value '720'
       [Parsed_scale_0 @ 0x2397e60] Setting 'flags' to value 'bicubic'
       [Parsed_scale_0 @ 0x2397e60] w:1280 h:720 flags:'bicubic' interl:0
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'video_size' to value '1920x1080'
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'pix_fmt' to value '74'
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'time_base' to value '1/25'
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'pixel_aspect' to value '1/1'
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'sws_param' to value 'flags=2'
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'frame_rate' to value '25/1'
       [graph 1 input from stream 0:5 @ 0x23984c0] w:1920 h:1080 pixfmt:yuv422p10le tb:1/25 fr:25/1 sar:1/1 sws_param:flags=2
       [format @ 0x2399240] compat: called with args=[yuv420p]
       [format @ 0x2399240] Setting 'pix_fmts' to value 'yuv420p'
       [AVFilterGraph @ 0x1d517e0] query_formats: 4 queried, 3 merged, 0 already done, 0 delayed
       [Parsed_scale_0 @ 0x2397e60] w:1920 h:1080 fmt:yuv422p10le sar:1/1 -> w:1280 h:720 fmt:yuv420p sar:1/1 flags:0x4
       [libx264 @ 0x1d4f1a0] using mv_range_thread = 24
       [libx264 @ 0x1d4f1a0] using SAR=1/1
       [libx264 @ 0x1d4f1a0] frame MB size (80x45) > level limit (1620)
       [libx264 @ 0x1d4f1a0] MB rate (90000) > level limit (40500)
       [libx264 @ 0x1d4f1a0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
       [libx264 @ 0x1d4f1a0] profile Constrained Baseline, level 3.0
       [libx264 @ 0x1d4f1a0] 264 - core 152 r2851 ba24899 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=0 ref=2 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=22 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
       cur_dts is invalid (this is harmless if it occurs once at the start per stream)
           Last message repeated 94 times
       [Parsed_aformat_1 @ 0x2559500] Setting 'sample_fmts' to value 's16'
       [Parsed_aformat_1 @ 0x2559500] Setting 'channel_layouts' to value 'stereo'
       [graph_0_in_0_0 @ 0x257c7c0] Setting 'time_base' to value '1/48000'
       [graph_0_in_0_0 @ 0x257c7c0] Setting 'sample_rate' to value '48000'
       [graph_0_in_0_0 @ 0x257c7c0] Setting 'sample_fmt' to value 's16'
       [graph_0_in_0_0 @ 0x257c7c0] Setting 'channel_layout' to value '0x4'
       [graph_0_in_0_0 @ 0x257c7c0] tb:1/48000 samplefmt:s16 samplerate:48000 chlayout:0x4
       [graph_0_in_0_2 @ 0x25820a0] Setting 'time_base' to value '1/48000'
       [graph_0_in_0_2 @ 0x25820a0] Setting 'sample_rate' to value '48000'
       [graph_0_in_0_2 @ 0x25820a0] Setting 'sample_fmt' to value 's16'
       [graph_0_in_0_2 @ 0x25820a0] Setting 'channel_layout' to value '0x4'
       [graph_0_in_0_2 @ 0x25820a0] tb:1/48000 samplefmt:s16 samplerate:48000 chlayout:0x4
       [format_out_0_0 @ 0x2580ce0] Setting 'sample_fmts' to value 's16'
       [format_out_0_0 @ 0x2580ce0] Setting 'sample_rates' to value '96000|88200|64000|48000|44100|32000|24000|22050|16000|12000|11025|8000'
       [format_out_0_0 @ 0x2580ce0] Setting 'channel_layouts' to value '0x4|0x3|0x7|0x107|0x37|0x3f|0xff|0x63f'
       [Parsed_amerge_0 @ 0x1c6edc0] No channel layout for input 1
       [AVFilterGraph @ 0x1c8abc0] query_formats: 5 queried, 6 merged, 0 already done, 9 delayed
       [AVFilterGraph @ 0x1c8abc0] query_formats not finished
       [Parsed_amerge_0 @ 0x1c6edc0] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
       [AVFilterGraph @ 0x1c8abc0] query_formats: 1 queried, 9 merged, 6 already done, 0 delayed
       [Parsed_amerge_0 @ 0x1c6edc0] in0:mono + in1:mono -> out:stereo
       [libfdk_aac @ 0x1d4e300] Note, the VBR setting is unsupported and only works with some parameter combinations
       Output #0, mp4, to 'A066C002_170619NU_CANON.mp4':
         Metadata:
           timecode        : 05:45:28:08
           com.apple.quicktime.creationdate: 2017-06-19T13:12:13+0300
           com.apple.proapps.manufacturer: CANON
           com.apple.quicktime.make: CANON
           com.apple.proapps.mio.cameraName: EOS C300 Mark II
           com.apple.proapps.cameraname: EOS C300 Mark II
           com.apple.quicktime.model: EOS C300 Mark II
           com.apple.quicktime.camera.identifier: 060e2b34-0401-010d-0e15-0056454f0200
           com.divergentmedia.editready.timecodeStart: 05:45:28:08
           com.divergentmedia.editready.sonyXDCamTC: 05:45:28:08
           com.divergentmedia.editReady.version: EditReady 1.4.9, 798
           com.apple.proapps.studio.metadataFieldDominanceOverride: 1
           date            : 2017-06-19T13:12:13+0300
           date-eng        : 2017-06-19T13:12:13+0300
           make            : CANON
           make-eng        : CANON
           model           : EOS C300 Mark II
           model-eng       : EOS C300 Mark II
           title           : Test movie
           encoder         : Lavf57.75.100
           Stream #0:0, 0, 1/48000: Audio: aac (libfdk_aac) (mp4a / 0x6134706D), 48000 Hz, stereo, s16, delay 2048 (default)
           Metadata:
             encoder         : Lavc57.100.103 libfdk_aac
           Stream #0:1(eng), 0, 1/12800: Video: h264 (libx264), 1 reference frame (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 0/1, q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
           Metadata:
             creation_time   : 2017-06-21T11:52:58.000000Z
             handler_name    : Apple Alias Data Handler
             encoder         : Lavc57.100.103 libx264
           Side data:
             cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
       cur_dts is invalid (this is harmless if it occurs once at the start per stream)
           Last message repeated 2 times
       Clipping frame in rate conversion by 0.000008
       cur_dts is invalid (this is harmless if it occurs once at the start per stream)
           Last message repeated 201 times
       cur_dts is invalid (this is harmless if it occurs once at the start per stream) 0x    
           Last message repeated 157 times
       cur_dts is invalid (this is harmless if it occurs once at the start per stream) 0x    
       [libx264 @ 0x1d4f1a0] frame=   0 QP=19.02 NAL=3 Slice:I Poc:0   I:3600 P:0    SKIP:0    size=49899 bytes
       Error while filtering: Cannot allocate memory
       [libx264 @ 0x1d4f1a0] frame=   1 QP=19.20 NAL=2 Slice:P Poc:2   I:14   P:2118 SKIP:1468 size=6808 bytes
       [libx264 @ 0x1d4f1a0] frame=   2 QP=18.86 NAL=2 Slice:P Poc:4   I:15   P:2339 SKIP:1246 size=7088 bytes
       [libx264 @ 0x1d4f1a0] frame=   3 QP=19.08 NAL=2 Slice:P Poc:6   I:9    P:2449 SKIP:1142 size=7341 bytes
       [libx264 @ 0x1d4f1a0] frame=   4 QP=18.92 NAL=2 Slice:P Poc:8   I:5    P:2482 SKIP:1113 size=7725 bytes
       [libx264 @ 0x1d4f1a0] frame=   5 QP=18.73 NAL=2 Slice:P Poc:10  I:6    P:2100 SKIP:1494 size=6831 bytes
       [libx264 @ 0x1d4f1a0] frame=   6 QP=18.73 NAL=2 Slice:P Poc:12  I:4    P:2492 SKIP:1104 size=8298 bytes
       [libx264 @ 0x1d4f1a0] frame=   7 QP=18.52 NAL=2 Slice:P Poc:14  I:1    P:2397 SKIP:1202 size=7250 bytes
       [libx264 @ 0x1d4f1a0] frame=   8 QP=18.51 NAL=2 Slice:P Poc:16  I:7    P:1523 SKIP:2070 size=5344 bytes
       [libx264 @ 0x1d4f1a0] frame=   9 QP=18.51 NAL=2 Slice:P Poc:18  I:6    P:2398 SKIP:1196 size=7865 bytes
       [libx264 @ 0x1d4f1a0] frame=  10 QP=18.58 NAL=2 Slice:P Poc:20  I:1    P:1840 SKIP:1759 size=6451 bytes
       [libx264 @ 0x1d4f1a0] frame=  11 QP=18.58 NAL=2 Slice:P Poc:22  I:5    P:1764 SKIP:1831 size=6159 bytes
       [libx264 @ 0x1d4f1a0] frame=  12 QP=18.52 NAL=2 Slice:P Poc:24  I:3    P:2421 SKIP:1176 size=8151 bytes
       [libx264 @ 0x1d4f1a0] frame=  13 QP=18.51 NAL=2 Slice:P Poc:26  I:1    P:1892 SKIP:1707 size=6476 bytes
       [libx264 @ 0x1d4f1a0] frame=  14 QP=18.41 NAL=2 Slice:P Poc:28  I:3    P:1919 SKIP:1678 size=6431 bytes
       [libx264 @ 0x1d4f1a0] frame=  15 QP=18.48 NAL=2 Slice:P Poc:30  I:1    P:1255 SKIP:2344 size=4060 bytes
       [libx264 @ 0x1d4f1a0] frame=  16 QP=18.79 NAL=2 Slice:P Poc:32  I:2    P:1373 SKIP:2225 size=4398 bytes
       [libx264 @ 0x1d4f1a0] frame=  17 QP=18.77 NAL=2 Slice:P Poc:34  I:2    P:1459 SKIP:2139 size=4480 bytes
       [libx264 @ 0x1d4f1a0] frame=  18 QP=19.01 NAL=2 Slice:P Poc:36  I:7    P:1658 SKIP:1935 size=5003 bytes
       [libx264 @ 0x1d4f1a0] scene cut at 48 Icost:227110 Pcost:199261 ratio:0.1226 bias:0.1307 gop:48 (imb:3134 pmb:220)
       [libx264 @ 0x1d4f1a0] frame=  19 QP=18.95 NAL=2 Slice:P Poc:38  I:0    P:2461 SKIP:1139 size=7169 bytes
       [libx264 @ 0x1d4f1a0] frame=  20 QP=19.01 NAL=2 Slice:P Poc:40  I:1    P:2118 SKIP:1481 size=6048 bytes
       [libx264 @ 0x1d4f1a0] frame=  21 QP=19.04 NAL=2 Slice:P Poc:42  I:0    P:2114 SKIP:1486 size=5838 bytes
       [libx264 @ 0x1d4f1a0] frame=  22 QP=18.97 NAL=2 Slice:P Poc:44  I:3    P:2277 SKIP:1320 size=5952 bytes
       [libx264 @ 0x1d4f1a0] frame=  23 QP=19.12 NAL=2 Slice:P Poc:46  I:0    P:1658 SKIP:1942 size=4813 bytes
       [libx264 @ 0x1d4f1a0] frame=  24 QP=19.33 NAL=2 Slice:P Poc:48  I:0    P:1926 SKIP:1674 size=5503 bytes
       [libx264 @ 0x1d4f1a0] frame=  25 QP=19.25 NAL=2 Slice:P Poc:50  I:0    P:2470 SKIP:1130 size=6478 bytes
       [libx264 @ 0x1d4f1a0] frame=  26 QP=19.21 NAL=2 Slice:P Poc:52  I:0    P:2589 SKIP:1011 size=6985 bytes
       [libx264 @ 0x1d4f1a0] frame=  27 QP=19.12 NAL=2 Slice:P Poc:54  I:0    P:2312 SKIP:1288 size=6381 bytes
       [libx264 @ 0x1d4f1a0] frame=  28 QP=19.20 NAL=2 Slice:P Poc:56  I:2    P:2532 SKIP:1066 size=7296 bytes
       [libx264 @ 0x1d4f1a0] frame=  29 QP=19.01 NAL=2 Slice:P Poc:58  I:0    P:2611 SKIP:989  size=8186 bytes
       [libx264 @ 0x1d4f1a0] frame=  30 QP=18.95 NAL=2 Slice:P Poc:60  I:0    P:2582 SKIP:1018 size=7610 bytes
       [libx264 @ 0x1d4f1a0] frame=  31 QP=19.02 NAL=2 Slice:P Poc:62  I:2    P:2620 SKIP:978  size=8077 bytes
       [libx264 @ 0x1d4f1a0] frame=  32 QP=19.09 NAL=2 Slice:P Poc:64  I:1    P:1989 SKIP:1610 size=6214 bytes
       [libx264 @ 0x1d4f1a0] frame=  33 QP=19.09 NAL=2 Slice:P Poc:66  I:0    P:2483 SKIP:1117 size=7027 bytes
       [libx264 @ 0x1d4f1a0] frame=  34 QP=19.17 NAL=2 Slice:P Poc:68  I:0    P:2477 SKIP:1123 size=6833 bytes
       [libx264 @ 0x1d4f1a0] frame=  35 QP=19.07 NAL=2 Slice:P Poc:70  I:1    P:2373 SKIP:1226 size=6915 bytes
       [libx264 @ 0x1d4f1a0] frame=  36 QP=19.28 NAL=2 Slice:P Poc:72  I:3    P:2400 SKIP:1197 size=6975 bytes
       [libx264 @ 0x1d4f1a0] frame=  37 QP=19.21 NAL=2 Slice:P Poc:74  I:1    P:2643 SKIP:956  size=7505 bytes
       [libx264 @ 0x1d4f1a0] frame=  38 QP=19.40 NAL=2 Slice:P Poc:76  I:0    P:2289 SKIP:1311 size=6682 bytes
       [libx264 @ 0x1d4f1a0] frame=  39 QP=19.52 NAL=2 Slice:P Poc:78  I:1    P:2074 SKIP:1525 size=5823 bytes
       [libx264 @ 0x1d4f1a0] frame=  40 QP=19.72 NAL=2 Slice:P Poc:80  I:2    P:2420 SKIP:1178 size=6552 bytes
       [libx264 @ 0x1d4f1a0] frame=  41 QP=19.99 NAL=2 Slice:P Poc:82  I:274  P:2019 SKIP:1307 size=7398 bytes
       [libx264 @ 0x1d4f1a0] frame=  42 QP=19.77 NAL=2 Slice:P Poc:84  I:545  P:1946 SKIP:1109 size=7933 bytes
       [libx264 @ 0x1d4f1a0] frame=  43 QP=19.52 NAL=2 Slice:P Poc:86  I:523  P:1969 SKIP:1108 size=7596 bytes
       [libx264 @ 0x1d4f1a0] frame=  44 QP=19.25 NAL=2 Slice:P Poc:88  I:649  P:1303 SKIP:1648 size=6070 bytes
       [libx264 @ 0x1d4f1a0] frame=  45 QP=18.80 NAL=2 Slice:P Poc:90  I:949  P:1115 SKIP:1536 size=6608 bytes
       [libx264 @ 0x1d4f1a0] frame=  46 QP=18.51 NAL=2 Slice:P Poc:92  I:915  P:1141 SKIP:1544 size=6499 bytes
       [libx264 @ 0x1d4f1a0] frame=  47 QP=18.38 NAL=2 Slice:P Poc:94  I:882  P:1071 SKIP:1647 size=6326 bytes
       [libx264 @ 0x1d4f1a0] frame=  48 QP=15.38 NAL=3 Slice:I Poc:0   I:3600 P:0    SKIP:0    size=15254 bytes
       [libx264 @ 0x1d4f1a0] frame=  49 QP=18.47 NAL=2 Slice:P Poc:2   I:870  P:1178 SKIP:1552 size=9327 bytes
       [libx264 @ 0x1d4f1a0] frame=  50 QP=18.35 NAL=2 Slice:P Poc:4   I:691  P:1606 SKIP:1303 size=9056 bytes
       [libx264 @ 0x1d4f1a0] frame=  51 QP=18.56 NAL=2 Slice:P Poc:6   I:567  P:1697 SKIP:1336 size=9923 bytes
       [libx264 @ 0x1d4f1a0] frame=  52 QP=18.72 NAL=2 Slice:P Poc:8   I:500  P:1725 SKIP:1375 size=10632 bytes
       [libx264 @ 0x1d4f1a0] frame=  53 QP=18.46 NAL=2 Slice:P Poc:10  I:537  P:1789 SKIP:1274 size=9973 bytes
       [libx264 @ 0x1d4f1a0] frame=  54 QP=18.55 NAL=2 Slice:P Poc:12  I:478  P:1916 SKIP:1206 size=10196 bytes
       [libx264 @ 0x1d4f1a0] frame=  55 QP=18.68 NAL=2 Slice:P Poc:14  I:446  P:2027 SKIP:1127 size=10172 bytes
       [libx264 @ 0x1d4f1a0] frame=  56 QP=19.00 NAL=2 Slice:P Poc:16  I:284  P:2138 SKIP:1178 size=9705 bytes
       [libx264 @ 0x1d4f1a0] frame=  57 QP=19.10 NAL=2 Slice:P Poc:18  I:244  P:2116 SKIP:1240 size=9518 bytes
       [libx264 @ 0x1d4f1a0] frame=  58 QP=19.39 NAL=2 Slice:P Poc:20  I:239  P:2231 SKIP:1130 size=8953 bytes
       [libx264 @ 0x1d4f1a0] frame=  59 QP=19.16 NAL=2 Slice:P Poc:22  I:178  P:2379 SKIP:1043 size=9059 bytes
       [libx264 @ 0x1d4f1a0] frame=  60 QP=19.28 NAL=2 Slice:P Poc:24  I:58   P:2329 SKIP:1213 size=8257 bytes
       [libx264 @ 0x1d4f1a0] frame=  61 QP=19.21 NAL=2 Slice:P Poc:26  I:34   P:2231 SKIP:1335 size=6689 bytes
       [libx264 @ 0x1d4f1a0] frame=  62 QP=19.55 NAL=2 Slice:P Poc:28  I:14   P:2219 SKIP:1367 size=6164 bytes
       [libx264 @ 0x1d4f1a0] frame=  63 QP=20.04 NAL=2 Slice:P Poc:30  I:8    P:1836 SKIP:1756 size=4318 bytes
       [mp4 @ 0x1d4c880] Starting second pass: moving the moov atom to the beginning of the file
       [mp4 @ 0x1d4c880] Opening 'A066C002_170619NU_CANON.mp4' for reading
       [file @ 0xa01a460] Setting default whitelist 'file,crypto'
       [AVIOContext @ 0x6b95260] Statistics: 509968 bytes read, 0 seeks
       frame=   64 fps= 48 q=-1.0 Lsize=     500kB time=00:00:02.52 bitrate=1625.5kbits/s speed=1.88x    
       video:497kB audio:1kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.417128%
       Input file #0 (A066C002_170619NU_CANON.mov):
         Input stream #0:0 (audio): 141 packets read (288000 bytes); 141 frames decoded (144000 samples);
         Input stream #0:1 (audio): 47 packets read (96000 bytes);
         Input stream #0:2 (audio): 141 packets read (288000 bytes); 141 frames decoded (144000 samples);
         Input stream #0:3 (audio): 1 packets read (2048 bytes);
         Input stream #0:4 (data): 1 packets read (4 bytes);
         Input stream #0:5 (video): 64 packets read (59520416 bytes); 64 frames decoded;
         Total: 395 packets (60194468 bytes) demuxed
       Output file #0 (A066C002_170619NU_CANON.mp4):
         Output stream #0:0 (audio): 1 frames encoded (1024 samples); 3 packets muxed (740 bytes);
         Output stream #0:1 (video): 64 frames encoded; 64 packets muxed (509175 bytes);
         Total: 67 packets (509915 bytes) muxed
       346 frames successfully decoded, 0 decoding errors
       [AVIOContext @ 0x1c71880] Statistics: 4 seeks, 7 writeouts
       [libx264 @ 0x1d4f1a0] frame I:2     Avg QP:17.20  size: 32576
       [libx264 @ 0x1d4f1a0] frame P:62    Avg QP:18.99  size:  7152
       [libx264 @ 0x1d4f1a0] mb I  I16..4: 49.2%  0.0% 50.8%
       [libx264 @ 0x1d4f1a0] mb P  I16..4:  3.5%  0.0%  1.0%  P16..4: 45.1%  8.4%  3.5%  0.0%  0.0%    skip:38.5%
       [libx264 @ 0x1d4f1a0] coded y,uvDC,uvAC intra: 30.7% 30.5% 4.8% inter: 7.0% 19.1% 0.3%
       [libx264 @ 0x1d4f1a0] i16 v,h,dc,p: 47% 21%  9% 23%
       [libx264 @ 0x1d4f1a0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 37% 18% 18%  5%  6%  4%  5%  4%  3%
       [libx264 @ 0x1d4f1a0] i8c dc,h,v,p: 72% 11% 15%  2%
       [libx264 @ 0x1d4f1a0] ref P L0: 63.8% 36.2%
       [libx264 @ 0x1d4f1a0] kb/s:1589.21
       [AVIOContext @ 0x1c583a0] Statistics: 61656934 bytes read, 59 seeks

    I happen to be absolute beginner (at least in ffmpeg). What went wrong ?

    Thanks ! Andres Mere

  • ADD Image overlay to ffmpeg video stream

    1er juillet 2017, par Chris

    I am new to ffmpeg and want to add an HUD to the video stream, so a few questions.

    1. What file do I need to edit.
    2. What do I need to do to achieve this.

    Thanks in advance. Also I am VERY new to all of this, I will need instructions step by step

    I saw other questions saying to add this : ffmpeg -n -i video.mp4 -i logo.png -filter_complex "[0:v]setsar=sar=1[v];[v][1]blend=all_mode='overlay':all_opacity=0.7" -movflags +faststart tmb/video.mp4

    But I dont know where to put it, i entered it in the terminal and got this :

    pi@raspberrypi:~ $ ffmpeg -n -i video.mp4 -i logo.png -filter_complex "[0:v]setsar=sar=1[v];[v][1]blend=all_mode='overlay':all_opacity=0.7" -movflags +faststart tmb/video.mp4
    ffmpeg version N-86215-gb5228e4 Copyright (c) 2000-2017 the FFmpeg developers
     built with gcc 4.9.2 (Raspbian 4.9.2-10)
     configuration: --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree --extra-libs=-ldl
     libavutil      55. 63.100 / 55. 63.100
     libavcodec     57. 96.101 / 57. 96.101
     libavformat    57. 72.101 / 57. 72.101
     libavdevice    57.  7.100 / 57.  7.100
     libavfilter     6. 90.100 /  6. 90.100
     libswscale      4.  7.101 /  4.  7.101
     libswresample   2.  8.100 /  2.  8.100
     libpostproc    54.  6.100 / 54.  6.100
    video.mp4: No such file or directory

    I dont understand what i am supposed to do with the video.mp4 ?

    HERE IS THE SCRIPT THAT SENDS THE VIDEO.

    import subprocess
    import shlex
    import re
    import os
    import time
    import urllib2
    import platform
    import json
    import sys
    import base64
    import random


    import argparse

    parser = argparse.ArgumentParser(description='robot control')
    parser.add_argument('camera_id')
    parser.add_argument('video_device_number', default=0, type=int)
    parser.add_argument('--kbps', default=450, type=int)
    parser.add_argument('--brightness', default=75, type=int, help='camera brightness')
    parser.add_argument('--contrast', default=75, type=int, help='camera contrast')
    parser.add_argument('--saturation', default=15, type=int, help='camera saturation')
    parser.add_argument('--rotate180', default=False, type=bool, help='rotate image 180 degrees')
    parser.add_argument('--env', default="prod")



    args = parser.parse_args()



    server = "runmyrobot.com"
    #server = "52.52.213.92"


    from socketIO_client import SocketIO, LoggingNamespace

    # enable raspicam driver in case a raspicam is being used
    os.system("sudo modprobe bcm2835-v4l2")


    if args.env == "dev":
       print "using dev port 8122"
       port = 8122
    elif args.env == "prod":
       print "using prod port 8022"
       port = 8022
    else:
       print "invalid environment"
       sys.exit(0)


    print "initializing socket io"
    print "server:", server
    print "port:", port
    socketIO = SocketIO(server, port, LoggingNamespace)
    print "finished initializing socket io"

    #ffmpeg -f qtkit -i 0 -f mpeg1video -b 400k -r 30 -s 320x240 http://52.8.81.124:8082/hello/320/240/


    def onHandleCameraCommand(*args):
       #thread.start_new_thread(handle_command, args)
       print args


    socketIO.on('command_to_camera', onHandleCameraCommand)


    def onHandleTakeSnapshotCommand(*args):
       print "taking snapshot"
       inputDeviceID = streamProcessDict['device_answer']
       snapShot(platform.system(), inputDeviceID)
       with open ("snapshot.jpg", 'rb') as f:
           data = f.read()
       print "emit"

       socketIO.emit('snapshot', {'image':base64.b64encode(data)})

    socketIO.on('take_snapshot_command', onHandleTakeSnapshotCommand)


    def randomSleep():
       """A short wait is good for quick recovery, but sometimes a longer delay is needed or it will just keep trying and failing short intervals, like because the system thinks the port is still in use and every retry makes the system think it's still in use. So, this has a high likelihood of picking a short interval, but will pick a long one sometimes."""

       timeToWait = random.choice((0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 5))
       print "sleeping", timeToWait
       time.sleep(timeToWait)



    def getVideoPort():


       url = 'http://%s/get_video_port/%s' % (server, cameraIDAnswer)


       for retryNumber in range(2000):
           try:
               print "GET", url
               response = urllib2.urlopen(url).read()
               break
           except:
               print "could not open url ", url
               time.sleep(2)

       return json.loads(response)['mpeg_stream_port']

    def getAudioPort():


       url = 'http://%s/get_audio_port/%s' % (server, cameraIDAnswer)


       for retryNumber in range(2000):
           try:
               print "GET", url
               response = urllib2.urlopen(url).read()
               break
           except:
               print "could not open url ", url
               time.sleep(2)

       return json.loads(response)['audio_stream_port']



    def runFfmpeg(commandLine):

       print commandLine
       ffmpegProcess = subprocess.Popen(shlex.split(commandLine))
       print "command started"

       return ffmpegProcess



    def handleDarwin(deviceNumber, videoPort, audioPort):


       p = subprocess.Popen(["ffmpeg", "-list_devices", "true", "-f", "qtkit", "-i", "dummy"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

       out, err = p.communicate()

       print err

       deviceAnswer = raw_input("Enter the number of the camera device for your robot from the list above: ")
       commandLine = 'ffmpeg -f qtkit -i %s -f mpeg1video -b 400k -r 30 -s 320x240 http://%s:%s/hello/320/240/' % (deviceAnswer, server, videoPort)

       process = runFfmpeg(commandLine)

       return {'process': process, 'device_answer': deviceAnswer}


    def handleLinux(deviceNumber, videoPort, audioPort):

       print "sleeping to give the camera time to start working"
       randomSleep()
       print "finished sleeping"


       #p = subprocess.Popen(["ffmpeg", "-list_devices", "true", "-f", "qtkit", "-i", "dummy"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
       #out, err = p.communicate()
       #print err


       os.system("v4l2-ctl -c brightness={brightness} -c contrast={contrast} -c saturation={saturation}".format(brightness=args.brightness,
                                                                                                                contrast=args.contrast,
                                                                                                                saturation=args.saturation))


       if deviceNumber is None:
           deviceAnswer = raw_input("Enter the number of the camera device for your robot: ")
       else:
           deviceAnswer = str(deviceNumber)


       #commandLine = '/usr/local/bin/ffmpeg -s 320x240 -f video4linux2 -i /dev/video%s -f mpeg1video -b 1k -r 20 http://runmyrobot.com:%s/hello/320/240/' % (deviceAnswer, videoPort)
       #commandLine = '/usr/local/bin/ffmpeg -s 640x480 -f video4linux2 -i /dev/video%s -f mpeg1video -b 150k -r 20 http://%s:%s/hello/640/480/' % (deviceAnswer, server, videoPort)
       # For new JSMpeg
       #commandLine = '/usr/local/bin/ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video%s -f mpegts -codec:v mpeg1video -s 640x480 -b:v 250k -bf 0 http://%s:%s/hello/640/480/' % (deviceAnswer, server, videoPort) # ClawDaddy
       #commandLine = '/usr/local/bin/ffmpeg -s 1280x720 -f video4linux2 -i /dev/video%s -f mpeg1video -b 1k -r 20 http://runmyrobot.com:%s/hello/1280/720/' % (deviceAnswer, videoPort)


       if args.rotate180:
           rotationOption = "-vf transpose=2,transpose=2"
       else:
           rotationOption = ""

       # video with audio
       videoCommandLine = '/usr/local/bin/ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video%s %s -f mpegts -codec:v mpeg1video -s 640x480 -b:v %dk -bf 0 -muxdelay 0.001 http://%s:%s/hello/640/480/' % (deviceAnswer, rotationOption, args.kbps, server, videoPort)
       audioCommandLine = '/usr/local/bin/ffmpeg -f alsa -ar 44100 -ac 1 -i hw:1 -f mpegts -codec:a mp2 -b:a 32k -muxdelay 0.001 http://%s:%s/hello/640/480/' % (server, audioPort)


       print videoCommandLine
       print audioCommandLine

       videoProcess = runFfmpeg(videoCommandLine)
       audioProcess = runFfmpeg(audioCommandLine)

       return {'video_process': videoProcess, 'audioProcess': audioProcess, 'device_answer': deviceAnswer}



    def handleWindows(deviceNumber, videoPort):

       p = subprocess.Popen(["ffmpeg", "-list_devices", "true", "-f", "dshow", "-i", "dummy"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)


       out, err = p.communicate()
       lines = err.split('\n')

       count = 0

       devices = []

       for line in lines:

           #if "]  \"" in line:
           #    print "line:", line

           m = re.search('.*\\"(.*)\\"', line)
           if m != None:
               #print line
               if m.group(1)[0:1] != '@':
                   print count, m.group(1)
                   devices.append(m.group(1))
                   count += 1


       if deviceNumber is None:
           deviceAnswer = raw_input("Enter the number of the camera device for your robot from the list above: ")
       else:
           deviceAnswer = str(deviceNumber)

       device = devices[int(deviceAnswer)]
       commandLine = 'ffmpeg -s 640x480 -f dshow -i video="%s" -f mpegts -codec:v mpeg1video -b 200k -r 20 http://%s:%s/hello/640/480/' % (device, server, videoPort)


       process = runFfmpeg(commandLine)

       return {'process': process, 'device_answer': device}



    def handleWindowsScreenCapture(deviceNumber, videoPort):

       p = subprocess.Popen(["ffmpeg", "-list_devices", "true", "-f", "dshow", "-i", "dummy"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)


       out, err = p.communicate()

       lines = err.split('\n')

       count = 0

       devices = []

       for line in lines:

           #if "]  \"" in line:
           #    print "line:", line

           m = re.search('.*\\"(.*)\\"', line)
           if m != None:
               #print line
               if m.group(1)[0:1] != '@':
                   print count, m.group(1)
                   devices.append(m.group(1))
                   count += 1


       if deviceNumber is None:
           deviceAnswer = raw_input("Enter the number of the camera device for your robot from the list above: ")
       else:
           deviceAnswer = str(deviceNumber)



       device = devices[int(deviceAnswer)]
       commandLine = 'ffmpeg -f dshow -i video="screen-capture-recorder" -vf "scale=640:480" -f mpeg1video -b 50k -r 20 http://%s:%s/hello/640/480/' % (server, videoPort)

       print "command line:", commandLine

       process = runFfmpeg(commandLine)

       return {'process': process, 'device_answer': device}




    def snapShot(operatingSystem, inputDeviceID, filename="snapshot.jpg"):    

       try:
           os.remove('snapshot.jpg')
       except:
           print "did not remove file"

       commandLineDict = {
           'Darwin': 'ffmpeg -y -f qtkit -i %s -vframes 1 %s' % (inputDeviceID, filename),
           'Linux': '/usr/local/bin/ffmpeg -y -f video4linux2 -i /dev/video%s -vframes 1 -q:v 1000 -vf scale=320:240 %s' % (inputDeviceID, filename),
           'Windows': 'ffmpeg -y -s 320x240 -f dshow -i video="%s" -vframes 1 %s' % (inputDeviceID, filename)}

       print commandLineDict[operatingSystem]
       os.system(commandLineDict[operatingSystem])



    def startVideoCapture():

       videoPort = getVideoPort()
       audioPort = getAudioPort()
       print "video port:", videoPort
       print "audio port:", audioPort

       #if len(sys.argv) >= 3:
       #    deviceNumber = sys.argv[2]
       #else:
       #    deviceNumber = None
       deviceNumber = args.video_device_number

       result = None
       if platform.system() == 'Darwin':
           result = handleDarwin(deviceNumber, videoPort, audioPort)
       elif platform.system() == 'Linux':
           result = handleLinux(deviceNumber, videoPort, audioPort)
       elif platform.system() == 'Windows':
           #result = handleWindowsScreenCapture(deviceNumber, videoPort)
           result = handleWindows(deviceNumber, videoPort, audioPort)
       else:
           print "unknown platform", platform.system()

       return result


    def timeInMilliseconds():
       return int(round(time.time() * 1000))



    def main():

       print "main"

       streamProcessDict = None


       twitterSnapCount = 0

       while True:



           socketIO.emit('send_video_status', {'send_video_process_exists': True,
                                               'camera_id':cameraIDAnswer})


           if streamProcessDict is not None:
               print "stopping previously running ffmpeg (needs to happen if this is not the first iteration)"
               streamProcessDict['process'].kill()

           print "starting process just to get device result" # this should be a separate function so you don't have to do this
           streamProcessDict = startVideoCapture()
           inputDeviceID = streamProcessDict['device_answer']
           print "stopping video capture"
           streamProcessDict['process'].kill()

           #print "sleeping"
           #time.sleep(3)
           #frameCount = int(round(time.time() * 1000))

           videoWithSnapshots = False
           while videoWithSnapshots:

               frameCount = timeInMilliseconds()

               print "taking single frame image"
               snapShot(platform.system(), inputDeviceID, filename="single_frame_image.jpg")

               with open ("single_frame_image.jpg", 'rb') as f:

                   # every so many frames, post a snapshot to twitter
                   #if frameCount % 450 == 0:
                   if frameCount % 6000 == 0:
                           data = f.read()
                           print "emit"
                           socketIO.emit('snapshot', {'frame_count':frameCount, 'image':base64.b64encode(data)})
                   data = f.read()

               print "emit"
               socketIO.emit('single_frame_image', {'frame_count':frameCount, 'image':base64.b64encode(data)})
               time.sleep(0)

               #frameCount += 1


           if False:
            if platform.system() != 'Windows':
               print "taking snapshot"
               snapShot(platform.system(), inputDeviceID)
               with open ("snapshot.jpg", 'rb') as f:
                   data = f.read()
               print "emit"

               # skip sending the first image because it's mostly black, maybe completely black
               #todo: should find out why this black image happens
               if twitterSnapCount > 0:
                   socketIO.emit('snapshot', {'image':base64.b64encode(data)})




           print "starting video capture"
           streamProcessDict = startVideoCapture()


           # This loop counts out a delay that occurs between twitter snapshots.
           # Every 50 seconds, it kills and restarts ffmpeg.
           # Every 40 seconds, it sends a signal to the server indicating status of processes.
           period = 2*60*60 # period in seconds between snaps
           for count in range(period):
               time.sleep(1)

               if count % 20 == 0:
                   socketIO.emit('send_video_status', {'send_video_process_exists': True,
                                                       'camera_id':cameraIDAnswer})

               if count % 40 == 30:
                   print "stopping video capture just in case it has reached a state where it's looping forever, not sending video, and not dying as a process, which can happen"
                   streamProcessDict['video_process'].kill()
                   streamProcessDict['audio_process'].kill()
                   time.sleep(1)

               if count % 80 == 75:
                   print "send status about this process and its child process ffmpeg"
                   ffmpegProcessExists = streamProcessDict['process'].poll() is None
                   socketIO.emit('send_video_status', {'send_video_process_exists': True,
                                                       'ffmpeg_process_exists': ffmpegProcessExists,
                                                       'camera_id':cameraIDAnswer})

               #if count % 190 == 180:
               #    print "reboot system in case the webcam is not working"
               #    os.system("sudo reboot")

               # if the video stream process dies, restart it
               if streamProcessDict['video_process'].poll() is not None or streamProcessDict['audio_process'].poll():
                   # wait before trying to start ffmpeg
                   print "ffmpeg process is dead, waiting before trying to restart"
                   randomSleep()
                   streamProcessDict = startVideoCapture()

           twitterSnapCount += 1

    if __name__ == "__main__":


       #if len(sys.argv) > 1:
       #    cameraIDAnswer = sys.argv[1]
       #else:
       #    cameraIDAnswer = raw_input("Enter the Camera ID for your robot, you can get it by pointing a browser to the runmyrobot server %s: " % server)

       cameraIDAnswer = args.camera_id


       main()

    ERROR :

    ffmpeg -n -f mpegts -i http://54.183.232.63:12221 -i logo.png -filter_complex "[0:v]setsar=sar=1[v];[v][1]blend=all_mode='overlay':all_opacity=0.7" -movflags +faststart tmb/video.mp4
    ffmpeg version N-86215-gb5228e4 Copyright (c) 2000-2017 the FFmpeg developers
     built with gcc 4.9.2 (Raspbian 4.9.2-10)
     configuration: --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree --extra-libs=-ldl
     libavutil      55. 63.100 / 55. 63.100
     libavcodec     57. 96.101 / 57. 96.101
     libavformat    57. 72.101 / 57. 72.101
     libavdevice    57.  7.100 / 57.  7.100
     libavfilter     6. 90.100 /  6. 90.100
     libswscale      4.  7.101 /  4.  7.101
     libswresample   2.  8.100 /  2.  8.100
     libpostproc    54.  6.100 / 54.  6.100
    [mpegts @ 0x1a57390] Could not detect TS packet size, defaulting to non-FEC/DVHS
    http://54.183.232.63:12221: could not find codec parameters
  • Using ffmpeg and ffserver to create a 2x1 live stream fails with unconnected output error

    31 janvier 2021, par weevilknievel

    I want to combine 2 RTSP streams (CCTV cameras) into a horizontal 2x1 strip and convert to webm for use in a HTML5 webpage.

    



    I am able to convert the streams into an mpeg or avi file easily, but as soon as I try to post it to ffserver ffm feed, I hit a wall.

    



    Here is my working ffmpeg command which writes out to a file :

    



    ffmpeg -rtsp_transport tcp -thread_queue_size 12 -i "rtsp://192.168.1.132:554/user=admin&password=mypassword&channel=1&stream=1.sdp" -i "rtsp://192.168.1.132:554/user=admin&password=mypassword&channel=2&stream=1.sdp" -filter_complex "[0:v][1:v] hstack=inputs=2 [v]" -map "[v]" -r 30 output.mpg


    



    It seems the ffmpeg process is outputting two streams and one of them is MPEG ? In the above command I had to put a frame rate "-r 30" into the command otherwise I got an error which said that MPEG 1/2 did not support a framerate of 5/1 ??

    



    As soon as I try and stream to ffserver, I get an error :

    



    ffmpeg -rtsp_transport tcp -thread_queue_size 12 -i "rtsp://192.168.1.132:554/user=admin&password=mypassword&channel=1&stream=1.sdp" -i "rtsp://192.168.1.132:554/user=admin&password=mypassword&channel=2&stream=1.sdp" -filter_complex "[0:v][1:v] hstack=inputs=2 [v]" -map "[v]" -r 30 http://localhost:8090/feed5.ffm


    



    The error I get is "Filter hstack has an unconnected output" :

    



    ffmpeg version N-86111-ga441aa90e8-static http://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 5.4.1 (Debian 5.4.1-8) 20170304
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-5 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg
  libavutil      55. 63.100 / 55. 63.100
  libavcodec     57. 96.101 / 57. 96.101
  libavformat    57. 72.101 / 57. 72.101
  libavdevice    57.  7.100 / 57.  7.100
  libavfilter     6. 89.101 /  6. 89.101
  libswscale      4.  7.101 /  4.  7.101
  libswresample   2.  8.100 /  2.  8.100
  libpostproc    54.  6.100 / 54.  6.100
Input #0, rtsp, from 'rtsp://192.168.1.132:554/user=admin&password=mypassword&channel=1&stream=1.sdp':
  Duration: N/A, start: 0.166667, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuv420p(progressive), 352x288, 6 fps, 6 tbr, 90k tbn, 180k tbc
Input #1, rtsp, from 'rtsp://192.168.1.132:554/user=admin&password=mypassword&channel=2&stream=1.sdp':
  Duration: N/A, start: 0.166667, bitrate: N/A
    Stream #1:0: Video: h264 (High), yuv420p(progressive), 352x288, 6 fps, 6 tbr, 90k tbn, 180k tbc
Filter hstack has an unconnected output


    



    My ffserver conf is very basic :

    



    HTTPPort 8090&#xA;HTTPBindAddress 0.0.0.0&#xA;MaxHTTPConnections 2000&#xA;MaxClients 1000&#xA;MaxBandwidth 100000&#xA;CustomLog -&#xA;&#xA;<feed>&#xA;File /mnt/ramdisk/feed5.ffm&#xA;Truncate&#xA;FileMaxSize 5M&#xA;ACL allow 127.0.0.1&#xA;</feed>&#xA;&#xA;<stream>&#xA;     Format webm&#xA;     Feed feed5.ffm&#xA;     VideoCodec libvpx&#xA;     VideoSize 640x360&#xA;     NoAudio&#xA;   AVOptionVideo quality realtime&#xA;   StartSendOnKey&#xA;   VideoBitRate 140&#xA;</stream>&#xA;&#xA;<stream>&#xA;Format status&#xA;ACL allow localhost&#xA;ACL allow 192.168.0.0 192.168.255.255&#xA;</stream>&#xA;<redirect>&#xA;URL http://www.ffmpeg.org/&#xA;</redirect>&#xA;

    &#xA;&#xA;

    Edit :

    &#xA;&#xA;

    Here is the debug output from the ffmpeg command above :

    &#xA;&#xA;

    ffmpeg -v debug -rtsp_transport tcp -thread_queue_size 12 -i "rtsp://192.168.1.132:554/user=admin&amp;password=mypassword&amp;channel=1&amp;stream=1.sdp" -i "rtsp://192.168.1.132:554/user=admin&amp;password=mypassword&amp;channel=2&amp;stream=1.sdp" -filter_complex "[0:v][1:v] hstack=inputs=2 [v]" -map "[v]" -r 30 http://localhost:8090/feed5.ffm&#xA;ffmpeg version N-86111-ga441aa90e8-static http://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2017 the FFmpeg developers&#xA;  built with gcc 5.4.1 (Debian 5.4.1-8) 20170304&#xA;  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-5 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg&#xA;  libavutil      55. 63.100 / 55. 63.100&#xA;  libavcodec     57. 96.101 / 57. 96.101&#xA;  libavformat    57. 72.101 / 57. 72.101&#xA;  libavdevice    57.  7.100 / 57.  7.100&#xA;  libavfilter     6. 89.101 /  6. 89.101&#xA;  libswscale      4.  7.101 /  4.  7.101&#xA;  libswresample   2.  8.100 /  2.  8.100&#xA;  libpostproc    54.  6.100 / 54.  6.100&#xA;Splitting the commandline.&#xA;Reading option &#x27;-v&#x27; ... matched as option &#x27;v&#x27; (set logging level) with argument &#x27;debug&#x27;.&#xA;Reading option &#x27;-rtsp_transport&#x27; ... matched as AVOption &#x27;rtsp_transport&#x27; with argument &#x27;tcp&#x27;.&#xA;Reading option &#x27;-thread_queue_size&#x27; ... matched as option &#x27;thread_queue_size&#x27; (set the maximum number of queued packets from the demuxer) with argument &#x27;12&#x27;.&#xA;Reading option &#x27;-i&#x27; ... matched as input url with argument &#x27;rtsp://192.168.1.132:554/user=admin&amp;password=mypassword&amp;channel=1&amp;stream=1.sdp&#x27;.&#xA;Reading option &#x27;-i&#x27; ... matched as input url with argument &#x27;rtsp://192.168.1.132:554/user=admin&amp;password=mypassword&amp;channel=2&amp;stream=1.sdp&#x27;.&#xA;Reading option &#x27;-filter_complex&#x27; ... matched as option &#x27;filter_complex&#x27; (create a complex filtergraph) with argument &#x27;[0:v][1:v] hstack=inputs=2 [v]&#x27;.&#xA;Reading option &#x27;-map&#x27; ... matched as option &#x27;map&#x27; (set input stream mapping) with argument &#x27;[v]&#x27;.&#xA;Reading option &#x27;-r&#x27; ... matched as option &#x27;r&#x27; (set frame rate (Hz value, fraction or abbreviation)) with argument &#x27;30&#x27;.&#xA;Reading option &#x27;http://localhost:8090/feed5.ffm&#x27; ... matched as output url.&#xA;Finished splitting the commandline.&#xA;Parsing a group of options: global .&#xA;Applying option v (set logging level) with argument debug.&#xA;Applying option filter_complex (create a complex filtergraph) with argument [0:v][1:v] hstack=inputs=2 [v].&#xA;Successfully parsed a group of options.&#xA;Parsing a group of options: input url rtsp://192.168.1.132:554/user=admin&amp;password=mypassword&amp;channel=1&amp;stream=1.sdp.&#xA;Applying option thread_queue_size (set the maximum number of queued packets from the demuxer) with argument 12.&#xA;Successfully parsed a group of options.&#xA;Opening an input file: rtsp://192.168.1.132:554/user=admin&amp;password=mypassword&amp;channel=1&amp;stream=1.sdp.&#xA;[tcp @ 0x58fb5e0] No default whitelist set&#xA;[rtsp @ 0x58f9700] SDP:&#xA;v=0&#xA;o=- 38990265062388 38990265062388 IN IP4 192.168.1.132&#xA;a=range:npt=0-&#xA;m=video 0 RTP/AVP 96&#xA;c=IN IP4 0.0.0.0&#xA;a=rtpmap:96 H264/90000&#xA;a=framerate:0S&#xA;a=fmtp:96 profile-level-id=640014; packetization-mode=1; sprop-parameter-sets=Z2QAFK2EAQwgCGEAQwgCGEAQwgCEK1CwSyA=,aO48sA==&#xA;a=control:trackID=3&#xA;&#xA;Failed to parse interval end specification &#x27;&#x27;&#xA;[rtsp @ 0x58f9700] video codec set to: h264&#xA;[rtsp @ 0x58f9700] RTP Profile IDC: 64 Profile IOP: 0 Level: 14&#xA;[rtsp @ 0x58f9700] RTP Packetization Mode: 1&#xA;[rtsp @ 0x58f9700] Extradata set to 0x58fb940 (size: 38)&#xA;[rtsp @ 0x58f9700] setting jitter buffer size to 0&#xA;[rtsp @ 0x58f9700] hello state=0&#xA;[h264 @ 0x58fca00] nal_unit_type: 7, nal_ref_idc: 3&#xA;[h264 @ 0x58fca00] nal_unit_type: 8, nal_ref_idc: 3&#xA;[h264 @ 0x58fca00] nal_unit_type: 7, nal_ref_idc: 3&#xA;[h264 @ 0x58fca00] nal_unit_type: 8, nal_ref_idc: 3&#xA;[h264 @ 0x58fca00] unknown SEI type 229&#xA;[h264 @ 0x58fca00] nal_unit_type: 7, nal_ref_idc: 3&#xA;[h264 @ 0x58fca00] nal_unit_type: 8, nal_ref_idc: 3&#xA;[h264 @ 0x58fca00] nal_unit_type: 6, nal_ref_idc: 0&#xA;[h264 @ 0x58fca00] nal_unit_type: 5, nal_ref_idc: 3&#xA;[h264 @ 0x58fca00] unknown SEI type 229&#xA;[h264 @ 0x58fca00] Reinit context to 352x288, pix_fmt: yuv420p&#xA;[h264 @ 0x58fca00] nal_unit_type: 1, nal_ref_idc: 3&#xA;    Last message repeated 5 times&#xA;[h264 @ 0x58fca00] unknown SEI type 229&#xA;    Last message repeated 1 times&#xA;[rtsp @ 0x58f9700] All info found&#xA;[rtsp @ 0x58f9700] Setting avg frame rate based on r frame rate&#xA;Input #0, rtsp, from &#x27;rtsp://192.168.1.132:554/user=admin&amp;password=mypassword&amp;channel=1&amp;stream=1.sdp&#x27;:&#xA;  Duration: N/A, start: 0.166667, bitrate: N/A&#xA;    Stream #0:0, 28, 1/90000: Video: h264 (High), 1 reference frame, yuv420p(progressive, left), 352x288, 0/1, 6 fps, 6 tbr, 90k tbn, 180k tbc&#xA;Successfully opened the file.&#xA;Parsing a group of options: input url rtsp://192.168.1.132:554/user=admin&amp;password=mypassword&amp;channel=2&amp;stream=1.sdp.&#xA;Successfully parsed a group of options.&#xA;Opening an input file: rtsp://192.168.1.132:554/user=admin&amp;password=mypassword&amp;channel=2&amp;stream=1.sdp.&#xA;[tcp @ 0x59f4280] No default whitelist set&#xA;[rtsp @ 0x59f7620] SDP:&#xA;v=0&#xA;o=- 38990265062388 38990265062388 IN IP4 192.168.1.132&#xA;a=range:npt=0-&#xA;m=video 0 RTP/AVP 96&#xA;c=IN IP4 0.0.0.0&#xA;a=rtpmap:96 H264/90000&#xA;a=framerate:0S&#xA;a=fmtp:96 profile-level-id=640014; packetization-mode=1; sprop-parameter-sets=Z2QAFK2EAQwgCGEAQwgCGEAQwgCEK1CwSyA=,aO48sA==&#xA;a=control:trackID=3&#xA;&#xA;Failed to parse interval end specification &#x27;&#x27;&#xA;[rtsp @ 0x59f7620] video codec set to: h264&#xA;[rtsp @ 0x59f7620] RTP Profile IDC: 64 Profile IOP: 0 Level: 14&#xA;[rtsp @ 0x59f7620] RTP Packetization Mode: 1&#xA;[rtsp @ 0x59f7620] Extradata set to 0x59f3670 (size: 38)&#xA;[rtp @ 0x59f62a0] No default whitelist set&#xA;[udp @ 0x58fb6a0] No default whitelist set&#xA;[udp @ 0x58fb6a0] end receive buffer size reported is 131072&#xA;[udp @ 0x591b940] No default whitelist set&#xA;[udp @ 0x591b940] end receive buffer size reported is 131072&#xA;[rtsp @ 0x59f7620] setting jitter buffer size to 500&#xA;[rtsp @ 0x59f7620] hello state=0&#xA;[h264 @ 0x59e4b20] nal_unit_type: 7, nal_ref_idc: 3&#xA;[h264 @ 0x59e4b20] nal_unit_type: 8, nal_ref_idc: 3&#xA;[h264 @ 0x59e4b20] nal_unit_type: 7, nal_ref_idc: 3&#xA;[h264 @ 0x59e4b20] nal_unit_type: 8, nal_ref_idc: 3&#xA;[h264 @ 0x59e4b20] unknown SEI type 229&#xA;[h264 @ 0x59e4b20] nal_unit_type: 7, nal_ref_idc: 3&#xA;[h264 @ 0x59e4b20] nal_unit_type: 8, nal_ref_idc: 3&#xA;[h264 @ 0x59e4b20] nal_unit_type: 6, nal_ref_idc: 0&#xA;[h264 @ 0x59e4b20] nal_unit_type: 5, nal_ref_idc: 3&#xA;[h264 @ 0x59e4b20] unknown SEI type 229&#xA;[h264 @ 0x59e4b20] Reinit context to 352x288, pix_fmt: yuv420p&#xA;[h264 @ 0x59e4b20] nal_unit_type: 1, nal_ref_idc: 3&#xA;    Last message repeated 5 times&#xA;[h264 @ 0x59e4b20] unknown SEI type 229&#xA;    Last message repeated 1 times&#xA;[rtsp @ 0x59f7620] All info found&#xA;[rtsp @ 0x59f7620] Setting avg frame rate based on r frame rate&#xA;Input #1, rtsp, from &#x27;rtsp://192.168.1.132:554/user=admin&amp;password=mypassword&amp;channel=2&amp;stream=1.sdp&#x27;:&#xA;  Duration: N/A, start: 0.166667, bitrate: N/A&#xA;    Stream #1:0, 28, 1/90000: Video: h264 (High), 1 reference frame, yuv420p(progressive, left), 352x288, 0/1, 6 fps, 6 tbr, 90k tbn, 180k tbc&#xA;Successfully opened the file.&#xA;detected 2 logical cores&#xA;[Parsed_hstack_0 @ 0x59f7cc0] Setting &#x27;inputs&#x27; to value &#x27;2&#x27;&#xA;Parsing a group of options: output url http://localhost:8090/feed5.ffm.&#xA;Applying option map (set input stream mapping) with argument [v].&#xA;Applying option r (set frame rate (Hz value, fraction or abbreviation)) with argument 30.&#xA;Successfully parsed a group of options.&#xA;Opening an output file: http://localhost:8090/feed5.ffm.&#xA;[http @ 0x59aa700] Setting default whitelist &#x27;http,https,tls,rtp,tcp,udp,crypto,httpproxy&#x27;&#xA;[http @ 0x59aa700] request: GET /feed5.ffm HTTP/1.1&#xA;User-Agent: Lavf/57.72.101&#xA;Accept: */*&#xA;Range: bytes=0-&#xA;Connection: close&#xA;Host: localhost:8090&#xA;Icy-MetaData: 1&#xA;&#xA;&#xA;[ffm @ 0x5917d00] Format ffm probed with size=2048 and score=101&#xA;[NULL @ 0x5bce3e0] Setting entry with key &#x27;video_size&#x27; to value &#x27;640x360&#x27;&#xA;[NULL @ 0x5bce3e0] Setting entry with key &#x27;b&#x27; to value &#x27;140000&#x27;&#xA;[NULL @ 0x5bce3e0] Setting entry with key &#x27;time_base&#x27; to value &#x27;1/5&#x27;&#xA;[NULL @ 0x5bce3e0] Setting entry with key &#x27;bt&#x27; to value &#x27;35000&#x27;&#xA;[NULL @ 0x5bce3e0] Setting entry with key &#x27;rc_eq&#x27; to value &#x27;tex^qComp&#x27;&#xA;[NULL @ 0x5bce3e0] Setting entry with key &#x27;maxrate&#x27; to value &#x27;280000&#x27;&#xA;[NULL @ 0x5bce3e0] Setting entry with key &#x27;bufsize&#x27; to value &#x27;280000&#x27;&#xA;[AVIOContext @ 0x5915b80] Statistics: 4096 bytes read, 0 seeks&#xA;[http @ 0x5915f00] Setting default whitelist &#x27;http,https,tls,rtp,tcp,udp,crypto,httpproxy&#x27;&#xA;[http @ 0x5915f00] request: POST /feed5.ffm HTTP/1.1&#xA;Transfer-Encoding: chunked&#xA;User-Agent: Lavf/57.72.101&#xA;Accept: */*&#xA;Connection: close&#xA;Host: localhost:8090&#xA;Icy-MetaData: 1&#xA;&#xA;&#xA;Successfully opened the file.&#xA;Filter hstack has an unconnected output&#xA;[AVIOContext @ 0x59ab080] Statistics: 0 seeks, 0 writeouts&#xA;

    &#xA;&#xA;

    I am stumped - any clues ?

    &#xA;&#xA;

    Thanks in advance.

    &#xA;