Recherche avancée

Médias (9)

Mot : - Tags -/soundtrack

Autres articles (105)

  • L’agrémenter visuellement

    10 avril 2011

    MediaSPIP est basé sur un système de thèmes et de squelettes. Les squelettes définissent le placement des informations dans la page, définissant un usage spécifique de la plateforme, et les thèmes l’habillage graphique général.
    Chacun peut proposer un nouveau thème graphique ou un squelette et le mettre à disposition de la communauté.

  • 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

  • Ajouter des informations spécifiques aux utilisateurs et autres modifications de comportement liées aux auteurs

    12 avril 2011, par

    La manière la plus simple d’ajouter des informations aux auteurs est d’installer le plugin Inscription3. Il permet également de modifier certains comportements liés aux utilisateurs (référez-vous à sa documentation pour plus d’informations).
    Il est également possible d’ajouter des champs aux auteurs en installant les plugins champs extras 2 et Interface pour champs extras.

Sur d’autres sites (8215)

  • Anomalie #3403 (Nouveau) : Notice dans le forum de l’espace privé

    8 mars 2015, par Franck Dalot

    php 5.6.4
    prefix des tables : spipdev2
    SPIP 3.1.0-alpha [21929]

    Dans ecrire/ ?exec=forum&repondre=new si le message ou le titre contient moins de 10 caractères apparait :
    Notice : Undefined variable : ajouter_mot in C :\EasyPHP-DevServer-14.1VC11\data\localweb\projects\spipdev2\plugins-dist\forum\formulaires\forum_prive.php on line 82

  • FFMPEG command from Python 3.5 does not actually create audio file

    20 décembre 2017, par Nathan Blaine

    I have a Django web application that accepts user uploaded videos/audio and saves them into a folder ’../WebAppDirectory/media/recordings’.

    I am then using a speech to text API to get a rough transcription of the audio. This is working fine for .wav and .mp4 files, but the web app also accepts videos (.MOV) that I would like to first convert to .wav, then pass off to the API.

    Using ffmpeg from my command line like this

    ffmpeg -i C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_sample.MOV -ab 160k -ac 2 -ar 44100 -vn upload_sample.wav

    Correctly creates the .wav file from the original .MOV.

    However, when I run this from python with

    subprocess.check_call(command, shell=True)

    ffmpeg responds with

    File ’upload_sample.wav’ already exists. Overwrite ? [y/N]

    While Python tells me

    FileNotFoundError : [Errno 2] No such file or directory : ’C :\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_sample.wav’

    It is also worth noting that I do not see a ’upload_sample.wav’ file in the media/recordings/ directory.

    This leads me to believe that maybe Python and ffmpeg are looking in different folders, but I am not sure where I am going wrong. When I print the command from the subprocess.check_call and copy/paste it into cmd, the file is created as expected.

    Hoping someone with some experience with ffmpeg/Python subprocess can help shed some light ! Here are the files I am working with :

    Folder Structure

    DjangoWebApp
    |---media
    |---|---imgs
    |---|---recordings
    |---|---|---upload_sample.MOV
    |---uploaded_audio_to_text.py

    uploaded_audio_to_text.py

    import speech_recognition as sr
    from os import path
    import os
    import subprocess


    def speech_to_text(file_name):
       AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), 'media','recordings', file_name)
       print("Looking at path: ",AUDIO_FILE)
       # get extension
       AUDIO_FILE_EXT = os.path.splitext(AUDIO_FILE)[1]

       if(AUDIO_FILE_EXT == '.MOV'):
           print("File is not .wav: ", AUDIO_FILE_EXT, "found. Converting...")
           # We will use subprocess and ffmpeg to convert this .MOV file to .wav, so we can send to API
           temp_wav = os.path.splitext(file_name)[0] + '.wav'
           print("New audio file will be: ", temp_wav)
           # build CMD ffmpeg command
           command = "ffmpeg -i "
           command += AUDIO_FILE
           command += " -ab 160k -ac 2 -ar 44100 -vn "
           command += temp_wav

           print("Attempting to run this command: \n",command)
           print(subprocess.check_call(command, shell=True))
           print("Past Subprocess.call")
           AUDIO_FILE = path.join(path.dirname(path.realpath(__file__)), 'media','recordings', temp_wav)
           print("AUDIO_FILE now set to: ", AUDIO_FILE)

       else:
           # continue with what we are doing
           pass


       r = sr.Recognizer()
       with sr.AudioFile(AUDIO_FILE) as source:
           audio = r.record(source)  # read the entire audio file
           text_transcription = "Sentinel"
           # recognize speech using Microsoft Bing Voice Recognition
           BING_KEY = "MY_KEY_:)"
           try:
               text_transcription = r.recognize_bing(audio, key=BING_KEY)
           except sr.UnknownValueError:
               print("Microsoft Bing Voice Recognition could not understand audio")
           except sr.RequestError as e:
               print("Could not request results from Microsoft Bing Voice Recognition service; {0}".format(e))

       return text_transcription


    #my tests
    my_relative_file_path = "upload_sample.MOV"
    print(speech_to_text(my_relative_file_path))

    Console output (traceback and my print()’s)

    Looking at path:  C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_sample.MOV
    File is not .wav:  .MOV found. Converting...
    New audio file will be:  upload_sample.wav Attempting to run this command:
    ffmpeg -i C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_sample.MOV -ab 160k -ac 2 -ar 44100 -vn upload_sample.wav
    ffmpeg version git-2017-12-18-74f408c Copyright (c) 2000-2017 the FFmpeg developers   built with gcc 7.2.0 (GCC)  
    ----REMOVED SOME FFMPEG OUTPUT FOR BREVITY----
    File 'upload_sample.wav' already exists. Overwrite ? [y/N] y
    Stream mapping:   Stream #0:1 -> #0:0 (aac (native) -> pcm_s16le (native)) Press [q] to stop, [?] for help Output #0, wav, to 'upload_sample.wav':   Metadata:
       major_brand     : qt  
       minor_version   : 0
       compatible_brands: qt  
       com.apple.quicktime.creationdate: 2017-12-19T16:06:10-0500
       com.apple.quicktime.make: Apple
       com.apple.quicktime.model: iPhone 6
       com.apple.quicktime.software: 10.3.3
       ISFT            : Lavf58.3.100
       Stream #0:0(und): Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s (default)
       Metadata:
         creation_time   : 2017-12-19T21:06:11.000000Z
         handler_name    : Core Media Data Handler
         encoder         : Lavc58.8.100 pcm_s16le size=    1036kB time=00:00:06.01 bitrate=1411.3kbits/s speed=N/A     video:0kB audio:1036kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.007352%
    0
    Traceback (most recent call last): Past Subprocess.call  
    File "C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\uploaded_audio_to_text.py", line 53, in <module>
    AUDIO_FILE now set to:  C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\media\recordings\upload_sample.wav
       print(speech_to_text(my_relative_file_path))  
    File "C:\Users\Nathan\Desktop\MeetingRecorderWebAPP\uploaded_audio_to_text.py", line 36, in speech_to_text
       with sr.AudioFile(AUDIO_FILE) as source:  
    File "C:\Users\Nathan\AppData\Local\Programs\Python\Python36-32\lib\site-packages\speech_recognition\__init__.py", line 203, in __enter__
       self.audio_reader = wave.open(self.filename_or_fileobject, "rb")  
    File "C:\Users\Nathan\AppData\Local\Programs\Python\Python36-32\lib\wave.py", line 499, in open
       return Wave_read(f)  
    File "C:\Users\Nathan\AppData\Local\Programs\Python\Python36-32\lib\wave.py", line 159, in __init__
       f = builtins.open(f, 'rb')
    FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Nathan\\Desktop\\MeetingRecorderWebAPP\\media\\recordings\\upload_sample.wav'

    Process finished with exit code 1
    </module>
  • Safari sends excessive HTTP range requests during HTML5 MOV playback

    28 mai, par Lucy

    I am currently developing a web application based on React and Next.js, and I use the react-player library to play user-uploaded videos stored on AWS S3. The supported upload video formats are mp4, mov, and mkv, with codecs including H.264 or H.265 (HEVC).

    &#xA;

    Problem

    &#xA;

    However, some H.264 videos in the mov format exhibit noticeably poor playback performance only in the Safari browser. The videos do not play smoothly and frequently experience stuttering or delays.

    &#xA;

    How Safari Handles Range Requests (As I Understand It) :

    &#xA;

      &#xA;
    1. Safari first sends a normal GET request to check if the server supports Range requests. If the server responds with the header Accept-Ranges : bytes, Safari closes the connection.
    2. &#xA;

    3. Then, Safari sends a very small range request like Range : bytes=0-1 to confirm it receives a 206 Partial Content response.
    4. &#xA;

    5. Next, Safari requests some parts from the beginning and the end of the file to locate metadata such as the moov atom in MP4 files.
    6. &#xA;

    7. After that, actual streaming begins, but Safari does not request the entire file at once ; instead, it divides the needed parts into multiple small Range requests.
    8. &#xA;

    &#xA;

    Example of Actual Problematic Requests

    &#xA;

    Below are some of the Range requests Safari makes for the problematic .mov video (H.264 codec) :

    &#xA;

    # Request - 1&#xA;Connection: keep-alive&#xA;Range: bytes=0-1&#xA;&#xA;# Response&#xA;HTTP/1.1 206 Partial Content&#xA;Accept-Ranges: bytes&#xA;Content-Disposition: attachment;filename*=utf-8&#x27;&#x27;test.mov&#xA;Content-Length: 2&#xA;Content-Range: bytes 0-1/102801747&#xA;Content-Type: video/quicktime&#xA;&#xA;-------------------------------------&#xA;# Request - 2&#xA;Connection: Keep-Alive&#xA;Range: bytes=0-102801746&#xA;&#xA;# Response&#xA;HTTP/1.1 206 Partial Content&#xA;Accept-Ranges: bytes&#xA;Content-Disposition: attachment;filename*=utf-8&#x27;&#x27;test.mov&#xA;Content-Length: 102801747&#xA;Content-Range: bytes 0-102801746/102801747&#xA;Content-Type: video/quicktime&#xA;&#xA;-------------------------------------&#xA;# Request - 3&#xA;Connection: Keep-Alive&#xA;Range: bytes=102760448-102801746&#xA;&#xA;# Response - 3&#xA;HTTP/1.1 206 Partial Content&#xA;Accept-Ranges: bytes&#xA;Content-Disposition: attachment;filename*=utf-8&#x27;&#x27;test.mov&#xA;Content-Length: 41299&#xA;Content-Range: bytes 102760448-102801746/102801747&#xA;Content-Type: video/quicktime&#xA;&#xA;-------------------------------------&#xA;# Request - 4&#xA;Connection: keep-alive&#xA;Range: bytes=3014656-3080191 # 64KB&#xA;&#xA;# Response - 4&#xA;HTTP/1.1 206 Partial Content&#xA;Accept-Ranges: bytes&#xA;Content-Disposition: attachment;filename*=utf-8&#x27;&#x27;IMG_7929.mov&#xA;Content-Length: 65536&#xA;Content-Range: bytes 3014656-3080191/102801747&#xA;Content-Type: video/quicktime&#xA;

    &#xA;

    Safari continues to send hundreds of similar small Range requests repeatedly, gradually downloading the file.

    &#xA;

    This causes increased network load, which ultimately leads to video stuttering or playback delays.

    &#xA;

    Example of another .mov file that works properly :

    &#xA;

    In contrast, another .mov video using the same format and codec (H.264) sends Range requests over much larger byte ranges, downloading about 30MB of data at once. In this case, the video plays smoothly.

    &#xA;

    # Request &#xA;Connection: Keep-Alive&#xA;Range: bytes=1310534-673918954 # Request : 672MB, Actual Downloaded : 32MB&#xA;&#xA;# Response&#xA;Accept-Ranges: bytes&#xA;Content-Disposition: attachment;filename*=utf-8&#x27;&#x27;mov-example-video-download-4k-uhd-3840x2160.mov&#xA;Content-Length: 672608421&#xA;Content-Range: bytes 1310534-673918954/673918955&#xA;Content-Type: video/quicktime&#xA;

    &#xA;

    Question

    &#xA;

    In Safari, for certain video files, the browser repeatedly closes the connection after receiving only a few kilobytes per request and immediately sends the next request. As a result, dozens or even hundreds of small range requests occur consecutively. This causes increased connection overhead and latency, and although the web server can deliver data at sufficient speed, the player does not receive data in time, leading to poor and stuttering video playback.

    &#xA;

      &#xA;
    1. What could be the reason Safari repeatedly makes these very small requests for certain files ?
    2. &#xA;

    3. Could the internal structure of the video file (such as the moov atom) influence this request pattern ?
    4. &#xA;

    &#xA;

    f you have any similar experience or advice, please share.

    &#xA;

    What I'ved tried

    &#xA;

      &#xA;
    • Using ffmpeg to move the moov atom to the beginning of the file with -movflags faststart does not resolve the issue — the same problem persists.
    • &#xA;

    • Converting the exact same video to MP4 format and testing it results in normal playback without issues.
    • &#xA;

    &#xA;

    Test Environment

    &#xA;

      &#xA;
    • Macbook pro 16
    • &#xA;

    • mac OS - Sequoia 15.5
    • &#xA;

    • Safari - Latest
    • &#xA;

    &#xA;

    File information

    &#xA;

    Due to company policy, I am unable to share the problematic video files directly. However, I am attaching the file information obtained via ffprobe for your reference.

    &#xA;

    ffprobe -v error -show_format -show_streams -print_format json test.mov&#xA;&#xA;{&#xA;    "streams": [&#xA;        {&#xA;            "index": 0,&#xA;            "codec_name": "h264",&#xA;            "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",&#xA;            "profile": "High",&#xA;            "codec_type": "video",&#xA;            "codec_tag_string": "avc1",&#xA;            "codec_tag": "0x31637661",&#xA;            "width": 3840,&#xA;            "height": 2160,&#xA;            "coded_width": 3840,&#xA;            "coded_height": 2160,&#xA;            "closed_captions": 0,&#xA;            "film_grain": 0,&#xA;            "has_b_frames": 0,&#xA;            "pix_fmt": "yuv420p",&#xA;            "level": 51,&#xA;            "color_range": "tv",&#xA;            "color_space": "bt709",&#xA;            "color_transfer": "bt709",&#xA;            "color_primaries": "bt709",&#xA;            "chroma_location": "left",&#xA;            "field_order": "progressive",&#xA;            "refs": 1,&#xA;            "is_avc": "true",&#xA;            "nal_length_size": "4",&#xA;            "id": "0x1",&#xA;            "r_frame_rate": "30000/1001",&#xA;            "avg_frame_rate": "18200/607",&#xA;            "time_base": "1/600",&#xA;            "start_pts": 0,&#xA;            "start_time": "0.000000",&#xA;            "duration_ts": 10925,&#xA;            "duration": "18.208333",&#xA;            "bit_rate": "44900923",&#xA;            "bits_per_raw_sample": "8",&#xA;            "nb_frames": "546",&#xA;            "extradata_size": 158,&#xA;            "disposition": {&#xA;                "default": 1,&#xA;                "dub": 0,&#xA;                "original": 0,&#xA;                "comment": 0,&#xA;                "lyrics": 0,&#xA;                "karaoke": 0,&#xA;                "forced": 0,&#xA;                "hearing_impaired": 0,&#xA;                "visual_impaired": 0,&#xA;                "clean_effects": 0,&#xA;                "attached_pic": 0,&#xA;                "timed_thumbnails": 0,&#xA;                "non_diegetic": 0,&#xA;                "captions": 0,&#xA;                "descriptions": 0,&#xA;                "metadata": 0,&#xA;                "dependent": 0,&#xA;                "still_image": 0,&#xA;                "multilayer": 0&#xA;            },&#xA;            "tags": {&#xA;                "creation_time": "",&#xA;                "language": "und",&#xA;                "handler_name": "Core Media Video",&#xA;                "vendor_id": "[0][0][0][0]",&#xA;                "encoder": "H.264"&#xA;            }&#xA;        },&#xA;        {&#xA;            "index": 1,&#xA;            "codec_name": "aac",&#xA;            "codec_long_name": "AAC (Advanced Audio Coding)",&#xA;            "profile": "LC",&#xA;            "codec_type": "audio",&#xA;            "codec_tag_string": "mp4a",&#xA;            "codec_tag": "0x6134706d",&#xA;            "sample_fmt": "fltp",&#xA;            "sample_rate": "44100",&#xA;            "channels": 2,&#xA;            "channel_layout": "stereo",&#xA;            "bits_per_sample": 0,&#xA;            "initial_padding": 0,&#xA;            "id": "0x2",&#xA;            "r_frame_rate": "0/0",&#xA;            "avg_frame_rate": "0/0",&#xA;            "time_base": "1/44100",&#xA;            "start_pts": 0,&#xA;            "start_time": "0.000000",&#xA;            "duration_ts": 802988,&#xA;            "duration": "18.208345",&#xA;            "bit_rate": "187218",&#xA;            "nb_frames": "787",&#xA;            "extradata_size": 2,&#xA;            "disposition": {&#xA;                "default": 1,&#xA;                "dub": 0,&#xA;                "original": 0,&#xA;                "comment": 0,&#xA;                "lyrics": 0,&#xA;                "karaoke": 0,&#xA;                "forced": 0,&#xA;                "hearing_impaired": 0,&#xA;                "visual_impaired": 0,&#xA;                "clean_effects": 0,&#xA;                "attached_pic": 0,&#xA;                "timed_thumbnails": 0,&#xA;                "non_diegetic": 0,&#xA;                "captions": 0,&#xA;                "descriptions": 0,&#xA;                "metadata": 0,&#xA;                "dependent": 0,&#xA;                "still_image": 0,&#xA;                "multilayer": 0&#xA;            },&#xA;            "tags": {&#xA;                "creation_time": "",&#xA;                "language": "und",&#xA;                "handler_name": "Core Media Audio",&#xA;                "vendor_id": "[0][0][0][0]"&#xA;            }&#xA;        },&#xA;        {&#xA;            "index": 2,&#xA;            "codec_type": "data",&#xA;            "codec_tag_string": "mebx",&#xA;            "codec_tag": "0x7862656d",&#xA;            "id": "0x3",&#xA;            "r_frame_rate": "0/0",&#xA;            "avg_frame_rate": "0/0",&#xA;            "time_base": "1/600",&#xA;            "start_pts": 0,&#xA;            "start_time": "0.000000",&#xA;            "duration_ts": 10925,&#xA;            "duration": "18.208333",&#xA;            "bit_rate": "4",&#xA;            "nb_frames": "1",&#xA;            "disposition": {&#xA;                "default": 1,&#xA;                "dub": 0,&#xA;                "original": 0,&#xA;                "comment": 0,&#xA;                "lyrics": 0,&#xA;                "karaoke": 0,&#xA;                "forced": 0,&#xA;                "hearing_impaired": 0,&#xA;                "visual_impaired": 0,&#xA;                "clean_effects": 0,&#xA;                "attached_pic": 0,&#xA;                "timed_thumbnails": 0,&#xA;                "non_diegetic": 0,&#xA;                "captions": 0,&#xA;                "descriptions": 0,&#xA;                "metadata": 0,&#xA;                "dependent": 0,&#xA;                "still_image": 0,&#xA;                "multilayer": 0&#xA;            },&#xA;            "tags": {&#xA;                "creation_time": "",&#xA;                "language": "und",&#xA;                "handler_name": "Core Media Metadata"&#xA;            }&#xA;        },&#xA;        {&#xA;            "index": 3,&#xA;            "codec_type": "data",&#xA;            "codec_tag_string": "mebx",&#xA;            "codec_tag": "0x7862656d",&#xA;            "id": "0x4",&#xA;            "r_frame_rate": "0/0",&#xA;            "avg_frame_rate": "0/0",&#xA;            "time_base": "1/600",&#xA;            "start_pts": 0,&#xA;            "start_time": "0.000000",&#xA;            "duration_ts": 10925,&#xA;            "duration": "18.208333",&#xA;            "bit_rate": "6756",&#xA;            "nb_frames": "80",&#xA;            "disposition": {&#xA;                "default": 1,&#xA;                "dub": 0,&#xA;                "original": 0,&#xA;                "comment": 0,&#xA;                "lyrics": 0,&#xA;                "karaoke": 0,&#xA;                "forced": 0,&#xA;                "hearing_impaired": 0,&#xA;                "visual_impaired": 0,&#xA;                "clean_effects": 0,&#xA;                "attached_pic": 0,&#xA;                "timed_thumbnails": 0,&#xA;                "non_diegetic": 0,&#xA;                "captions": 0,&#xA;                "descriptions": 0,&#xA;                "metadata": 0,&#xA;                "dependent": 0,&#xA;                "still_image": 0,&#xA;                "multilayer": 0&#xA;            },&#xA;            "tags": {&#xA;                "creation_time": "",&#xA;                "language": "und",&#xA;                "handler_name": "Core Media Metadata"&#xA;            }&#xA;        },&#xA;        {&#xA;            "index": 4,&#xA;            "codec_type": "data",&#xA;            "codec_tag_string": "mebx",&#xA;            "codec_tag": "0x7862656d",&#xA;            "id": "0x5",&#xA;            "r_frame_rate": "0/0",&#xA;            "avg_frame_rate": "0/0",&#xA;            "time_base": "1/600",&#xA;            "start_pts": 0,&#xA;            "start_time": "0.000000",&#xA;            "duration_ts": 10925,&#xA;            "duration": "18.208333",&#xA;            "bit_rate": "50764",&#xA;            "nb_frames": "546",&#xA;            "disposition": {&#xA;                "default": 1,&#xA;                "dub": 0,&#xA;                "original": 0,&#xA;                "comment": 0,&#xA;                "lyrics": 0,&#xA;                "karaoke": 0,&#xA;                "forced": 0,&#xA;                "hearing_impaired": 0,&#xA;                "visual_impaired": 0,&#xA;                "clean_effects": 0,&#xA;                "attached_pic": 0,&#xA;                "timed_thumbnails": 0,&#xA;                "non_diegetic": 0,&#xA;                "captions": 0,&#xA;                "descriptions": 0,&#xA;                "metadata": 0,&#xA;                "dependent": 0,&#xA;                "still_image": 0,&#xA;                "multilayer": 0&#xA;            },&#xA;            "tags": {&#xA;                "creation_time": "",&#xA;                "language": "und",&#xA;                "handler_name": "Core Media Metadata"&#xA;            }&#xA;        },&#xA;        {&#xA;            "index": 5,&#xA;            "codec_type": "data",&#xA;            "codec_tag_string": "mebx",&#xA;            "codec_tag": "0x7862656d",&#xA;            "id": "0x6",&#xA;            "r_frame_rate": "0/0",&#xA;            "avg_frame_rate": "0/0",&#xA;            "time_base": "1/600",&#xA;            "start_pts": 0,&#xA;            "start_time": "0.000000",&#xA;            "duration_ts": 10925,&#xA;            "duration": "18.208333",&#xA;            "bit_rate": "19",&#xA;            "nb_frames": "1",&#xA;            "disposition": {&#xA;                "default": 1,&#xA;                "dub": 0,&#xA;                "original": 0,&#xA;                "comment": 0,&#xA;                "lyrics": 0,&#xA;                "karaoke": 0,&#xA;                "forced": 0,&#xA;                "hearing_impaired": 0,&#xA;                "visual_impaired": 0,&#xA;                "clean_effects": 0,&#xA;                "attached_pic": 0,&#xA;                "timed_thumbnails": 0,&#xA;                "non_diegetic": 0,&#xA;                "captions": 0,&#xA;                "descriptions": 0,&#xA;                "metadata": 0,&#xA;                "dependent": 0,&#xA;                "still_image": 0,&#xA;                "multilayer": 0&#xA;            },&#xA;            "tags": {&#xA;                "creation_time": "",&#xA;                "language": "und",&#xA;                "handler_name": "Core Media Metadata"&#xA;            }&#xA;        }&#xA;    ],&#xA;    "format": {&#xA;        "filename": "test.mov",&#xA;        "nb_streams": 6,&#xA;        "nb_programs": 0,&#xA;        "nb_stream_groups": 0,&#xA;        "format_name": "mov,mp4,m4a,3gp,3g2,mj2",&#xA;        "format_long_name": "QuickTime / MOV",&#xA;        "start_time": "0.000000",&#xA;        "duration": "18.208345",&#xA;        "size": "102801747",&#xA;        "bit_rate": "45166871",&#xA;        "probe_score": 100,&#xA;        "tags": {&#xA;            "major_brand": "qt  ",&#xA;            "minor_version": "0",&#xA;            "compatible_brands": "qt  ",&#xA;            "creation_time": "",&#xA;            "com.apple.quicktime.location.accuracy.horizontal": "76.200233",&#xA;            "com.apple.quicktime.full-frame-rate-playback-intent": "0",&#xA;            "com.apple.quicktime.location.ISO6709": "",&#xA;            "com.apple.quicktime.make": "Apple",&#xA;            "com.apple.quicktime.model": "iPhone 15 Pro",&#xA;            "com.apple.quicktime.software": "18.4.1",&#xA;            "com.apple.quicktime.creationdate": ""&#xA;        }&#xA;    }&#xA;}&#xA;

    &#xA;