Recherche avancée

Médias (91)

Autres articles (103)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Use, discuss, criticize

    13 avril 2011, par

    Talk to people directly involved in MediaSPIP’s development, or to people around you who could use MediaSPIP to share, enhance or develop their creative projects.
    The bigger the community, the more MediaSPIP’s potential will be explored and the faster the software will evolve.
    A discussion list is available for all exchanges between users.

  • Le plugin : Podcasts.

    14 juillet 2010, par

    Le problème du podcasting est à nouveau un problème révélateur de la normalisation des transports de données sur Internet.
    Deux formats intéressants existent : Celui développé par Apple, très axé sur l’utilisation d’iTunes dont la SPEC est ici ; Le format "Media RSS Module" qui est plus "libre" notamment soutenu par Yahoo et le logiciel Miro ;
    Types de fichiers supportés dans les flux
    Le format d’Apple n’autorise que les formats suivants dans ses flux : .mp3 audio/mpeg .m4a audio/x-m4a .mp4 (...)

Sur d’autres sites (6894)

  • RAW audio capture from HDMI using DeckLink Mini Recorder 4K

    12 mars 2020, par Amir Raza

    I need to capture audio from TI DSP hardware/Laptop. So I opted "DeckLink Mini Recorder 4K Audio" and it connected to desktop.
    By using Decklink API’s I am able to capture audio (PCM) with 32-bit depth. But when I used media express to capture, and extracted audio
    using FFmpeg and I am getting audio (PCM) with 24-bit depth.

    Question
    1) Does this device "DeckLink Mini Recorder 4K Audio" converts audio from 32-bit to 24-bit ?
    2) Is this device "DeckLink Mini Recorder 4K Audio" bit-exact/loss-less ?

    consider the below test scenario.

    I am playing audio(PCM) by MPC-HC/VLC/Groove player in laptop and capture audio(PCM) using "DeckLink Mini Recorder 4K Audio"
    connected to desktop, The capture audio is bit-exact with the streamed input.?

    i.e ffmpeg.exe -i HDMI_Output1.av1 -vn -c:a copy out.wav

    Note :
    i am using Blackmagic_Desktop_Video_Windows_11.5 & Blackmagic_DeckLink_SDK_11.5 softwares.

    I have added the Decklink API code snippet.

    void main()
    {
     IDeckLinkIterator* deckLinkIterator = NULL;
     IDeckLinkAttributes* deckLinkAttributes = NULL;
     IDeckLink* deckLink = NULL;
     IDeckLinkInput* deckLinkInput = NULL;
     NotificationCallback* notificationCallback = NULL;
     HRESULT result;
     BOOL supported;
     int returnCode = 1;
    #ifdef WRITE_WAV_FILE
     wave_header wh;
     unsigned octet_depth;
    #endif
     Initialize();
    #ifdef _WIN32
     MutexHandle = CreateMutex(NULL, /* security attributes */
                               FALSE, /* initially not owned */
                               NULL); /* Name */
    #endif
     /* Create an IDeckLinkIterator object to enumerate all DeckLink cards in the system */
     if (GetDeckLinkIterator(&deckLinkIterator) != S_OK)
     {
       fprintf(stderr, "A DeckLink iterator could not be created.  The DeckLink drivers may not be installed.\n");
       goto bail;
     }
     /* Obtain the first DeckLink device */
     result = deckLinkIterator->Next(&deckLink);
     if (result != S_OK)
     {
       fprintf(stderr, "Could not find DeckLink device - result = %08x\n", result);
       goto bail;
     }

     /* Obtain the Attributes interface for the DeckLink device */
     result = deckLink->QueryInterface(IID_IDeckLinkAttributes, (void**)&deckLinkAttributes);
     if (result != S_OK)
     {
       fprintf(stderr, "Could not obtain the IDeckLinkAttributes interface - result = %08x\n", result);
       goto bail;
     }

     /* Determine whether the DeckLink device supports input format detection */
     result = deckLinkAttributes->GetFlag(BMDDeckLinkSupportsInputFormatDetection, &supported);
     if ((result != S_OK) || (supported == false))
     {
       fprintf(stderr, "Device does not support automatic mode detection\n");
       goto bail;
     }

     /* Obtain the input interface for the DeckLink device */
     result = deckLink->QueryInterface(IID_IDeckLinkInput, (void**)&deckLinkInput);
     if (result != S_OK)
     {
       fprintf(stderr, "Could not obtain the IDeckLinkInput interface - result = %08x\n", result);
       goto bail;
     }

     /* Create an instance of notification callback */
     notificationCallback = new NotificationCallback(deckLinkInput);
     if (notificationCallback == NULL)
     {
       fprintf(stderr, "Could not create notification callback object\n");
       goto bail;
     }

     /* Set the callback object to the DeckLink device's input interface */
     result = deckLinkInput->SetCallback(notificationCallback);
     if (result != S_OK)
     {
       fprintf(stderr, "Could not set callback - result = %08x\n", result);
       goto bail;
     }

     /*  Enable video input with a default video mode and the automatic format detection feature enabled */
     result = deckLinkInput->EnableVideoInput(bmdModeHD1080p5994, bmdFormat8BitYUV, bmdVideoInputFlagDefault);
     if (result != S_OK)
     {
       fprintf(stderr, "Could not enable video input - result = %08x\n", result);
       goto bail;
     }
     nBytesPerSample = (bmdAudioSampleType32bitInteger >> 3);
     nChannels = 2;
     /*  Enable audio input with a default audio mode and the automatic format detection feature enabled */
     result = deckLinkInput->EnableAudioInput(bmdAudioSampleRate48kHz, bmdAudioSampleType32bitInteger, nChannels);
     if (result != S_OK)
     {
       fprintf(stderr, "Could not enable audio input - result = %08x\n", result);
       goto bail;
     }

    #ifdef WRITE_WAV_FILE
     /* Populate the wave headers */
     /* RIFF */
     sprintf(&wh.riff.name1[0], "RIFF");
     sprintf(&wh.riff.name2[0], "WAVE");
     /* format */
     octet_depth = (bmdAudioSampleType32bitInteger + 7) / 8;
     sprintf(&wh.fmt.name[0], "fmt ");
     wh.fmt.size = FMT_SIZE;
     wh.fmt.format_type = FMT_TAG_PCM;
     wh.fmt.channel_count = (unsigned short)nChannels;
     wh.fmt.sample_rate = bmdAudioSampleRate48kHz;
     wh.fmt.bits_per_sample = (unsigned short)octet_depth * 8;
     wh.fmt.block_alignment = (unsigned short)(octet_depth*nChannels);
     wh.fmt.bytes_per_second = (unsigned long)wh.fmt.block_alignment*bmdAudioSampleRate48kHz;
     wh.fmt.extra_bytes = (unsigned short)0;
     /* data */
     sprintf(&wh.data.name[0], "data");
    #endif

     printf("Starting streams\n");

     /* Start capture */
     result = deckLinkInput->StartStreams();
     if (result != S_OK)
     {
       fprintf(stderr, "Could not start capture - result = %08x\n", result);
       goto bail;
     }
    #ifdef WRITE_WAV_FILE
     FILE *fp = fopen("HDMI_Output.wav", "wb");
    #else
     FILE *fp = fopen("HDMI_Output.bin","wb");
    #endif
     char *ptrCopy;
     float *fPtr;
     unsigned int zeroCntr, trailingZerosCnt;
     do
     {
         zeroCntr = 0;
         trailingZerosCnt = 0;
    #ifdef _WIN32
         WaitForSingleObject(MutexHandle, /* handle */
                             INFINITE); /* time-out interval */
    #endif
         int bytesInQueue = (int)((long long)aBufPtr - (long long)aBufWritePtr);
         ptrCopy = (char *)aBufPtr;
    #ifdef _WIN32
         ReleaseMutex(MutexHandle);
    #endif
         if (bytesInQueue > 0)
         {
    #ifdef STRIP_ZEROS
             /* Parse data for zeros */
             fPtr = (float *)aBufWritePtr;
             for (int i = 0; i < (bytesInQueue >> 2); i++)
             {
                 if (*(fPtr + i) == 0.0)
                     zeroCntr++;
                 else
                     break;
             }
             aBufWritePtr += (zeroCntr << 2);
             bytesInQueue -= (zeroCntr << 2);
    #endif
             if (bytesInQueue > 0)
             {
                 fPtr = (float *)aBufWritePtr;
                 for (int i = 0; i < (bytesInQueue >> 2); i++)
                 {
                     fwrite(fPtr, 4, 1, fp);
                     fflush(fp);

                     if (*fPtr == 0.0)
                         trailingZerosCnt++;
                     else
                         trailingZerosCnt = 0;

                     if (trailingZerosCnt >= NUM_TRAIL_ZEROS_TRESHOLD)
                         break;

                     fPtr++;
                 }
             }
         }
         aBufWritePtr = ptrCopy;
         Sleep(100);
     } while (trailingZerosCnt < NUM_TRAIL_ZEROS_TRESHOLD);

     fclose (fp);
    #ifdef STRIP_ZEROS
     /* Remove trailing zeros, write wave header */
    #ifdef WRITE_WAV_FILE
     fp = fopen("HDMI_Output.wav", "rb");
    #else
     fp = fopen("HDMI_Output.bin", "rb");
    #endif
     fseek(fp, 0, SEEK_END);
     int size = ftell(fp);
     size = size - (NUM_TRAIL_ZEROS_TRESHOLD << 2);
     printf(" \n size of hearder = %d", size);
    #ifdef WRITE_WAV_FILE
     wh.data.size = size;
     wh.riff.size = wh.data.size + sizeof(wave_format) + sizeof(wave_RIFF);
     printf(" \n size of hearderwh.riff.size = %d", wh.riff.size);
    #endif
     char * tmpBuf = (char *)malloc(size);
     fseek(fp, 0, SEEK_SET);
     fread(tmpBuf, 1, size, fp);
     fclose(fp);
    #endif
    #ifdef WRITE_WAV_FILE
     fp = fopen("HDMI_Output.wav", "wb");
     /* write the wave header */
     fwrite(&wh, 1, sizeof(wave_header), fp);
     /* Write the zero stripped PCM data */
     fwrite(tmpBuf, 1, size, fp);
     free(tmpBuf);
     fflush(fp);
     fclose(fp);
    #endif
    bail:
     /* Stop capture */
     result = deckLinkInput->StopStreams();

     /* Disable the video input interface */
     result = deckLinkInput->DisableVideoInput();

     /* return success */
     returnCode = 0;

     /* Release resources */

     /* Release the attributes interface */
     if (deckLinkAttributes != NULL)
       deckLinkAttributes->Release();

     /* Release the video input interface */
     if (deckLinkInput != NULL)
       deckLinkInput->Release();

     /* Release the Decklink object */
     if (deckLink != NULL)
       deckLink->Release();

     /* Release the DeckLink iterator */
     if (deckLinkIterator != NULL)
       deckLinkIterator->Release();

     /* Release the notification callback object */
     if (notificationCallback)
       delete notificationCallback;
    }
  • How can i create a portrait video using Android's MediaRecorder

    23 mars 2015, par urudroid

    I have an Android application which is able to record and play a videos in portrait mode, those features are working fine on Android phones.

    The issue comes up because this video is needed to be played also on iOS devices (after being shared through a server).

    iOS is not correctly showing the video as it looks "cropped", but videos recorded on iOS are played without issues.

    So, the main difference between videos created on Android and iOS’ is the size and the rotation.

    Im using CWAC-Camera library for preview and recording and ffmpeg to scale the video down to 320x568px (as this is the standard size for both Android and iOS apps).

    Here is the metadata from an video created from Android :

    General
    Complete name                            : android_video.mp4
    Format                                   : MPEG-4
    Format profile                           : Base Media
    Codec ID                                 : isom
    File size                                : 447 KiB
    Duration                                 : 5s 596ms
    Overall bit rate                         : 654 Kbps
    Encoded date                             : UTC 1904-01-01 00:00:00
    Tagged date                              : UTC 1904-01-01 00:00:00
    Writing application                      : Lavf56.4.101

    Video
    ID                                       : 1
    Format                                   : AVC
    Format/Info                              : Advanced Video Codec
    Format profile                           : High@L2.1
    Format settings, CABAC                   : Yes
    Format settings, ReFrames                : 4 frames
    Codec ID                                 : avc1
    Codec ID/Info                            : Advanced Video Coding
    Duration                                 : 5s 406ms
    Bit rate                                 : 536 Kbps
    Width                                    : 568 pixels
    Height                                   : 320 pixels
    Display aspect ratio                     : 16:9
    Original display aspect ratio            : 16:9
    Rotation                                 : 270°
    Frame rate mode                          : Constant
    Frame rate                               : 14.985 fps
    Color space                              : YUV
    Chroma subsampling                       : 4:2:0
    Bit depth                                : 8 bits
    Scan type                                : Progressive
    Bits/(Pixel*Frame)                       : 0.197
    Stream size                              : 354 KiB (79%)
    Writing library                          : x264 core 142
    Encoding settings                        : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=14 / 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
    Language                                 : English
    Encoded date                             : UTC 1904-01-01 00:00:00
    Tagged date                              : UTC 1904-01-01 00:00:00

    Audio
    ID                                       : 2
    Format                                   : AAC
    Format/Info                              : Advanced Audio Codec
    Format profile                           : LC
    Codec ID                                 : 40
    Duration                                 : 5s 596ms
    Bit rate mode                            : Constant
    Bit rate                                 : 132 Kbps
    Channel(s)                               : 2 channels
    Channel(s)_Original                      : 1 channel
    Channel positions                        : Front: C
    Sampling rate                            : 44.1 KHz
    Compression mode                         : Lossy
    Stream size                              : 89.4 KiB (20%)
    Language                                 : English
    Encoded date                             : UTC 1904-01-01 00:00:00
    Tagged date                              : UTC 1904-01-01 00:00:00

    And here is the metadata from the video created on iOS :

    General
    Complete name                            : ios_video.mp4
    Format                                   : MPEG-4
    Format profile                           : Base Media / Version 2
    Codec ID                                 : mp42
    File size                                : 673 KiB
    Duration                                 : 7s 38ms
    Overall bit rate                         : 783 Kbps
    Encoded date                             : UTC 2015-03-17 19:16:36
    Tagged date                              : UTC 2015-03-17 19:16:37

    Video
    ID                                       : 2
    Format                                   : AVC
    Format/Info                              : Advanced Video Codec
    Format profile                           : Main@L3.0
    Format settings, CABAC                   : Yes
    Format settings, ReFrames                : 2 frames
    Codec ID                                 : avc1
    Codec ID/Info                            : Advanced Video Coding
    Duration                                 : 7s 33ms
    Bit rate                                 : 711 Kbps
    Width                                    : 320 pixels
    Height                                   : 568 pixels
    Display aspect ratio                     : 0.563
    Frame rate mode                          : Constant
    Frame rate                               : 30.000 fps
    Color space                              : YUV
    Chroma subsampling                       : 4:2:0
    Bit depth                                : 8 bits
    Scan type                                : Progressive
    Bits/(Pixel*Frame)                       : 0.130
    Stream size                              : 610 KiB (91%)
    Title                                    : Core Media Video
    Encoded date                             : UTC 2015-03-17 19:16:36
    Tagged date                              : UTC 2015-03-17 19:16:37
    Color primaries                          : BT.709
    Transfer characteristics                 : BT.709
    Matrix coefficients                      : BT.709
    Color range                              : Limited

    Audio
    ID                                       : 1
    Format                                   : AAC
    Format/Info                              : Advanced Audio Codec
    Format profile                           : LC
    Codec ID                                 : 40
    Duration                                 : 7s 38ms
    Source duration                          : 7s 105ms
    Bit rate mode                            : Constant
    Bit rate                                 : 64.0 Kbps
    Channel(s)                               : 2 channels
    Channel(s)_Original                      : 1 channel
    Channel positions                        : Front: C
    Sampling rate                            : 44.1 KHz
    Compression mode                         : Lossy
    Stream size                              : 56.8 KiB (8%)
    Source stream size                       : 57.2 KiB (9%)
    Title                                    : Core Media Audio
    Encoded date                             : UTC 2015-03-17 19:16:36
    Tagged date                              : UTC 2015-03-17 19:16:37

    The values width and height are inverted on Android, also the Rotation parameter is set to 270º (this is the rotation parameter for portrait videos).

    This is a sketch of how iOS’ videos look on iOS app :

    Videos recorded on iOS

    And this is how Android’s videos look on iOS app :

    enter image description here

    So, in order to get the videos correctly displayed both on iOS and Android i need to be able to set the width to 320 and height to 568 on Android. I tried it from several places (outside and inside CWAC-Camera library) but i always get a Camera.Parameters error.

    It is possible to do this on Android ?

    EDIT :

    This is the result i get when i set the rotation to 0 with ffmpeg :

    enter image description here

  • FFmpeg : Invalid buffer size when streaming to Twitch

    1er décembre 2020, par user1965074

    I am streaming a 2560x1440 @ 24FPS to Twitch with this command :

    


    ffmpeg \
>     -f rawvideo \
>     -vcodec rawvideo \
>     -s 2560x1440 \
>     -pix_fmt bgr24 \
>     -r "24" \
>     -i 20200818-074700.mp4 \
>     -f flv \
>     -vcodec libx264 \
>     -profile:v main \
>     -g 48 \
>     -keyint_min 24 \
>     -b:v 4500k \
>     -minrate 4500k \
>     -maxrate 4500k \
>     -pix_fmt yuv420p \
>     -preset ultrafast \
>     -tune zerolatency \
>     -threads 0 \
>     -bufsize 4500k \
>     rtmp://live-arn.twitch.tv/app/{KEY}


    


    It fails with message Invalid buffer size, packet size 9137374 < expected frame_size 11059200. Given the error message, I have tried decreasing and increasing the 4500k in all places of the command as explained in this answer but it does not help.

    


    Here is the full log

    


    ffmpeg version 2.8.17-0ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
  configuration: --prefix=/usr --extra-version=0ubuntu0.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
[rawvideo @ 0xfb3120] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from '20200818-074700.mp4':
  Duration: 00:00:02.96, start: 0.000000, bitrate: 2118169 kb/s
    Stream #0:0: Video: rawvideo (BGR[24] / 0x18524742), bgr24, 2560x1440, 2123366 kb/s, 24 tbr, 24 tbn, 24 tbc
[libx264 @ 0xfbdfc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0xfbdfc0] profile Constrained Baseline, level 5.0
[libx264 @ 0xfbdfc0] 264 - core 148 r2643 5c65704 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - 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=0 threads=22 lookahead_threads=16 sliced_threads=1 slices=22 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=48 keyint_min=24 scenecut=0 intra_refresh=0 rc_lookahead=0 rc=cbr mbtree=0 bitrate=4500 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=4500 vbv_bufsize=4500 nal_hrd=none filler=0 ip_ratio=1.40 aq=0
Output #0, flv, to 'rtmp://live-arn.twitch.tv/app/{KEY}':
  Metadata:
    encoder         : Lavf56.40.101
    Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 2560x1440, q=-1--1, 4500 kb/s, 24 fps, 1k tbn, 24 tbc
    Metadata:
      encoder         : Lavc56.60.100 libx264
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0xfbdfc0] VBV underflow (frame 0, -1827312 bits)
Truncating packet of size 11059200 to 9137375me=00:00:02.33 bitrate=6051.7kbits/s    
[rawvideo @ 0xfbca80] Invalid buffer size, packet size 9137374 < expected frame_size 11059200
Error while decoding stream #0:0: Invalid argument
[flv @ 0xfbd020] Failed to update header with correct duration.
[flv @ 0xfbd020] Failed to update header with correct filesize.
frame=   70 fps= 54 q=52.0 Lsize=    2029kB time=00:00:02.91 bitrate=5698.4kbits/s    
video:2026kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.152412%
[libx264 @ 0xfbdfc0] frame I:2     Avg QP:47.09  size:381468
[libx264 @ 0xfbdfc0] frame P:68    Avg QP:51.00  size: 19279
[libx264 @ 0xfbdfc0] mb I  I16..4: 100.0%  0.0%  0.0%
[libx264 @ 0xfbdfc0] mb P  I16..4: 14.1%  0.0%  0.0%  P16..4:  2.7%  0.0%  0.0%  0.0%  0.0%    skip:83.2%
[libx264 @ 0xfbdfc0] coded y,uvDC,uvAC intra: 8.2% 94.6% 83.0% inter: 0.0% 3.2% 0.7%
[libx264 @ 0xfbdfc0] i16 v,h,dc,p: 87%  1% 12%  0%
[libx264 @ 0xfbdfc0] i8c dc,h,v,p: 98%  1%  2%  0%
[libx264 @ 0xfbdfc0] kb/s:5688.52