Reproducir videos con audio EAC3, DTS o TrueHD en un NAS Synology

Actualización: Synology dejo de soportar la transcodificación de audio para el formato AAC a partir de la versión 7.1.1 del DSM (2022-09-27), el parche de AlexPresso plantea soportarlo, sin embargo aun no hay fecha de implementación.

Hace algún tiempo, después de comprar mi primer NAS Synology, me entere que la Video Station (la consola multimedia del NAS) no soporta la reproducción de videos que usen el formato de audio EAC3, DTS o TrueHD, así que me dí a la tarea de investigar la razón y una posible solución.

Encontré que la razón del porque no reproduce esos formatos de audio es muy simple, porque el NAS Synology no incluye los codecs para esos formatos, ya que son formatos propietarios y tendrían que pagar algo por incluirlos (por el precio del NAS creo que deberían incluirlos).

Así que buscando posibles soluciones y encontré 2 opciones, ambas instalando e utilizando el paquete FFmpeg de SynoCommunity.

La primera opción es transcodificar los archivos de video a otro formato de audio que si sea soportado por el NAS Synology, y la segunda opción, remplazar el transcodificador de audio de la Video Station para que transcodifique los video al vuelo sobre demanda.

Las ventajas de la primera opción es que la operación es muy sencilla, solo instalas el FFmpeg y ejecutas un comando.

El comando para convertir tus videos a formato AC3 seria algo similar a esto:

/path/to/ffmpeg -i "input.mkv" -map 0 -c:s copy -c:v copy -c:a ac3 -b:a 640k "output.mkv"

Es requerido utilizar la versión del FFmpeg de SynoCommunity. Aquí el proceso de instalación.

La desventaja de esta opción es que si tienes muchos archivos de video con formatos no soportados, la tarea de identificar y transcodificar cada archivo sera ardua.

Ahora, para la segunda opción, la ventaja es que es sobre demanda, y si tienes muchos archivos, para ti sera transparente, la Video Station hará el trabajo de transcodificar los videos al vuelo al momento de la reproducción, la desventaja es que la tarea de transcodificación consumirá recursos de tu NAS, principalmente uso de procesador, lo cual podrá tener efectos en el rendimiento de tu NAS.

El proceso consiste en remplazar la versión del paquete FFmpeg de la Video Station por la version 4 de SynoCommunity.

Primeramente, como se indico anteriormente, hay que instalar la versión 4 del paquete FFmpeg del repositorio de SynoCommunity.

Posteriormente sera necesario conectarnos via SSH al NAS. Se habilita desde el panel de control.

Una vez conectado, se utiliza el comando “sudo -i” para cambiar a usuario Root.

y por ultimo utilizas el siguiente comando para remplazar el paquete FFmpeg.

curl https://raw.githubusercontent.com/AlexPresso/VideoStation-FFMPEG-Patcher/main/patcher.sh | bash

si requieres quitar el parche y volver a la versión original del paquete FFmpeg

curl https://raw.githubusercontent.com/AlexPresso/VideoStation-FFMPEG-Patcher/main/patcher.sh | bash -s -- -a unpatch

Y ahora si, a disfrutar tu contenido multimedia.

Referencias:

synocommunity.com

VideoStation-FFMPEG-Patcher

converting eac3 to aac with ffmpeg

Operaciones con objetos DateTime y TimeSpan

En esta ocasión les comparto unos ejemplos muy básicos de comparación de fechas y horas.

Le mostrare una pequeña aplicación de consola que realice para unas pruebas.

El objetivo es comparar 2 horas con minutos, tipo 13:30, guardarlos en un TimeSpan y compararlos.

Console.WriteLine("Escribe una hora en formato HH:mm");
Console.WriteLine("Por ejemplo: 13:30");
TimeSpan time1 = TimeSpan.Parse(Console.ReadLine());
Console.WriteLine("Escribe otra hora en formato HH:mm");
TimeSpan time2 = TimeSpan.Parse(Console.ReadLine());

if (time1 > time2)
	Console.Write("La 1ra hora es mayor que la 2da");
else if (time1 < time2)
	Console.Write("La 2da hora es mayor que la 1ra");
else
	Console.Write("La 1ra hora es igual que la 2da");

Console.Read();

Entrega una salida como la siguiente:

Incluye una segunda opción donde obtiene la diferencia en horas entre dos fechas.

Console.WriteLine("Escribe un dia del mes:");
int dia1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Escribe otro dia del mes:");
int dia2 = Convert.ToInt32(Console.ReadLine());

DateTime date1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, dia1);
DateTime date2 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, dia2); 

int total = Convert.ToInt32(date2.Subtract(date1).TotalHours);

Console.WriteLine("Horas de diferencia entre las 2 fechas: " + total.ToString());

Console.Read();

La segunda parte quedaría así:

Por el momento es todo, posteriormente iré agregando mas ejemplos a esta publicación.

Son unos ejemplos simples, espero a alguien le sean útiles.

Código de ejemplo:

https://pabloroman.mx/ejemplos/Test_DateTime&TimeSpan.zip