
コマンドプロンプト上から音楽ファイルの変換が出来るffmpegを利用して
C#プログラムを作ろうと思い、下記のサイトを参考にしてc#プログラムを作りコマンドを入力してみたのですがうまくいきません。
しかし、同じコマンドをコマンドプロンプトを手動で開いて打ち込むと成功します。
参考にしたサイト:http://dobon.net/vb/dotnet/process/standardoutpu …
入力したコマンド:"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
※コマンドの-b:a 320kの表記は320kbpsのビットレートで変換するコードです。
※a.m4aをa.mp3に320kbpsのビットレートで変換するコマンドになります。
現状をまとめると以下のようになります。
(1)コマンドプロンプトを手動で起動して、以下のコマンドを打ち込むとうまく変換してくれる。
"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
(2)しかしこのコマンドを下記のコードで実行すると処理が行われない。
(3)そうなると下記のコード自体に問題があるように思われるが、
下記のコードで"dir c:\"など簡単なコマンドを実行すると成功する。
ダブルクオテーション(")やスペースなどに問題があるのかと思いいろいろと試してみましたがダメでした。
どうすれば下記のコードで"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"のようなコマンドを実行出来るのでしょうか?
実行する方法、もしくは違うコードで実行する方法などを知っておられる方、ぜひご教授ください!非常に困っております。
---------------------------------------------------------------------------------------------------
■コマンドプロンプトをC#上から実行するコード
http://dobon.net/vb/dotnet/process/standardoutpu …のコードの丸写し
---------------------------------------------------------------------------------------------------
//Processオブジェクトを作成
System.Diagnostics.Process p = new System.Diagnostics.Process();
//ComSpec(cmd.exe)のパスを取得して、FileNameプロパティに指定
p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
//出力を読み取れるようにする
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = false;
//ウィンドウを表示しないようにする
p.StartInfo.CreateNoWindow = true;
//コマンドラインを指定("/c"は実行後閉じるために必要)
//○成功する
p.StartInfo.Arguments = "dir c:\";
//×失敗する
p.StartInfo.Arguments = "\"E:/ffmpeg.exe\" -i \"E:/a.m4a\" -b:a 320k \"E:/a.mp3\";
//起動
p.Start();
//出力を読み取る
string results = p.StandardOutput.ReadToEnd();
//プロセス終了まで待機する
//WaitForExitはReadToEndの後である必要がある
//(親プロセス、子プロセスでブロック防止のため)
p.WaitForExit();
p.Close();
//出力された結果を表示
Console.WriteLine(results);
---------------------------------------------------------------------------------------------------
No.1ベストアンサー
- 回答日時:
>うまくいきません。
「なにが」「どう」「いまくいかない」んでしょうか?
プロセス起動した後に無反応になる?
プロセス終了した後に表示されるべきメッセージが表示されない?
プロセス起動できない?
起動したffmpeg.exeが終了しても戻ってこない?
参考ページではcmd.exeに/cオプションを指定しているようですが、
変更されたソースでは指定していないようで…。
その場合、
p.WaitForExit();
でちゃんと戻ってこれるんですかね?
# 起動したcmd.exe自体は終了していないはずですが…
# /Cも/Kも無かった場合ってどういう動作するんですかね?(Windows7 Pro 64Bitでcmd dirとしたら無視されてしまいましたが)
cmd.exe経由でなくても、必要条件満たせばffmpeg.exeの起動は可能と思いますよ。
ffmpeg.exeを利用するフロントエンドアプリなんかもそうしているでしょうし。
「ffmpeg.exe フロントエンド」で検索してみるとアプリは見つかるかと。
ご回答ありがとうございます。
私の説明がたりませんでしたね。追記で書かせていただきます。
上記のプログラムは
p.StartInfo.Argumentsに値を入れることでプロンプトにコマンドを入力して、p.Start()でプロンプトで処理を実行し、string results = p.StandardOutput.ReadToEnd();でその結果を読み取るものだと思います。
しかし
p.StartInfo.Arguments = "\"E:/ffmpeg.exe\" -i \"E:/a.m4a\" -b:a 320k \"E:/a.mp3\";
と入力して実行すると、プロンプトは立ち上がるのですが、立ち上がるだけでコマンドが入力されないんです。ビルドすると未入力のコマンドプロンプトが立ち上がって処理が止まってしまう感じです。
/cは処理後にプロンプトを閉じるコマンドのようですので単純化するために除去しました、"dir c:\"だと成功するので必ずしも必要無いと思いました。
ちなみに以下のように/cをつけて実行するとエラーになりました。「ファイル名、ディレクトリ名、またはボリュームラベルの構文が間違っています」というエラーになりました。
p.StartInfo.Arguments = "/c \"E:/ffmpeg.exe\" -i \"E:/a.m4a\" -b:a 320k \"E:/a.mp3\";
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- その他(プログラミング・Web制作) DOSコマンドに詳しい方、お知恵をお貸しください 5 2022/11/04 20:55
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- その他(パソコン・周辺機器) チャレンジタッチ3 改造 アプリインストールできない 1 2022/07/01 14:43
- Windows 10 VirtualBox 7のゲストOSでの物理HDDパーティションのマウント方法 2 2023/05/04 13:01
- その他(コンピューター・テクノロジー) ffmpeg 動画から複数の箇所を指定して、一度の作業で同時に切り出したい 1 2022/07/03 08:35
- CAD・DTP Autocad Scriptファイルからの入力とコマンドラインからの入力が違う 1 2023/08/01 09:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SpywareGuardのせい?で、Explo...
-
パスの件
-
HPを開くときに通信が途切れ...
-
VC++6.0からIEの起動ができない
-
勝手に広告
-
プロセスが終了されたかどうか...
-
バッチファイルで実行ファイル...
-
エクセルVBAにて、OutlookEx...
-
VBSについて
-
bash.exeを直接起動するとgccが...
-
IEのショートカットを実行
-
batファイルで立ち上げたaplを...
-
VB.net2005で1日1回バッチを起動
-
c#でコマンドプロンプトを実行...
-
バッチファイルの起動
-
タスク自動登録について
-
cmd.exe無しでPython実行
-
リモート上 バッチファイル 起動
-
Shiftキーを押しながら起動
-
Cプログラミング 宜しくお願い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batファイルで立ち上げたaplを...
-
VB.NETでDOSコマンドの複数実行
-
ExcelVBAにてアプリをタスクマ...
-
バッチファイル 特定ウインドウ...
-
EXCELをバッチコマンドで...
-
gccがコマンドプロンプト上で使...
-
バッチへ値を返す
-
c#でコマンドプロンプトを実行...
-
Shiftキーを押しながら起動
-
UWSCについて
-
複数の処理の終了を待ちたい
-
ASPからのEXEファイル起動
-
VBAからキャッシュを削除する方...
-
プログラムを実行すると、なぜ...
-
RUNASコマンドを使って、自動的...
-
バッチファイルからftpを実行時...
-
ショートカットの作成とコピー
-
ショートカットのリンク先が参...
-
コマンドプロンプト画面で動作...
-
VBSでコマンドプロンプトのカレ...
おすすめ情報