2024年2月17日 星期六

FFmpeg/SDL2 on Windows 專案設定

自工作以來,好像每隔一陣子就有機會用到ffmpeg來做視訊處理

像是 android app, embedded linux 或是windows上的視訊播放程式

所以記錄一下這次 Windows 平台搭配 VS 2019 的專案建置流程

  1. 下載 ffmpeg/SDL2 windows build
    ffmpeg 選擇 win64 shared
    SDL2 選擇 win32-x64
  2. 建立VS 2019 CMake專案

3. 複製ffmpeg zip裡的 include/lib 資料夾到<project>目錄下

5. 複製ffmpeg zip裡 include/bin 的 *.dll 到 <project>/out/build/x64-Debug

6. 複製sdl2 zip裡的 include 資料夾到 <project>/include/ 下更名為 SDL2

7. 複製sdl2 zip裡的 lib/SDL2.lib 到 <project>/lib

8. 複製sdl2 zip裡的 lib/SDL2.dll 到 <project>/out/build/x64-Debug

最後配置 CMakeLists.txt 如下

cmake_minimum_required (VERSION 3.8)

project ("ffmpeg-test")
include_directories("include")
link_directories("lib")
add_executable (ffmpeg-test "ffmpeg-test.cpp" "ffmpeg-test.h")
target_link_libraries(
	ffmpeg-test
	avcodec
	avdevice
	avfilter
	avformat
	avutil
	postproc
	swresample
	swscale
	SDL2
)

接下來我們就可以用一個簡單的 Hello World 驗証專案設定是否正常

#define SDL_MAIN_HANDLED // Important!
#include "ffmpeg-test.h"

using namespace std;

extern "C" {
#include <libavcodec/avcodec.h>
#include <libavutil/imgutils.h>
#include <libavutil/avstring.h>
#include <libavutil/time.h>
#include <libavutil/opt.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libswresample/swresample.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_thread.h>
}

int main()
{
	const char* version = av_version_info();
	cout << "FFmpeg version: " << version << endl;

	if (SDL_Init(SDL_INIT_VIDEO) < 0) {
		cout << "SDL could not initialize! SDL_Error: " << SDL_GetError() << endl;
	}
	else {
		cout << "SDL Initialize OK!" << endl;
	}
	return 0; 

沒有留言:

張貼留言

Python Tkinter First Example

import tkinter as tk def on_closing():     root.destroy() class MainWindow(tk.Tk):     def __init__(self, *args, **kwargs):         tk.Tk.__...