FlVをMP3に変換

解決


  2010-04-19 14:33:08  No: 38295

現在Flvファイルから音声を抽出しMP3で保存しようと思っております。
どのような手順で作業すればいいか悩んでおります
定石と言いますか、通常ならこうする〜やこのコンポーネントを使用してみては?などの指導をお願いできないでしょうか・・・


manbon  2010-04-19 19:52:13  No: 38296

すでにフリーソフトでは色々とありますが・・・
http://www.forest.impress.co.jp/article/2008/01/23/ecodecotool.html

ご自分でコーディングされたいのですよね・・・
すみません、そういう情報は聞いたことがないです^^;


  2010-04-19 20:59:04  No: 38297

>>manbon
返信ありがとうございます
>ご自分でコーディングされたいのですよね・・・
そうですね、自分でコーティングしたいのですが・・・
やはりエンコード的な物はDelphiでは難しいのですかね^^;
もう少し調べてみるつもりです><


dspack  2010-04-19 21:29:27  No: 38298

多分 directshowを応用すると言うことになるのではないかと思います。
https://www.petitmonte.com/bbs/answers?question_id=4950

Delphiでは、DSPackがありますので検討して見たらどうでしょうか。


take  2010-04-19 21:45:55  No: 38299

FlvがSWFファイルに近い形式であるのならば
内部構造を理解することでMP3ファイルに変換できます。

以前SWFファイルをMP3に変換するソフトを作ったときは
SWFファイルをTFileStreamで読み込み
ヘッダ部分でどのオブジェクトが埋め込まれているか判定し
必要なバイト数を読み込む
という処理で変換できました。

変換と言うより、ほとんどそのまま埋め込まれるので抽出ですね。
ただ、圧縮されているのでZLIBか何かで展開してから
解析を行いました。


  2010-04-19 22:14:56  No: 38300

>>takeさん
返信ありがとうございます

現在調べた所、午後のこ〜だのDLLである「gogo.dll」を使えばうまくいけそうな気がしました
問題はdllの使いかたがいまいち理解していない所です^^;
もう少し調べて厳しそうならDSPackと言う物を調べてみようと思います


ささ  2010-04-20 05:12:40  No: 38301

全部自分でやる必要がないなら、FFMPEGのフロントエンドだけ作っちゃえば楽だけど


  2010-04-20 06:21:56  No: 38302

>>さささん
返信ありがとうございます

FFMPEGを使ってやってみた所

procedure TMainF.Button1Click(Sender: TObject);
const strExeName  = 'ffmpeg.EXE';
begin
   shellExecute(Handle,
                'open',
                PChar(strExeName),
                pchar('-i "c:\a.flv" -ab 128 out.mp3'),
                nil,
                SW_SHOWDEFAULT
               );

end;

上記のコードでa.flvファイルからmp3のファイルが作成できました
後は実行時にDOS窓がでてきるので引数で隠せるのか等の細かい修正を加えたら目的の物ができそうです。
ではちょっと調べてきます


  2010-04-20 06:34:11  No: 38303

解決にするのを忘れておりました


Mr.XRAY  2010-04-20 21:27:23  No: 38304

こんには,Mr.XRAYです.

>後は実行時にDOS窓がでてきるので引数で隠せるのか等

手前味噌ですが,これを非表示にするコードがあります.
Fusaさんの作成したユニットをDelphi2009以降にも対応コードに修正したものです.
こういうのを持っていると何かと便利です.(^^;
ただし,ShellExecuteではなく,CreateProcessです.
また,大変申し訳ありませんが,動作確認はDelphi5〜2010です.

■  03_使用したリダイレクトのユニット
http://mrxray.on.coocan.jp/Delphi/plSamples/552_PipeRedirect.htm#03

今回の事例では,例えば以下のようになるでしょうか.

//  usesにCommandLineUnitを追加
procedure TForm1.Button1Click(Sender: TObject);
var
  ACmdLine : TCommandLineUnit;
  ACmdStr  : String;
begin
  ACmdStr := 'ffmpeg.exe -i "c:\a.flv" -ab 128 out.mp3';
  ACmdLine := TCommandLineUnit.Create;

  try
    ACmdLine.GrabStdOutText(ACmdStr);
  finally
    FreeAndNil(ACmdLine);
  end;
   ShowMessage('END!!');
end;


Mr.XRAY  2010-04-20 21:30:14  No: 38305

>また,大変申し訳ありませんが,動作確認はDelphi5〜2010です.

失礼.Delphi6以降です.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加