ffmpeg archivos con espacio

Iniciado por rigorvzla, 8 Abril 2018, 17:18 PM

0 Miembros y 1 Visitante están viendo este tema.

rigorvzla

Hola muchachos, tengo un pequeño problema y es que en c# no logro colocar en la linea de argumentos las dobles comillas " " para archivos con espacio, me explico mejor.

esta es la linea para convertir archivos : "ffmpeg -i entrada.mp4 salida.mp3"

Pero cuando intento esto "ffmpeg -i entrada dos.mp4 salida.mp3" me genera un error el cual para corregirlo debo colocar, "ffmpeg -i "entrada dos.mp4" salida.mp3" y me convierte el archivo todo esto desde una ventana de "Dos".

El problema es que en C# , wpf no encuentro para hacer esta linea "ffmpeg -i "entrada dos.mp4" salida.mp3"

el codigo esta en un boton(openfiledialog)


                string entrada = "\"" + ofd.FileName + "\"";

                    System.Diagnostics.Process Conversor = new System.Diagnostics.Process();
                    Conversor.StartInfo.FileName = "ffmpeg";
                    Conversor.StartInfo.Arguments = $"-i {entrada} -b:a 320k {@"C:\"}";
                    Conversor.Start();
                    Conversor.WaitForExit();           
                    Conversor.Close();


es funcional para archivos sin espacio, espero puedan ayudarme

Eleкtro

#1
Ya estás encerrando entre comillas dobles la ruta del archivo indiferentemente de si contiene espacios en blanco o sin ellos, por ende no hay problema con respecto a eso.

Un problema real que si hay en ese código, es que no estás asignando ningún nombre ni extensión de archivo en el argumento de la ruta de destino, y eso es algo que ffmpeg no lo genera automáticamente por si solo. Si no especiicas ninguna extensión de archivo entonces ffmpeg no puede determinar un codec de audio para la extracción (ya que tampoco has especificado el nombre de ningún codec en los argumentos).

Prueba así:
Código (csharp) [Seleccionar]
string input =  @"C:\File.avi";
string output = Path.Combine(Path.GetDirectoryName(input), Path.GetFileNameWithoutExtension(input)) + ".mp3";
string args = string.Format(@"-i ""{0}"" -b:a 320k ""{1}""", input, output);

using (Process p = new Process()) {
   p.StartInfo.FileName = "ffmpeg.exe";
   p.StartInfo.Arguments = args;
   p.Start();
   p.WaitForExit(Timeout.Infinite);
}


Saludos.








rigorvzla

#2
COMO SIEMPRE!!!! GRACIAS!! elektro si tenia la ruta de salida solo que cuando copie aqui el post , borre unas cosas que no estaban como debia ser y las deje mal puesta al "corregirlas" (mi error en el post) mas , mataste 2 pajaros de un tiro al darme tu respuesta incluso me di cuenta que hay planteamientos que aunque teoricamente esten bien , logicamente no es asi.

"Ya estás encerrando entre comillas dobles la ruta del archivo indiferentemente de si contiene espacios en blanco o sin ellos, por ende no hay problema con respecto a eso."

Codigo Sin Error

string destFile = Path.Combine(@"C:\", Path.GetFileNameWithoutExtension(ofd.FileName) + ".mp3");


               System.Threading.Tasks.Task.Run(() =>
               {
                   System.Diagnostics.Process Conversor = new System.Diagnostics.Process();
                   Conversor.StartInfo.FileName = "ffmpeg";
                   Conversor.StartInfo.Arguments = $"-i {ofd.FileName} -b:a 320k {destFile}";
                   Conversor.Start();
                   Conversor.WaitForExit();
                   Conversor.Close();


No es problema solo es para aclara esa duda que me surgio porfavor, nuevamente gracias por que es la solucion correcta. Gracias!

porque esto no sirvio?   string entrada = "\"" + ofd.FileName + "\"";

Eleкtro

#3
Cita de: rigorvzla en  8 Abril 2018, 20:06 PM
porque esto no sirvio?
string entrada = "\"" + ofd.FileName + "\"";

No sabría decirte sin comprobar el output de FFMPEG. Pero como ya te dije no hay nada erroneo en esa linea, ahí estás encerrando una ruta absoluta entre comillas dobles, y la estás insertando con comillas dobles cuando asignas los argumentos en la propiedad 'Conversor.StartInfo.Arguments'. Por eso te digo que el error que tuvieras no está relacionado con rutas con espacios en blanco; el código que mostraste debería funcionarte bien, siempre y cuando le asignases una ruta absoluta en el argumento de destino en vez de poner solamente "C:\".

saludos