es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

MediaInfo obtiene los subtítulos de manera más inteligente.

Estoy creando una aplicación de formularios de Windows con MediaInfo Wrapper y no puedo encontrar ninguna solución buena para obtener todos los subtítulos y ponerlos en un arreglo o cadena.

Porque si codifico los subtítulos como “subtitle1”, “subtitle2”, “subtitle3”, “subtitle4”, etc., y no hay subtítulos en absoluto o no tantos como los que codifiqué, obtengo el siguiente error:

La cadena de entrada no estaba en un formato correcto.

Entonces, ¿cómo puedo obtener los subtítulos y listarlos en una cadena o arreglo de manera ordenada como “Eng”, “Fra”, “Spa”, sin codificación dura y sin el error mencionado anteriormente? (Obtengo este error siempre que no haya subtítulos).

Mi código:

// Codificación dura (posibles) subtítulos…
string subUno = MI.Get(StreamKind.Text, 0, “Language/String3”);
string subDos = MI.Get(StreamKind.Text, 1, “Language/String3”);
string subTres = MI.Get(StreamKind.Text, 2, “Language/String3”);

string cuentaSubtitulos = MI.Get(StreamKind.General, 0, “TextCount”); // Contar cuántos subtítulos se incluyen

string subtítulos = “”;

int subtítulosInt = Int32.Parse(cuentaSubtitulos);

// Intentando encontrar una mejor solución aquí…
if (subtítulosInt >= 1 && subtítulosInt < 2)
{
subtítulos = subUno;
} else if (subtítulosInt >= 1 && subtítulosInt <= 2)
{
subtítulos = subUno + “,” + subDos;
} else {
subtítulos = “”;
}

//var subsArray = subtítulos.Split(‘,’);
//subtítulos = String.Join(“,”, subsArray);

// Mostrar los datos de MediaInfo en el cuadro de texto
string datos = “”;

datos += “Subtítulos: ” + subtítulos + “\r\n”;

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener todos los subtítulos en una aplicación de formularios de Windows con MediaInfo Wrapper y almacenarlos en un array o cadena sin codificar de forma rígida y evitando el error “Input string was not in a correct format”, puedes utilizar el siguiente método:

    1. Primero, obtén la cantidad de subtítulos utilizando MI.Get(StreamKind.General, 0, "TextCount") y almacénalo en una variable.
    2. Crea una variable de cadena vacía llamada subtitles.
    3. Utiliza un bucle for para iterar sobre la cantidad de subtítulos y obtener el idioma del subtítulo utilizando MI.Get(StreamKind.Text, i, "Language/String3"), donde i es la variable del iterador.
    4. Añade cada idioma de subtítulo a la variable subtitles con un separador de coma.
    5. Finalmente, puedes almacenar subtitles como un array utilizando var subsArray = subtitles.Split(',') o como una cadena con comas separando cada idioma de subtítulo.

    El código actualizado se vería así:

    string subtitlesCount = MI.Get(StreamKind.General, 0, "TextCount"); // Contar cuántos subtítulos se incluyen
    string subtitles = "";
    
    int subtitlesInt = Int32.Parse(subtitlesCount);
    
    for (int i = 0; i < subtitlesInt; i++)
    {
        string subtitle = MI.Get(StreamKind.Text, i, "Language/String3");
        subtitles += subtitle + ",";
    }
    
    if (subtitles != "") // Comprobar si hay subtítulos antes de eliminar la última coma
    {
        subtitles = subtitles.Remove(subtitles.Length - 1); // Eliminar la última coma de la cadena
    }
    
    //var subsArray = subtitles.Split(',');
    //subtitles = String.Join(",", subsArray);
    
    // Mostrar los datos de mediainfo en un cuadro de texto
    string data = "";
    
    data += "Subtítulos: " + subtitles + "\r\n";
    

    Esto obtendrá dinámicamente todos los subtítulos sin codificar de forma rígida y los almacenará en una variable de cadena separados por comas. Puedes convertir fácilmente esta cadena en un array como se muestra en el código comentado o mantenerla como una cadena para mostrarla.

Comments are closed.