Buenos días!
tengo un .bet, ff-prompt.bat, en el que ejecuto la línea de código "ffmpeg -i Wildlife.wmv -qscale 4 -vcodec mjpeg -acodec pcm_s16le salida.avi" y me convierte el "wildlife.wmv a avi, pero lo que entendí e hice en código no hace absolutamente nada:
ProcessStartInfo startInfo = new ProcessStartInfo("D:\\..\\ffmpeg\\ff-prompt.bat");
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.Arguments = "ffmpeg -i Wildlife.wmv -qscale 4 -vcodec mjpeg -acodec pcm_s16le salida.avi";
Process.Start(startInfo);
alguien sabe por qué??? hay forma de hacerlo???
Mil gracias de antemano! Soy nueva con estas cosas!
Hola:
Hay respuestas por aquí (https://social.msdn.microsoft.com/Forums/es-ES/8e6e2717-5919-4623-a4d3-e2018fec240f/abrir-bat-y-ejecutar-un-comando-desde-c?forum=vcses).
Un cordial saludo.
pues el caso es que lo pregunté yo misma y no me quedó nada claro, así que seguí intentándolo aquí!
:) pero gracias por hacerme caso igualmente...ya no sé donde mirar!
Hola:
¿Exactamente que hace lo que buscas?
Puedes traducir del bat a C# para que haga lo mismo.
Saludos.
Hola,
es un bat que descargué para convertir videos, y ejecuta un exe que tiene en la carpeta bin, el ffmpeg.exe, pasándole los argumentos que puse (-i -i Wildlife.wmv -qscale 4 -vcodec mjpeg -acodec pcm_s16le salida.avi) pero probé con el process y no debo hacerlo bien, se abre prompt una decima de seg pero no hace nada. esto es el bat:
@ECHO OFF
REM FF Prompt 1.2
REM Open a command prompt to run ffmpeg/ffplay/ffprobe
REM Copyright (C) 2013-2015 Kyle Schwarz
TITLE FF Prompt
IF NOT EXIST bin\ffmpeg.exe (
CLS
ECHO bin\ffmpeg.exe could not be found.
GOTO:error
)
CD bin || GOTO:error
PROMPT $P$_$G
SET PATH=%CD%;%PATH%
CLS
ffmpeg -version
ECHO.
ECHO For help run: ffmpeg -h
ECHO For formats run: ffmpeg -formats ^| more
ECHO For codecs run: ffmpeg -codecs ^| more
ECHO.
ECHO Current directory is now: "%CD%"
ECHO The bin directory has been added to PATH
ECHO.
CMD /Q /K
GOTO:EOF
:error
ECHO.
ECHO Press any key to exit.
PAUSE >nul
GOTO:EOF
var startInfo = new ProcessStartInfo {
FileName = @"ff-prompt.bat",
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = false
};
var proc = new Process { StartInfo = startInfo };
proc.Start ();
proc.StandardInput.WriteLine (@"ffmpeg blablabalablabal");
//proc.StandardInput.WriteLine ("exit");
proc.WaitForExit ();
El script de batch que has mostrado de por si no hace absolutamente nada, simplemente comprueba si existe el ffmpeg, muestra la version, y por último abre una nueva instancia de la CMD... ¿te ha faltado algo por copiar?.
No le puedes pretender pasar argumentos a un script que no toma ningún argumento, tan simple como eso, eso sería el problema, ahora bien, no necesitas usar un script de Batch desde un lenguaje como C#, puedes utilizar la Class Process para iniciar el proceso FFMPEG directamente pasándole los argumentos que desees:
Process p = new Process();
p.StartInfo.FileName = "...\\FFMPEG.exe";
p.StartInfo.Arguments = "-i \"Wildlife.wmv\" -qscale 4 -vcodec mjpeg -acodec pcm_s16le \"salida.avi\"";
p.Start();
p.WaitForExit();
EDITO: Ah, creo que lo entendí mal, ¿lo que querías era escribir el input directamente en la instancia de la CMD que abre el script de Batch?, en ese caso la solución de @Slava_TZD te debería servir, la mia es para iniciar directamente el proceso FFMPEG con los argumentos.
Saludos!
voy a probar! mil gracias, que majos madre! ;-) ;-) ;-)
Cita de: ssmateos en 2 Marzo 2016, 11:55 AM
voy a probar! mil gracias, que majos madre! ;-) ;-) ;-)
Después de tanto sufrimiento que te vi en los foros de MSDN te veo contento. Nos avisa si te ha funcionado.
Leí hace tiempo que la competencia del .bat de CMD es el .vbs Visual Basic Script, luego hay otros más y el más que usan ahora en empresas es el F#. Aquí (https://es.answers.yahoo.com/question/index?qid=20110125194339AAqqsrO) encontré una respuesta que hicieron hace tiempo.
Nos avisa y nos muestra tu resultado.
Suerte...
:-( :-( :-(
que desesperacion, se ejecuta pero no hace absolutamente nada....
Lo que intentas hace es lo que hace .bat pasarlo a C#?????
Intenté con vuestras dos respuestas, y lo mismo en ambas...sale fugazmente el prompt pero no hace nada, de hecho si lo hago a mano tarda unos segundos en convertirlo.
Que se me está pasando???? Voy a empezar a soñar con esto! jajaja
Mil gracias por la ayuda, la desesperación compartida es más llevadera
Si no pegas el código es imposible ver el error.
claro, disculpa!!! yo lo pego pero es básicamente lo que me aconsejásteis, soy una novata con estas cosas, lo que hice siempre fue en kentico que no va a tan bajo nivel!:
private void btnconvertir_Click(object sender, EventArgs e)
{
//Process p = new Process();
//p.StartInfo.FileName = "D:\\Users\\sara.sanchez\\Desktop\\pruebasAntonio\\ffmpeg\\bin\\FFMPEG.exe";
//p.StartInfo.Arguments = "-i \"Wildlife.wmv\" -qscale 4 -vcodec mjpeg -acodec pcm_s16le \"salida.avi\"";
////ffmpeg -i Wildlife.wmv -qscale 4 -vcodec mjpeg -acodec pcm_s16le salida.avi"
//p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
//p.StartInfo.UseShellExecute = false;
//p.StartInfo.RedirectStandardInput = true;
//p.Start();
//p.WaitForExit();
var startInfo = new ProcessStartInfo
{
FileName = @"D:\\Users\\sara.sanchez\\Desktop\\pruebasAntonio\\ffmpeg\\ff-prompt.bat",
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = false
};
var proc = new Process { StartInfo = startInfo };
proc.Start();
proc.StandardInput.WriteLine(@"ffmpeg -i Wildlife.wmv -qscale 4 -vcodec mjpeg -acodec pcm_s16le salida.avi");
proc.WaitForExit();
}
probé tanto lo comentado como lo que no, e igual...
@"C:\asd" = "C:\\asd" String literals (https://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx)
Para que el ejemplo funcione sin estar en el mismo directorio, aparte de corregir lo anterior en tu código tienes que modificar el .bat, concretamente estas líneas IF NOT EXIST bin\ffmpeg.exe, CD bin y poner el path completo.
FileName = @"C:\path\to\ff-prompt.bat"
IF NOT EXIST C:\path\to\bin\ffmpeg.exe
CD C:\path\to\bin
Nada, quité la @ del argumento y modifiqué el .bat con la ruta completa y nada...