現在Flvファイルから音声を抽出しMP3で保存しようと思っております。
どのような手順で作業すればいいか悩んでおります
定石と言いますか、通常ならこうする〜やこのコンポーネントを使用してみては?などの指導をお願いできないでしょうか・・・
すでにフリーソフトでは色々とありますが・・・
http://www.forest.impress.co.jp/article/2008/01/23/ecodecotool.html
ご自分でコーディングされたいのですよね・・・
すみません、そういう情報は聞いたことがないです^^;
>>manbon
返信ありがとうございます
>ご自分でコーディングされたいのですよね・・・
そうですね、自分でコーティングしたいのですが・・・
やはりエンコード的な物はDelphiでは難しいのですかね^^;
もう少し調べてみるつもりです><
多分 directshowを応用すると言うことになるのではないかと思います。
https://www.petitmonte.com/bbs/answers?question_id=4950
Delphiでは、DSPackがありますので検討して見たらどうでしょうか。
FlvがSWFファイルに近い形式であるのならば
内部構造を理解することでMP3ファイルに変換できます。
以前SWFファイルをMP3に変換するソフトを作ったときは
SWFファイルをTFileStreamで読み込み
ヘッダ部分でどのオブジェクトが埋め込まれているか判定し
必要なバイト数を読み込む
という処理で変換できました。
変換と言うより、ほとんどそのまま埋め込まれるので抽出ですね。
ただ、圧縮されているのでZLIBか何かで展開してから
解析を行いました。
>>takeさん
返信ありがとうございます
現在調べた所、午後のこ〜だのDLLである「gogo.dll」を使えばうまくいけそうな気がしました
問題はdllの使いかたがいまいち理解していない所です^^;
もう少し調べて厳しそうならDSPackと言う物を調べてみようと思います
全部自分でやる必要がないなら、FFMPEGのフロントエンドだけ作っちゃえば楽だけど
>>さささん
返信ありがとうございます
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窓がでてきるので引数で隠せるのか等の細かい修正を加えたら目的の物ができそうです。
ではちょっと調べてきます
解決にするのを忘れておりました
こんには,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;
>また,大変申し訳ありませんが,動作確認はDelphi5〜2010です.
失礼.Delphi6以降です.
ツイート | ![]() |