Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)

C# - FFmpeg.AutoGen 라이브러리를 이용한 기본 프로젝트 구성 - Windows Forms

지난 글에서는,

C# - FFmpeg.AutoGen 라이브러리를 이용한 기본 프로젝트 구성
; https://www.sysnet.pe.kr/2/0/12896

콘솔 프로젝트를 예로 들었으니, 이번에는 Windows Forms로 구성해 보겠습니다. 사실, 동일한 내용인데 그사이 뭔가 바뀐 것이 있을까 싶어 다시 정리합니다. ^^




우선 버전이 바뀌었군요. Windows Forms 기본 프로젝트를 생성하고 패키지 참조를 추가하면,

// https://www.nuget.org/packages/FFmpeg.AutoGen
Install-Package FFmpeg.AutoGen

현재(2023-04-20) 6.0 버전의 패키지가 참조됩니다. 이번에도 Native ffmpeg 바이너리는 포함돼 있지 않으므로 github repo에 있는 DLL들을 다운로드해,

FFmpeg.AutoGen/FFmpeg/bin/x64/
; https://github.com/Ruslan-B/FFmpeg.AutoGen/tree/master/FFmpeg/bin/x64

avcodec-60.dll
avdevice-60.dll
avfilter-9.dll
avformat-60.dll
avutil-58.dll
postproc-57.dll
swresample-4.dll
swscale-7.dll

프로젝트 경로의 ./FFmpeg/bin/x64 하위 디렉터리에 복사하고 "Copy to Output Directory" 값을 "Copy if newer"로 바꿔줍니다. 이후, "C# - FFmpeg.AutoGen 라이브러리를 이용한 기본 프로젝트 구성" 글에서 추가했던 것과 마찬가지로 FFmpegBinariesHelper 타입을 추가해,

using FFmpeg.AutoGen;
using System.Runtime.InteropServices;

namespace FFmpegAutoGen;

public class FFmpegBinariesHelper
{
    internal static void RegisterFFmpegBinaries()
    {
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
        {
            var current = Environment.CurrentDirectory;
            var probe = Path.Combine("FFmpeg", "bin", Environment.Is64BitProcess ? "x64" : "x86");

            while (current != null)
            {
                var ffmpegBinaryPath = Path.Combine(current, probe);

                if (Directory.Exists(ffmpegBinaryPath))
                {
                    Console.WriteLine($"FFmpeg binaries found in: {ffmpegBinaryPath}");
                    ffmpeg.RootPath = ffmpegBinaryPath;
                    return;
                }

                current = Directory.GetParent(current)?.FullName;
            }
        }
        else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            ffmpeg.RootPath = "/lib/x86_64-linux-gnu/";
        }
        else
        {
            throw new NotSupportedException(); // fell free add support for platform of your choose
        }
    }
}

Program.cs 파일에서 호출만 하면 됩니다.

using FFmpeg.AutoGen;
using FFmpegAutoGen;

namespace WinFormsApp1
{
    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            FFmpegBinariesHelper.RegisterFFmpegBinaries();

#if DEBUG
            System.Diagnostics.Trace.WriteLine($"FFmpeg version info: {ffmpeg.av_version_info()}");
#endif

            ApplicationConfiguration.Initialize();
            Application.Run(new Form1());
        }
    }
}

F5 디버깅을 하면 Output 창에 다음과 같은 디버깅 메시지가 나와야 합니다.

FFmpeg version info: 6.0-full_build-www.gyan.dev

(첨부 파일은 이 글의 예제 코드를 포함합니다.)




마지막으로, 매번 저런 식으로 프로젝트를 구성하는 것이 귀찮을 것이므로, "Project" / "Export Template..." 메뉴를 선택(참고: "Make a template for your template; profit")해 현재 구성의 프로젝트를,

ffmpeg_prj_template_1.png

적당한 이름의 Project Template으로 만들어주면,

ffmpeg_prj_template_2.png

이후 "새 프로젝트"를 만들 때 다음과 같이 편하게 FFmpeg 구성의 Windows Forms 프로젝트를 만들 수 있습니다. ^^

ffmpeg_prj_template_3.png




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 11/24/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 91  92  93  94  95  96  97  98  99  100  101  102  103  [104]  105  ...
NoWriterDateCnt.TitleFile(s)
11365정성태11/25/201722099오류 유형: 429. 이벤트 로그 - User Policy could not be updated successfully
11364정성태11/24/201724781사물인터넷: 11. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스로 쓰는 방법 (절대 좌표) [2]
11363정성태11/23/201724720사물인터넷: 10. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스 + 키보드로 쓰는 방법 (두 번째 이야기)
11362정성태11/22/201720416오류 유형: 428. 윈도우 업데이트 KB4048953 - 0x800705b4 [2]
11361정성태11/22/201723383오류 유형: 427. 이벤트 로그 - Filter Manager failed to attach to volume '\Device\HarddiskVolume??' 0xC03A001C
11360정성태11/22/201723848오류 유형: 426. 이벤트 로그 - The kernel power manager has initiated a shutdown transition.
11359정성태11/16/201723114오류 유형: 425. 윈도우 10 Version 1709 (OS Build 16299.64) 업그레이드 시 발생한 문제 2가지
11358정성태11/15/201728117사물인터넷: 9. Visual Studio 2017에서 Raspberry Pi C++ 응용 프로그램 제작 [1]
11357정성태11/15/201728584개발 환경 구성: 336. 윈도우 10 Bash 쉘에서 C++ 컴파일하는 방법
11356정성태11/15/201730132사물인터넷: 8. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스 + 키보드로 쓰는 방법 [4]
11355정성태11/15/201725322사물인터넷: 7. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스로 쓰는 방법 [2]파일 다운로드2
11354정성태11/14/201730154사물인터넷: 6. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 키보드로 쓰는 방법 [8]
11353정성태11/14/201727145사물인터넷: 5. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 이더넷 카드로 쓰는 방법 [1]
11352정성태11/14/201723479사물인터넷: 4. Samba를 이용해 윈도우와 Raspberry Pi간의 파일 교환 [1]
11351정성태11/7/201726369.NET Framework: 698. C# 컴파일러 대신 직접 구현하는 비동기(async/await) 코드 [6]파일 다운로드1
11350정성태11/1/201722434디버깅 기술: 108. windbg 분석 사례 - Redis 서버로의 호출을 기다리면서 hang 현상 발생
11349정성태10/31/201723103디버깅 기술: 107. windbg - x64 SOS 확장의 !clrstack 명령어가 출력하는 Child SP 값의 의미 [1]파일 다운로드1
11348정성태10/31/201719301디버깅 기술: 106. windbg - x64 역어셈블 코드에서 닷넷 메서드 호출의 인자를 확인하는 방법
11347정성태10/28/201723072오류 유형: 424. Visual Studio - "클래스 다이어그램 보기" 시 "작업을 완료할 수 없습니다. 해당 인터페이스를 지원하지 않습니다." 오류 발생
11346정성태10/25/201719720오류 유형: 423. Windows Server 2003 - The client-side extension could not remove user policy settings for 'Default Domain Policy {...}' (0x8007000d)
11338정성태10/25/201717297.NET Framework: 697. windbg - SOS DumpMT의 "BaseSize", "ComponentSize" 값에 대한 의미파일 다운로드1
11337정성태10/24/201719847.NET Framework: 696. windbg - SOS DumpClass/DumpMT의 "Vtable Slots", "Total Method Slots", "Slots in VTable" 값에 대한 의미파일 다운로드1
11336정성태10/20/201721134.NET Framework: 695. windbg - .NET string의 x86/x64 메모리 할당 구조
11335정성태10/18/201719919.NET Framework: 694. 닷넷 - <Module> 클래스의 용도
11334정성태10/18/201720647디버깅 기술: 105. windbg - k 명령어와 !clrstack을 조합한 호출 스택을 얻는 방법
11333정성태10/17/201720002오류 유형: 422. 윈도우 업데이트 - Code 9C48 Windows update encountered an unknown error.
... 91  92  93  94  95  96  97  98  99  100  101  102  103  [104]  105  ...