ffmpeg トランスコーディング プロセス情報を vb6 GUI アプリにリンクするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/867383

  •  22-08-2019
  •  | 
  •  

質問

私はvb6 guiフロントエンドで遊んでいます ffmpeg そして今のところ、私にできることは、プロセス全体がまだ実行されている間にコマンドプロンプトを表示するcmd.exe経由でffmpegを呼び出すことだけです。そして、ffmpeg 用の別のパスカルベースのフロントエンド GUI である WinFF がどのように動作するかを見て、これが標準だと思いました。

でも、他のこれを見たときは衝撃を受けました 進行状況バーなどを備えた GVC GUI。

基本的に、コマンドプロンプト全体をきれいに非表示にして、トランスコーディングの進行状況をGUIの進行状況バーにリンクする方法を検討しています。

それで、これが私の計画です。cmd行を呼び出すことができ、それを非表示にすることができるwin32 API関数を見つけることを考えています。 ここの別のディスカッションから, 、ffmpegの進行状況情報を取得するには、ログファイルを読み取る必要があると思います。

それでは、win32 API に対してどの関数を呼び出せばよいのでしょうか?そして、これを行うためのより良い/より簡単な方法を知っている人はいますか?ありがとう

更新情報:

興味のある人がいる場合に備えて、私は cmd 出力を vb6 アプリに取り込む方法に関する素晴らしいクラス モジュールです。これは他でもない素晴らしい joacim によるものです。 :)

役に立ちましたか?

解決

私はこれと全く同じことを OSX 上の Java に対して書きました。非常にシンプルなロジック:

  • 生成された ffmpeg 出力を読み取る必要があります。
  • 出力を行ごとに解析します (CR と LF の両方)
    • 「Duration」行を見つけて、時間の値を秒として整数で保存します。 "間隔: 00:03:18.48、開始:0.000000、ビットレート:274kb/秒」 (CRLF終了)
    • その時点から、CR を解析し、完了した時間 (秒単位) の値を探します。 「フレーム= 2816 fps=667 q=11.0 Lsize= 13036kB time=187.66 ビットレート= 569.1kビット/秒」 (CR 終了、LF なし)
    • 除算 (時間 / 期間) を実行すると、パーセンテージが得られます。

ffmpeg でログ ファイルに書き込むことが機能するとは思えません。少なくとも *nix では、ffmpeg はこの出力を std err に書き込み、キャプチャする必要があるステータス行には改行がないため、前のステータス行を上書きします。これは独自のコード内で克服できるものです。

申し訳ありませんが、VB6 の部分については役に立ちませんが、シェルアウトしたプロセスから出力をキャプチャするのは簡単だと思われます。

他のヒント

まず、私はスペイン語で話すよ私の英語を言い訳。 私は答えを見つけます。 1 /まずプリセットに入れて、私はこの例を持っている「出力形式MPEG2 DVD HQ」

" - vcodec mpeg2video -vstats_file MFRfile.txt -r 29.97 -s 352x480 -aspect 4:3 -b 4000K -mbd RD -trellis -mv0 -cmp 2 -subcmp 2 -acodec MP2 -AB 192K -Ar 48000 -ac 2"

この命令はtxtファイルを作ることができるの例のようなプリセットの中に「Mitxt.txt -vstats_file」コマンドが含まれて忘れてはいけません。これはあなたのファイルのソースのフォルダのソースにubicadetの報告書を作ることができます。あなたがしたい場合は、あなたが例withthisこのTXTを読むことができ、任意の名前を入れることができます。

ます。Private Sub Timer1_Timer() strLastLineとして文字列を暗く 「例えば、私ルタ "C:\ DocumentsとSettings \ Gortiz \ミスdocumentos \ file.txtは"

strLastLine = ReadLastLineOfFile( "C:\ DocumentsとSettings \ Gortiz \ミス_ documentos \ file.txtを" ") Lst1.AddItem strLastLine End Subの

関数ReadLastLineOfFile(文字列としてsFileName)文字列として 薄暗いobjFSO、TS 文字列として暗いsTmpContents 設定しobjFSO =のCreateObject( "Scripting.FileSystemObjectオブジェクト") TS = objFSO.OpenTextFile(sFileName、1)を設定 sTmpContents = TS.ReadAll TS.Close セットTS =何もありません 設定しobjFSO =何も

ReadLastLineOfFile =スプリット(sTmpContents、のvbCrLf)(UBound関数(スプリット(sTmpContents、のvbCrLf)) - 1) エンド機能

LST1と呼ばれるリストボックスで、あなたは結果を見たことができます。ビットレートは、秒単位でフレーム、プロセスの時間をproceced。など

よろしくます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top