كيفية ربط معلومات عملية تحويل الشفرة ffmpeg إلى تطبيق vb6 GUI؟

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

  •  22-08-2019
  •  | 
  •  

سؤال

أنا ألعب مع الواجهة الأمامية لواجهة المستخدم الرسومية vb6 ffmpeg وحتى الآن كل ما يمكنني فعله هو استدعاء ffmpeg عبر cmd.exe والذي سيُظهر موجه الأوامر بينما لا تزال العملية برمتها قيد التشغيل.واعتقدت أن هذا هو المعيار الذي أرى به كيفية عمل WinFF، وهو واجهة مستخدم أمامية أخرى تعتمد على لغة باسكال لـ ffmpeg.

لكنني اندهشت عندما رأيت هذا الآخر واجهة GVC التي تحتوي على شريط التقدم وكل شيء.

لذا، فأنا أبحث بشكل أساسي عن طريقة يمكنني من خلالها إخفاء موجه الأوامر بالكامل بشكل نظيف وربط تقدم تحويل الشفرة بشريط التقدم في واجهة المستخدم الرسومية الخاصة بي.

إذن هذه هي خطتي، أفكر في العثور على وظيفة Win32 API التي يمكنني استدعاء سطر cmd وإخفائها، و من مناقشة أخرى هنا, ، أعتقد أنني سأضطر إلى قراءة ملف السجل للحصول على معلومات التقدم في ffmpeg.

إذن ما هي الوظيفة التي يجب أن أستدعيها لواجهة برمجة تطبيقات Win32؟وهل يعرف أحد طريقة أفضل/أسهل لإنجاز ذلك؟شكرًا

التحديثات:

في حال كان أي شخص مهتمًا، أجد أ وحدة فصل لطيفة حول كيفية الحصول على مخرجات cmd في تطبيق vb6 الخاص بي، وهي ليست سوى بواسطة joacim الرائع :)

هل كانت مفيدة؟

المحلول

لقد كتبت هذا الشيء نفسه بالضبط لـ Java على OSX.منطق بسيط للغاية:

  • تحتاج إلى قراءة مخرجات ffmpeg عند إنتاجها.
  • تحليل سطر الإخراج سطرًا (كل من CR و LF)
    • ابحث عن سطر "المدة"، وقم بتخزين قيمة الوقت بالثواني في عدد صحيح. "مدة: 00:03:18.48، ابدأ:0.000000، معدل البت:274 كيلو بايت/ثانية" (تم إنهاء CRLF)
    • من تلك النقطة فصاعدًا، قم بتحليل CR وابحث عن قيم الوقت المكتملة (بالثواني). "الإطار = 2816 إطارًا في الثانية = 667 ف = 11.0 الحجم = 13036 كيلو بايت الوقت =187.66 معدل البت = 569.1 كيلوبت/ثانية" (تم إنهاء السجل التجاري، لا يوجد LF)
    • قم بالقسمة (الزمن/المدة) وتكون لديك نسبة مئوية!

لا أعتقد أن كتابة ffmpeg في ملف السجل سيعمل.في *nix على الأقل، يكتب ffmpeg هذا الإخراج إلى خطأ std، ولا تحتوي خطوط الحالة التي تحتاج إلى التقاطها على تغذية سطر، وبالتالي قم بالكتابة فوق سطر الحالة السابق.هذا شيء يمكنك التغلب عليه ضمن التعليمات البرمجية الخاصة بك.

عذرًا، لا يمكنني المساعدة فيما يتعلق بالجزء VB6، ولكنني أفترض أنه من السهل التقاط المخرجات من العملية التي تقوم بإخراجها.

نصائح أخرى

والأولى عذر لغتي الإنجليزية أنا أتكلم الأسبانية. أجد الجواب. 1 / أولا وضع في الإعدادات المسبقة، ولدي هذا المثال "تنسيق الإخراج MPEG2 DVD HQ"

و"- vcodec mpeg2video -vstats_file MFRfile.txt -r -s 29.97 352x480 -aspect 4: 3 -b 4000K -mbd الثالثة -trellis -mv0 -cmp 2 -subcmp 2 MP2 -acodec -ab 192K -ar 48000 -AC 2 "

وهذه التعليمات يمكن أن تجعل ملف txt لا ننسى يتضمن الأوامر "-vstats_file Mitxt.txt" في الإعدادات المسبقة كما في المثال. هذا يمكن أن تحدث التقرير الذي هو ubicadet في المصدر مجلد المصدر الملف. يمكنك وضع أي اسم إذا كنت تريد، ثم يمكنك أن تقرأ هذا النص withthis سبيل المثال.

والخاص الفرعية Timer1_Timer () خافت strLastLine كسلسلة "على سبيل المثال بلدي روتا" C: \ الوثائق وإعدادات \ Gortiz \ ميس documentos \ file.txt "

وstrLastLine = ReadLastLineOfFile ( "C: \ الوثائق وإعدادات \ Gortiz \ ميس _ documentos \ file.txt" ") Lst1.AddItem strLastLine نهاية الفرعية

وظيفة 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