Recherche avancée

Médias (91)

Autres articles (64)

  • Demande de création d’un canal

    12 mars 2010, par

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

  • Diogene : création de masques spécifiques de formulaires d’édition de contenus

    26 octobre 2010, par

    Diogene est un des plugins ? SPIP activé par défaut (extension) lors de l’initialisation de MediaSPIP.
    A quoi sert ce plugin
    Création de masques de formulaires
    Le plugin Diogène permet de créer des masques de formulaires spécifiques par secteur sur les trois objets spécifiques SPIP que sont : les articles ; les rubriques ; les sites
    Il permet ainsi de définir en fonction d’un secteur particulier, un masque de formulaire par objet, ajoutant ou enlevant ainsi des champs afin de rendre le formulaire (...)

  • Emballe médias : à quoi cela sert ?

    4 février 2011, par

    Ce plugin vise à gérer des sites de mise en ligne de documents de tous types.
    Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ;

Sur d’autres sites (4972)

  • Crop individual frames of a video and then concat for output

    27 juin 2024, par Ashish Padave

    I want to Crop individual frames of a video and then concat for output. This works with 2 ffmpeg commands. The first one extracts each frame and the second concats them.
I want to get it done without the intermediate frames.

    


    Tried with the following

    


    ffmpeg  -y -i input.mp4 -filter_complex "[0:v]split=890[v0][v1][v2][v3][v4][v5];[v0]select='eq(n\,0)',setpts=PTS-STARTPTS,crop=404:720:225:0[v0]; [v1]select='eq(n\,1)',setpts=PTS-STARTPTS,crop=404:720:225:0[v1]; [v2]select='eq(n\,2)',setpts=PTS-STARTPTS,crop=404:720:225:0[v2]; [v3]select='eq(n\,3)',setpts=PTS-STARTPTS,crop=404:720:225:0[v3]; [v4]select='eq(n\,4)',setpts=PTS-STARTPTS,crop=404:720:225:0[v4]; [v5]select='eq(n\,5)',setpts=PTS-STARTPTS,crop=404:720:225:0[v5];[v0][v1][v2][v3][v4][v5]concat=n=6:v=1:a=0[outv]" -map "[outv]" -map 0:a? -c:a copy -vsync 2 output.mp4


    


    The above is an abridged version of the command. The video I am working with has 890 frames and a frame rate of 25.

    


    The output log with 890 frames is

    


    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf59.5.100
  Duration: 00:00:35.61, start: 0.000000, bitrate: 3380 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 3246 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 (h264) -> split
  concat -> Stream #0:0 (libx264)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[libx264 @ 0x55963ad4b700] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512
[libx264 @ 0x55963ad4b700] profile High, level 3.0
[libx264 @ 0x55963ad4b700] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - 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=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 404x720, q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
    Metadata:
      encoder         : Lavc58.54.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
frame=    3 fps=0.6 q=-1.0 Lsize=     586kB time=00:00:35.59 bitrate= 134.9kbits/s dup=0 drop=887 speed=6.73x
video:21kB audio:558kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.278277%
[libx264 @ 0x55963ad4b700] frame I:1     Avg QP:23.09  size: 17546
[libx264 @ 0x55963ad4b700] frame P:1     Avg QP:25.73  size:  2069
[libx264 @ 0x55963ad4b700] frame B:1     Avg QP:26.34  size:   845
[libx264 @ 0x55963ad4b700] consecutive B-frames: 33.3% 66.7%  0.0%  0.0%
[libx264 @ 0x55963ad4b700] mb I  I16..4:  8.4% 68.9% 22.7%
[libx264 @ 0x55963ad4b700] mb P  I16..4:  0.1%  0.6%  0.3%  P16..4: 28.5%  5.0%  3.9%  0.0%  0.0%    skip:61.6%
[libx264 @ 0x55963ad4b700] mb B  I16..4:  0.0%  0.1%  0.0%  B16..8: 29.6%  3.4%  0.3%  direct: 0.2%  skip:66.4%  L0:59.3% L1:35.6% BI: 5.1%
[libx264 @ 0x55963ad4b700] 8x8 transform intra:68.8% inter:73.3%
[libx264 @ 0x55963ad4b700] coded y,uvDC,uvAC intra: 73.0% 80.1% 36.4% inter: 3.9% 7.0% 0.7%
[libx264 @ 0x55963ad4b700] i16 v,h,dc,p:  2% 74%  6% 18%
[libx264 @ 0x55963ad4b700] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 36% 20%  8%  4%  2%  6%  4%  8%
[libx264 @ 0x55963ad4b700] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 41% 10%  4%  7%  4%  5%  3%  5%
[libx264 @ 0x55963ad4b700] i8c dc,h,v,p: 44% 37% 14%  6%
[libx264 @ 0x55963ad4b700] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x55963ad4b700] kb/s:1364.00


    


    So it is basically dropping 887 frames. The output file has the full audio but no video.
Is this even possible ?

    


  • No sound when capture screen

    10 janvier 2018, par scrapy

    To capture my pc screen with following ffmpeg command.

    ffmpeg -f pulse -ac 2 -i default -f x11grab -r 30 -s 1920x1080 -i :0.0 -acodec pcm_s16le -vcodec libx264 -preset ultrafast -threads 0 -y /tmp/output.mkv

    The output displayed on my console when to execute the above command.

    Guessed Channel Layout for Input Stream #0.0 : stereo
    Input #0, pulse, from 'default':
     Duration: N/A, start: 1515543051.106987, bitrate: 1536 kb/s
       Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
    [x11grab @ 0x564bda5b8520] Stream #0: not enough frames to estimate rate; consider increasing probesize
    Input #1, x11grab, from ':0.0':
     Duration: N/A, start: 1515543052.415508, bitrate: N/A
       Stream #1:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080, 30 fps, 1000k tbr, 1000k tbn, 1000k tbc
    No pixel format specified, yuv444p for H.264 encoding chosen.
    Use -pix_fmt yuv420p for compatibility with outdated media players.
    [libx264 @ 0x564bda5c1560] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 LZCNT
    [libx264 @ 0x564bda5c1560] profile High 4:4:4 Predictive, level 4.0, 4:4:4 8-bit
    [libx264 @ 0x564bda5c1560] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=6 threads=3 lookahead_threads=1 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=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
    Output #0, matroska, to '/tmp/output.mkv':
     Metadata:
       encoder         : Lavf57.56.101
       Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv444p, 1920x1080, q=-1--1, 30 fps, 1k tbn, 30 tbc
       Metadata:
         encoder         : Lavc57.64.101 libx264
       Side data:
         cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
       Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s
       Metadata:
         encoder         : Lavc57.64.101 pcm_s16le
    Stream mapping:
     Stream #1:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
     Stream #0:0 -> #0:1 (pcm_s16le (native) -> pcm_s16le (native))

    Playing a music when to make the screenshot,i can hear the music playing lound.
    It’s strange that vedio came out perfectly without sound when to play the captured /tmp/output.mkv.

    Open my volume control with pavucontrol.

    Nothing in recording window, maybe the blank recording window result in no souond when to capture screen !
    How to fix it ?

    enter image description here

    enter image description here

    enter image description here

    enter image description here

    enter image description here

  • FFmpeg Successfully Pushes Stream to Nginx RTMP but Unable to Play with ffplay or VLC [closed]

    2 août 2024, par ShaoKun Lou

    FFmpeg Successfully Pushes Stream to Nginx RTMP but Unable to Play with ffplay or VLC

    


    I followed the tutorial below :tutorial

    


    to set up an RTMP server using Nginx, and successfully pushed a stream with FFmpeg.
Here is the nginx.conf file :

    


    rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                allow publish 127.0.0.1;
                deny publish all;

                application live {
                        live on;
                        record off;
                        allow play all;
                }
        }
}


    


    and here is the console output from pushing the stream :

    


    ffmpeg -re -i bejeweled.mp4 -c:v libx264 -c:a aac -f flv rtmp://127.0.0.1/live/stream
ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 13 (Ubuntu 13.2.0-23ubuntu3)
  configuration: --prefix=/usr --extra-version=3ubuntu5 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bejeweled.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
    description     : Bilibili VXCode Swarm Transcoder v0.7.43
  Duration: 00:03:18.39, start: 0.000000, bitrate: 424 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], 352 kb/s, 23.98 fps, 23.98 tbr, 16k tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 65 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0x58b1ca9cee80] using SAR=1/1
[libx264 @ 0x58b1ca9cee80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x58b1ca9cee80] profile High, level 3.0, 4:2:0, 8-bit
[libx264 @ 0x58b1ca9cee80] 264 - core 164 r3108 31e19f9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - 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=11 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=23 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, flv, to 'rtmp://127.0.0.1/live/stream':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    description     : Bilibili VXCode Swarm Transcoder v0.7.43
    encoder         : Lavf60.16.100
  Stream #0:0(und): Video: h264 ([7][0][0][0] / 0x0007), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 1k tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
  Stream #0:1(und): Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 aac
frame=    0 fps=0.0 q=0.0 size=       1kB time=00:00:00.60 bitrate=   7.2kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:01.11 bitrate=   3.9kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:01.62 bitrate=   2.7kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:02.13 bitrate=   2.0kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:02.62 bitrate=   1.7kbits/sframe=    6 fps=2.2 q=28.0 size=       6kB time=00:00:03.15 bitrate=  16.2kbits/...


    


    But when I try to play the stream using ffplay or VLC, it gets stuck in a waiting state.
this is the console output :

    


    leo@leo-devp:~$ ffplay rtmp://127.0.0.1/live/stream
ffplay version 6.1.1-3ubuntu5 Copyright (c) 2003-2023 the FFmpeg developers
  built with gcc 13 (Ubuntu 13.2.0-23ubuntu3)
  configuration: --prefix=/usr --extra-version=3ubuntu5 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
^Cleo@leo-devp:~$ 0 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0 


    


    and this is /var/log/nginx/access.log :

    


    127.0.0.1 [02/Aug/2024:14:56:38 +0800] PUBLISH "live" "stream" "" - 415 529 "" "FMLE/3.0 (compatible; Lavf60.16" (0s)
127.0.0.1 [02/Aug/2024:14:59:59 +0800] PUBLISH "live" "stream" "" - 10501019 529 "" "FMLE/3.0 (compatible; Lavf60.16" (3m 18s)
127.0.0.1 [02/Aug/2024:15:01:21 +0800] PLAY "live" "stream" "" - 401 490 "" "LNX 9,0,124,2" (4m 35s)
127.0.0.1 [02/Aug/2024:15:09:49 +0800] PUBLISH "live" "stream" "" - 2733579 529 "" "FMLE/3.0 (compatible; Lavf60.16" (52s)
127.0.0.1 [02/Aug/2024:15:10:15 +0800] PLAY "live" "stream" "" - 372 436 "" "LNX 9,0,124,2" (54s)
127.0.0.1 [02/Aug/2024:15:11:52 +0800] PLAY "live" "stream" "" - 372 436 "" "LNX 9,0,124,2" (17s)
127.0.0.1 [02/Aug/2024:15:13:24 +0800] PLAY "live" "stream" "" - 393 472 "" "LNX 9,0,124,2" (3m 5s)
127.0.0.1 [02/Aug/2024:15:13:24 +0800] PUBLISH "live" "stream" "" - 23343914 529 "" "FMLE/3.0 (compatible; Lavf60.16" (3m 18s)
127.0.0.1 [02/Aug/2024:15:13:39 +0800] PLAY "live" "stream" "" - 372 436 "" "LNX 9,0,124,2" (10s)
127.0.0.1 [02/Aug/2024:15:15:48 +0800] PLAY "live" "stream" "" - 393 472 "" "LNX 9,0,124,2" (3m 34s)


    


    There are no relevant log records in /var/log/nginx/error.log

    


    the firwall status :

    


    leo@leo-devp:~$ sudo ufw status


    


    [sudo] leo 的密码:
状态: 激活

    


    至 动作 来自

    



    


    3306/tcp ALLOW Anywhere
    
1935/tcp ALLOW Anywhere
    
19355/tcp ALLOW Anywhere
    
19355 ALLOW Anywhere
    
1935 ALLOW Anywhere
    
3306/tcp (v6) ALLOW Anywhere (v6)
    
1935/tcp (v6) ALLOW Anywhere (v6)
    
19355/tcp (v6) ALLOW Anywhere (v6)
    
19355 (v6) ALLOW Anywhere (v6)
    
1935 (v6) ALLOW Anywhere (v6)

    


    Please point out what I did wrong and how to correct it. Thank you.