Recherche avancée

Médias (9)

Mot : - Tags -/soundtrack

Autres articles (35)

  • Keeping control of your media in your hands

    13 avril 2011, par

    The vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
    While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
    MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
    MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...)

  • Submit bugs and patches

    13 avril 2011

    Unfortunately a software is never perfect.
    If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
    If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
    You may also (...)

  • MediaSPIP v0.2

    21 juin 2013, par

    MediaSPIP 0.2 is the first MediaSPIP stable release.
    Its official release date is June 21, 2013 and is announced here.
    The zip file provided here only contains the sources of MediaSPIP in its standalone version.
    To get a working installation, you must manually install all-software dependencies on the server.
    If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...)

Sur d’autres sites (5703)

  • Parse dynamic mpd file with Media Source Extensions

    17 février 2023, par FrankC

    I just started learning about adaptive streaming, and currently I'm working on a project that needs showing a live video. In order to control some of the elements in mpd file, I determined to use MSE instead of dash.js. I refer to the code at the following URL :https://learn.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/samples/dn551368(v=vs.85)
But I found out that there is no "Initialization" tag or "range" attribute in my mpd file. I don't find any relative attribute as well. By the way I'm use nginx-rtmp + ffmpeg to generate dash file.
So here is my dash file looks like

    


    &lt;?xml version="1.0"?>&#xA; &#xA;  <period start="PT0S">&#xA;    &#xA;      &#xA;        &#xA;          <segmenttimeline>&#xA;             <s t="0" d="10000"></s>&#xA;             <s t="10000" d="10000"></s>&#xA;             <s t="20000" d="5000"></s>&#xA;             <s t="25000" d="10000"></s>&#xA;          </segmenttimeline>&#xA;        &#xA;      &#xA;    &#xA;  </period>&#xA;&#xA;

    &#xA;

    My question is :&#xA;1.Did I have any missing parameters in using ffmpeg or nginx-rtmp resulting in losting tag in mpd file ?&#xA;2.Or there is other way to setup "Initialization"/"range" attribute and let my program work ?&#xA;3.I also curious about why my mpd file doesn't have a baseURL element ?

    &#xA;

    ※My mpd file works fine with dash.js, I can see the video properly

    &#xA;

    THANKS A LOT

    &#xA;

  • Flask app using OpenCv crash when i start recording

    17 mai 2023, par Mulham Darwish

    I build this flask app to live stream security cameras and the live stream works with the screenshot function but when start recording it crash but few times same code it worked and saved the video here the code. with the html file using js.

    &#xA;

    from flask import Flask, render_template, Response, request&#xA;import cv2&#xA;import os&#xA;import time&#xA;import threading&#xA;import requests&#xA;&#xA;app = Flask(__name__)&#xA;&#xA;# Define the IP cameras&#xA;cameras = [&#xA;    {&#x27;url&#x27;: &#x27;rtsp://****:*****@******&#x27;, &#x27;name&#x27;: &#x27;Camera 1&#x27;},&#xA;    {&#x27;url&#x27;: &#x27;rtsp://****:*****@******&#x27;, &#x27;name&#x27;: &#x27;Camera 2&#x27;},&#xA;    {&#x27;url&#x27;: &#x27;rtsp://****:*****@******&#x27;, &#x27;name&#x27;: &#x27;Camera 3&#x27;},&#xA;    {&#x27;url&#x27;: &#x27;rtsp://****:*****@******&#x27;, &#x27;name&#x27;: &#x27;Camera 4&#x27;}&#xA;]&#xA;&#xA;# Create a VideoCapture object for each camera&#xA;capture_objs = [cv2.VideoCapture(cam[&#x27;url&#x27;]) for cam in cameras]&#xA;stop_events = {i: threading.Event() for i in range(len(cameras))}&#xA;# Define the directory to save the recorded videos&#xA;recording_dir = os.path.join(os.getcwd(), &#x27;recordings&#x27;)&#xA;&#xA;# Ensure the recording directory exists&#xA;if not os.path.exists(recording_dir):&#xA;    os.makedirs(recording_dir)&#xA;&#xA;# Define the function to capture and save a video&#xA;def record_video(camera_index, stop_recording):&#xA;    # Define the codec and file extension&#xA;    fourcc = cv2.VideoWriter_fourcc(*&#x27;mp4v&#x27;)&#xA;    file_extension = &#x27;.mp4&#x27;&#xA;&#xA;    # Get the current timestamp for the filename&#xA;    timestamp = time.strftime("%Y%m%d-%H%M%S")&#xA;&#xA;    # Define the filename and path&#xA;    filename = f&#x27;{cameras[camera_index]["name"]}_{timestamp}{file_extension}&#x27;&#xA;    filepath = os.path.join(recording_dir, filename)&#xA;&#xA;    # Create a VideoWriter object to save the video&#xA;    width = int(capture_objs[camera_index].get(cv2.CAP_PROP_FRAME_WIDTH))&#xA;    height = int(capture_objs[camera_index].get(cv2.CAP_PROP_FRAME_HEIGHT))&#xA;    fps = int(capture_objs[camera_index].get(cv2.CAP_PROP_FPS))&#xA;    video_writer = cv2.VideoWriter(filepath, fourcc, fps, (width, height))&#xA;&#xA;    # Capture frames and write them to the file&#xA;    while True:&#xA;        if stop_recording.is_set():&#xA;            break  # stop recording if stop_recording is set&#xA;        ret, frame = capture_objs[camera_index].read()&#xA;        if ret:&#xA;            video_writer.write(frame)&#xA;        else:&#xA;            break&#xA;&#xA;    # Release the VideoWriter object and the VideoCapture object&#xA;    video_writer.release()&#xA;    capture_objs[camera_index].release()&#xA;&#xA;@app.route(&#x27;/&#x27;)&#xA;def index():&#xA;    # Render the index page with the list of cameras&#xA;    return render_template(&#x27;index.html&#x27;, cameras=cameras)&#xA;&#xA;def generate(camera_index):&#xA;    # Generate frames from the video feed&#xA;    while True:&#xA;        ret, frame = capture_objs[camera_index].read()&#xA;        if not ret:&#xA;            break&#xA;&#xA;        # Encode the frame as JPEG&#xA;        _, jpeg = cv2.imencode(&#x27;.jpg&#x27;, frame)&#xA;&#xA;        # Yield the frame as a Flask response&#xA;        yield (b&#x27;--frame\r\n&#x27;&#xA;               b&#x27;Content-Type: image/jpeg\r\n\r\n&#x27; &#x2B; jpeg.tobytes() &#x2B; b&#x27;\r\n&#x27;)&#xA;&#xA;@app.route(&#x27;/video_feed&#x27;)&#xA;def video_feed():&#xA;    # Get the camera index from the request arguments&#xA;    camera_index = int(request.args.get(&#x27;camera_index&#x27;))&#xA;&#xA;    # Generate the video feed&#xA;    return Response(generate(camera_index),&#xA;                    mimetype=&#x27;multipart/x-mixed-replace; boundary=frame&#x27;)&#xA;&#xA;@app.route(&#x27;/record&#x27;, methods=[&#x27;POST&#x27;])&#xA;def record():&#xA;    # Get the camera index from the request form&#xA;    camera_index = int(request.form[&#x27;camera_index&#x27;])&#xA;&#xA;    stop_recording = stop_events[camera_index]  # get the stop_recording event for the camera&#xA;    thread = threading.Thread(target=record_video, args=(camera_index, stop_recording))&#xA;    thread.start()  # start a thread to record video&#xA;&#xA;    # Return a response indicating that the recording has started&#xA;    return &#x27;Recording started.&#x27;&#xA;&#xA;@app.route(&#x27;/stop_record&#x27;, methods=[&#x27;POST&#x27;])&#xA;def stop_record():&#xA;    # Get the camera index from the request form&#xA;    camera_index = int(request.form[&#x27;camera_index&#x27;])&#xA;&#xA;    # Set the stop_recording event for the corresponding camera thread&#xA;    stop_events[camera_index].set()&#xA;&#xA;    # Return a response indicating that recording has been stopped&#xA;    return &#x27;Recording stopped.&#x27;&#xA;&#xA;@app.route(&#x27;/screenshot&#x27;, methods=[&#x27;POST&#x27;])&#xA;def take_screenshot():&#xA;    # Take a screenshot of the video stream and save it as a file&#xA;    camera = capture_objs[int(request.form[&#x27;camera_id&#x27;])]&#xA;    success, frame = camera.read()&#xA;    if success:&#xA;        timestamp = time.strftime("%Y%m%d-%H%M%S")&#xA;        filename = f&#x27;screenshot_{timestamp}.jpg&#x27;&#xA;        cv2.imwrite(filename, frame)&#xA;        return &#x27;Screenshot taken and saved&#x27;&#xA;    else:&#xA;        return &#x27;Failed to take screenshot&#x27;&#xA;&#xA;if __name__ == &#x27;__main__&#x27;:&#xA;    app.run()&#xA;

    &#xA;

    I tried to update ffmpeg to the latest version and installed pip install opencv-python-headless and installed pip install opencv-python but most of the time i come to this crash code

    &#xA;

    * Serving Flask app &#x27;run&#x27;&#xA;* Debug mode: off&#xA;WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.&#xA; * Running on http://127.0.0.1:5000&#xA;Press CTRL&#x2B;C to quit&#xA;127.0.0.1 - - [17/May/2023 13:24:11] "GET / HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:11] "GET /video_feed?camera_index=0 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:11] "GET /video_feed?camera_index=1 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:11] "GET /video_feed?camera_index=2 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:11] "GET /video_feed?camera_index=3 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:44] "GET / HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:45] "GET /video_feed?camera_index=3 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:45] "GET /video_feed?camera_index=0 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:45] "GET /video_feed?camera_index=1 HTTP/1.1" 200 -&#xA;127.0.0.1 - - [17/May/2023 13:24:45] "GET /video_feed?camera_index=2 HTTP/1.1" 200 -&#xA;[h264 @ 0x5605285fc5c0] error while decoding MB 28 29, bytestream -9&#xA;[h264 @ 0x560529110040] error while decoding MB 15 37, bytestream -6&#xA;[h264 @ 0x560528624980] error while decoding MB 45 45, bytestream -23&#xA;[h264 @ 0x5605286f1900] error while decoding MB 50 34, bytestream -7&#xA;[h264 @ 0x5605285fc5c0] error while decoding MB 25 9, bytestream -17&#xA;[h264 @ 0x5605292b0080] error while decoding MB 28 41, bytestream -5&#xA;[h264 @ 0x560528660040] error while decoding MB 101 45, bytestream -17&#xA;[h264 @ 0x5605285fc5c0] error while decoding MB 42 44, bytestream -5&#xA;[h264 @ 0x5605286f1900] error while decoding MB 118 42, bytestream -9&#xA;[h264 @ 0x560529110040] error while decoding MB 92 43, bytestream -5&#xA;[h264 @ 0x560528660040] error while decoding MB 99 34, bytestream -11&#xA;[h264 @ 0x56052932b0c0] error while decoding MB 92 36, bytestream -13&#xA;[h264 @ 0x560528667ac0] error while decoding MB 44 54, bytestream -5&#xA;[h264 @ 0x560529110040] error while decoding MB 93 33, bytestream -7&#xA;[h264 @ 0x5605286dd880] error while decoding MB 27 37, bytestream -19&#xA;[h264 @ 0x560528660040] error while decoding MB 66 56, bytestream -9&#xA;127.0.0.1 - - [17/May/2023 13:36:45] "POST /record HTTP/1.1" 200 -&#xA;Assertion fctx->async_lock failed at libavcodec/pthread_frame.c:175&#xA;Aborted (core dumped)&#xA;

    &#xA;

  • Code can not read property 1 of undefined [closed]

    25 mai 2023, par Jesse Copas

    I'm a very new programmer and am working on a Tdarr plugin in JS.&#xA;Everything works fine until a 4k file tries to get transcoded and it fails with this log

    &#xA;

    2023-05-24T19:09:54.906Z ZoBKWMMKG:Node\[hidden-hog\]:Worker\[tall-tuna\]:{"pluginInputs":{"BitRate":"4000","ResolutionSelection":"1080p","Container":"mkv","AudioType":"AAC","FrameRate":"24"}}&#xA;&#xA;2023-05-24T19:09:54.907Z ZoBKWMMKG:Node\[hidden-hog\]:Worker\[tall-tuna\]:Error TypeError: Cannot read property &#x27;1&#x27; of undefined&#xA;

    &#xA;

    It's saying that it's unable to read property 1 of undefined and I'm looked and looked and looked and can't find what it is referring to. Hoping to get another set of eyes on it&#xA;The plugin Code is here

    &#xA;

    /* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */&#xA;/* eslint-disable no-restricted-globals */&#xA;const details = () => ({&#xA;  id: &#x27;Tdarr_Plugin_Jeso_AV1_HandBrake_Transcode&#x27;,&#xA;  Stage: &#x27;Pre-processing&#x27;,&#xA;  Name: &#x27;AV1 HandBrake Transcoder&#x27;,&#xA;  Type: &#x27;Video&#x27;,&#xA;  Operation: &#x27;Transcode&#x27;,&#xA;  Description: &#x27;Transcodes to AV1 at the selected Bitrate. This is best used with Remux Files.&#x27;,&#xA;  Version: &#x27;2.1.3&#x27;,&#xA;  Tags: &#x27;HandBrake,configurable&#x27;,&#xA;  Inputs: [&#xA;    {&#xA;      name: &#x27;BitRate&#x27;,&#xA;      type: &#x27;string&#x27;,&#xA;      defaultValue: &#x27;4000&#x27;,&#xA;      inputUI: {&#xA;        type: &#x27;text&#x27;,&#xA;      },&#xA;      tooltip: `&#xA;        ~ Requested Bitrate ~ \\n&#xA;        Put in the Bitrate you want to process to in Kbps. For example 4000Kbps is 4Mbps. `,&#xA;    },&#xA;    {&#xA;      name: &#x27;ResolutionSelection&#x27;,&#xA;      type: &#x27;string&#x27;,&#xA;      defaultValue: &#x27;1080p&#x27;,&#xA;      inputUI: {&#xA;        type: &#x27;dropdown&#x27;,&#xA;        options: [&#xA;          &#x27;8KUHD&#x27;,&#xA;          &#x27;4KUHD&#x27;,&#xA;          &#x27;1080p&#x27;,&#xA;          &#x27;720p&#x27;,&#xA;          &#x27;480p&#x27;,&#xA;        ],&#xA;      },&#xA;      // eslint-disable-next-line max-len&#xA;      tooltip: &#x27;Any Resolution larger than this will become this Resolution same as the bitrate if the Res is lower than the selected it will use the res of the file as to not cause bloating of file size.&#x27;,&#xA;    },&#xA;    {&#xA;      name: &#x27;Container&#x27;,&#xA;      type: &#x27;string&#x27;,&#xA;      defaultValue: &#x27;mkv&#x27;,&#xA;      inputUI: {&#xA;        type: &#x27;dropdown&#x27;,&#xA;        options: [&#xA;          &#x27;mp4&#x27;,&#xA;          &#x27;mkv&#x27;,&#xA;        ],&#xA;      },&#xA;      tooltip: ` Container Type \\n\\n&#xA;          mkv or mp4.\\n`,&#xA;    },&#xA;    {&#xA;      name: &#x27;AudioType&#x27;,&#xA;      type: &#x27;string&#x27;,&#xA;      defaultValue: &#x27;AAC&#x27;,&#xA;      inputUI: {&#xA;        type: &#x27;dropdown&#x27;,&#xA;        options: [&#xA;          &#x27;AAC&#x27;,&#xA;          &#x27;EAC3&#x27;,&#xA;          &#x27;MP3&#x27;,&#xA;          &#x27;Vorbis&#x27;,&#xA;          &#x27;Flac16&#x27;,&#xA;          &#x27;Flac24&#x27;,&#xA;        ],&#xA;      },&#xA;      // eslint-disable-next-line max-len&#xA;      tooltip: &#x27;Set Audio container type that you want to use&#x27;,&#xA;    },&#xA;    {&#xA;      name: &#x27;FrameRate&#x27;,&#xA;      type: &#x27;string&#x27;,&#xA;      defaultValue: &#x27;24&#x27;,&#xA;      inputUI: {&#xA;        type: &#x27;text&#x27;,&#xA;      },&#xA;      // eslint-disable-next-line max-len&#xA;      tooltip: &#x27;If the files framerate is higher than 24 and you want to maintain that framerate you can do so here&#x27;,&#xA;    },&#xA;  ],&#xA;});&#xA;const MediaInfo = {&#xA;  videoHeight: &#x27;&#x27;,&#xA;  videoWidth: &#x27;&#x27;,&#xA;  videoFPS: &#x27;&#x27;,&#xA;  videoBR: &#x27;&#x27;,&#xA;  videoBitDepth: &#x27;&#x27;,&#xA;  overallBR: &#x27;&#x27;,&#xA;  videoResolution: &#x27;&#x27;,&#xA;}; // var MediaInfo&#xA;// Easier for our functions if response has global scope.&#xA;const response = {&#xA;  processFile: false,&#xA;  preset: &#x27;&#x27;,&#xA;  container: &#x27;.mkv&#x27;,&#xA;  handBrakeMode: true,&#xA;  FFmpegMode: false,&#xA;  reQueueAfter: true,&#xA;  infoLog: &#x27;&#x27;,&#xA;}; // var response&#xA;// Finds the first video stream and populates some useful variables&#xA;function getMediaInfo(file) {&#xA;  let videoIdx = -1;&#xA;  for (let i = 0; i &lt; file.ffProbeData.streams.length; i &#x2B;= 1) {&#xA;    const strstreamType = file.ffProbeData.streams[i].codec_type.toLowerCase();&#xA;    // Looking For Video&#xA;    // Check if stream is a video.&#xA;    if (videoIdx === -1 &amp;&amp; strstreamType === &#x27;video&#x27;) {&#xA;      videoIdx = i;&#xA;      // get video streams resolution&#xA;      MediaInfo.videoResolution = `${file.ffProbeData.streams[i].height}x${file.ffProbeData.streams[i].width}`;&#xA;      MediaInfo.videoHeight = Number(file.ffProbeData.streams[i].height);&#xA;      MediaInfo.videoWidth = Number(file.ffProbeData.streams[i].width);&#xA;      MediaInfo.videoFPS = Number(file.mediaInfo.track[i &#x2B; 1].FrameRate) || 25;&#xA;      // calulate bitrate from dimensions and fps of file&#xA;      MediaInfo.videoBR = (MediaInfo.videoHeight * MediaInfo.videoWidth * MediaInfo.videoFPS * 0.08).toFixed(0);&#xA;    }&#xA;  }&#xA;} // end  getMediaInfo()&#xA;// define resolution order from ResolutionSelection from biggest to smallest&#xA;const resolutionOrder = [&#x27;8KUHD&#x27;, &#x27;4KUHD&#x27;, &#x27;1080p&#x27;, &#x27;720p&#x27;, &#x27;480p&#x27;];&#xA;// define the width and height of each resolution from the resolution order&#xA;const resolutionsdimensions = {&#xA;  &#x27;8KUHD&#x27;: &#x27;--width 7680 --height 4320&#x27;,&#xA;  &#x27;4KUHD&#x27;: &#x27;--width 3840 --height 2160&#x27;,&#xA;  &#x27;1080p&#x27;: &#x27;--width 1920 --height 1080&#x27;,&#xA;  &#x27;720p&#x27;: &#x27;--width 1280 --height 720&#x27;,&#xA;  &#x27;480p&#x27;: &#x27;--width 640 --height 480&#x27;,&#xA;};&#xA;// eslint-disable-next-line no-unused-vars&#xA;const plugin = (file, librarySettings, inputs) => {&#xA;  // eslint-disable-next-line no-unused-vars&#xA;  const importFresh = require(&#x27;import-fresh&#x27;);&#xA;  // eslint-disable-next-line no-unused-vars&#xA;  const library = importFresh(&#x27;../methods/library.js&#x27;);&#xA;  // eslint-disable-next-line no-unused-vars&#xA;  const lib = require(&#x27;../methods/lib&#x27;)();&#xA;  // Get the selected resolution from the &#x27;ResolutionSelection&#x27; variable&#xA;  const selectedResolution = inputs.ResolutionSelection;&#xA;  getMediaInfo(file);&#xA;  // use mediainfo to match height and width to a resolution on resolutiondimensions&#xA;  let dimensions = resolutionsdimensions[selectedResolution];&#xA;  // if the file is smaller than the selected resolution then use the file resolution&#xA;  if (MediaInfo.videoHeight &lt; dimensions.split(&#x27; &#x27;)[3] || MediaInfo.videoWidth &lt; dimensions.split(&#x27; &#x27;)[1]) {&#xA;    dimensions = `--width ${MediaInfo.videoWidth} --height ${MediaInfo.videoHeight}`;&#xA;    // eslint-disable-next-line brace-style&#xA;  }&#xA;  // read the bitrate of the video stream&#xA;  let videoBitRate = MediaInfo.videoBR;&#xA;  // if videoBitrate is over 1000000 devide by 100 to get the bitrate in Kbps&#xA;  if (videoBitRate > 1000000) {&#xA;    videoBitRate /= 100;&#xA;  } else { videoBitRate /= 1000; }&#xA;  // if VideoBitrate is smaller than selected bitrate then use the videoBitrate&#xA;  if (videoBitRate &lt; inputs.BitRate) {&#xA;    // eslint-disable-next-line no-param-reassign&#xA;    inputs.BitRate = videoBitRate;&#xA;    // eslint-disable-next-line brace-style&#xA;  }&#xA;  // if VideoBitrate is larger than selected bitrate then use the selected bitrate&#xA;  else {&#xA;    // eslint-disable-next-line no-self-assign, no-param-reassign&#xA;    inputs.BitRate = inputs.BitRate;&#xA;  }&#xA;&#xA;  //Skip Transcoding if File is already AV1&#xA;  if (file.ffProbeData.streams[0].codec_name === &#x27;av1&#x27;) {&#xA;    response.processFile = false;&#xA;    response.infoLog &#x2B;= &#x27;File is already AV1 \n&#x27;;&#xA;    return response;&#xA;  }&#xA;  // eslint-disable-next-line no-constant-condition&#xA;  if ((true) || file.forceProcessing === true) {&#xA;    // eslint-disable-next-line max-len&#xA;    response.preset = `--encoder svt_av1 -b ${inputs.BitRate} -r ${inputs.FrameRate} -E ${inputs.AudioType} -f ${inputs.Container} --no-optimize ${dimensions} --crop 0:0:0:0`;&#xA;    response.container = `.${inputs.Container}`;&#xA;    response.handbrakeMode = true;&#xA;    response.ffmpegMode = false;&#xA;    response.processFile = true;&#xA;    response.infoLog &#x2B;= `File is being transcoded at ${inputs.BitRate} Kbps to ${dimensions} as ${inputs.Container} \n`;&#xA;    return response;&#xA;  }&#xA;  response.infoLog &#x2B;= &#x27;File is being transcoded using custom arguments \n&#x27;;&#xA;  return response;&#xA;};&#xA;  };&#xA;&#xA;module.exports.details = details;&#xA;module.exports.plugin = plugin;&#xA;

    &#xA;

    Tried transcoding 4k files down to 1080p but it fails due to that undefined error. All Res 1080p and lower that I have tried work correctly

    &#xA;

    EDIT : I used Console.log and got this back

    &#xA;

    [2023-05-24T23:29:51.001] [ERROR] Tdarr_Server - Error running MediaInfo 1&#xA;[2023-05-24T23:29:51.004] [ERROR] Tdarr_Server - RangeError: Maximum call stack size exceeded&#xA;    at x (<anonymous>:wasm-function[381]:0x15c4d)&#xA;    at <anonymous>:wasm-function[46]:0x5dc0&#xA;    at <anonymous>:wasm-function[652]:0x21cb9&#xA;    at <anonymous>:wasm-function[1023]:0x47018&#xA;    at <anonymous>:wasm-function[853]:0x37827&#xA;    at <anonymous>:wasm-function[3684]:0xf4884&#xA;    at <anonymous>:wasm-function[3516]:0xeb5b7&#xA;    at <anonymous>:wasm-function[1061]:0x487c9&#xA;    at <anonymous>:wasm-function[795]:0x3006d&#xA;    at <anonymous>:wasm-function[3628]:0xf01cc&#xA;[2023-05-24T23:29:51.006] [ERROR] Tdarr_Server - Error running MediaInfo 2&#xA;[2023-05-24T23:29:51.006] [ERROR] Tdarr_Server - RangeError: Maximum call stack size exceeded&#xA;    at x (<anonymous>:wasm-function[381]:0x15c4d)&#xA;    at <anonymous>:wasm-function[46]:0x5dc0&#xA;    at <anonymous>:wasm-function[652]:0x21cb9&#xA;    at <anonymous>:wasm-function[1023]:0x47018&#xA;    at <anonymous>:wasm-function[853]:0x37827&#xA;    at <anonymous>:wasm-function[3684]:0xf4884&#xA;    at <anonymous>:wasm-function[3516]:0xeb5b7&#xA;    at <anonymous>:wasm-function[1061]:0x487c9&#xA;    at <anonymous>:wasm-function[795]:0x3006d&#xA;    at <anonymous>:wasm-function[3628]:0xf01cc&#xA;[2023-05-24T23:29:58.220] [ERROR] Tdarr_Server - Error running MediaInfo 1&#xA;[2023-05-24T23:29:58.223] [ERROR] Tdarr_Server - RangeError: Maximum call stack size exceeded&#xA;    at x (<anonymous>:wasm-function[381]:0x15c4d)&#xA;    at <anonymous>:wasm-function[46]:0x5dc0&#xA;    at <anonymous>:wasm-function[652]:0x21cb9&#xA;    at <anonymous>:wasm-function[1023]:0x47018&#xA;    at <anonymous>:wasm-function[853]:0x37827&#xA;    at <anonymous>:wasm-function[3684]:0xf4884&#xA;    at <anonymous>:wasm-function[3516]:0xeb5b7&#xA;    at <anonymous>:wasm-function[1061]:0x487c9&#xA;    at <anonymous>:wasm-function[795]:0x3006d&#xA;    at <anonymous>:wasm-function[3628]:0xf01cc&#xA;[2023-05-24T23:29:58.224] [ERROR] Tdarr_Server - Error running MediaInfo 2&#xA;[2023-05-24T23:29:58.224] [ERROR] Tdarr_Server - RangeError: Maximum call stack size exceeded&#xA;    at x (<anonymous>:wasm-function[381]:0x15c4d)&#xA;    at <anonymous>:wasm-function[46]:0x5dc0&#xA;    at <anonymous>:wasm-function[652]:0x21cb9&#xA;    at <anonymous>:wasm-function[1023]:0x47018&#xA;    at <anonymous>:wasm-function[853]:0x37827&#xA;    at <anonymous>:wasm-function[3684]:0xf4884&#xA;    at <anonymous>:wasm-function[3516]:0xeb5b7&#xA;    at <anonymous>:wasm-function[1061]:0x487c9&#xA;    at <anonymous>:wasm-function[795]:0x3006d&#xA;    at <anonymous>:wasm-function[3628]:0xf01cc&#xA;</anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous>

    &#xA;