今天在想應該講什麼C++的特性,或者什麼C++的Library,最後決定講FFMPEG,畢竟在介紹中和第二日答應過大家的。
FFmpeg是一個處理影片的C++模組,全稱是(Fast Forward mpeg),當中包括影片解碼編碼,影片剪輯,filtering,美化等等,適當的使用能達到很好的效果,我今天就介紹一下怎麼使用FFmpeg剪片,比Premiere iMovie等等快超級多的。
今日我們專門講Conan的配置吧,也好顧及Windows的用戶,我也建議其他OS的人現在都使用Conan,因為其他方法都需要編譯,對電腦來說很辛苦的...,安裝Conan教學可以看Day 2.
我們先在Project Root寫Conanfile
[requires]
ffmpeg/4.2@bincrafters/stable
fmt/5.3.0@bincrafters/stable
[generators]
cmake
你可以自己加其他的Library,但要去這裏 或者google 找名字寫進去。
然後更改CmakeLists.txt
# CMake Version
cmake_minimum_required(VERSION 3.1...3.15)
project("FFMPEG HELLO")
# Include Library:
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
# Compile and Run
add_executable(main src/main.cpp)
# Links Libraries
target_link_libraries(main ${CONAN_LIBS})
# C++ Version:
target_compile_features(main PUBLIC cxx_std_17)
這是加入JFrog 庫,只是一次性的
conan remote add bincrafters "https://api.bintray.com/conan/bincrafters/public-conan"
建立好Project(忘了哪Day有說)之後不要立刻運行cmake,先運行下面的代碼
運行以下的script
cd build
conan install ..
cmake ..
ninja
./bin/main
因為FFmpeg用C寫成,調用代碼會比較複雜,我盡量解釋
#include "fmt/format.h"
#include "libavformat/avformat.h"
#include "libavutil/timestamp.h"
using namespace std;
using namespace fmt;
//我們要自己寫幾個Recycler,用來回收幾個FFmpeg的物件
//影片剪輯函數
auto video_trimmer = [](auto start, auto ends, auto input, auto output){
auto output_format = make_shared<AVOutputFormat>(NULL);
auto input_content = make_shared<AVFormatContext>(NULL);
auto output_content = make_shared<AVFormatContext>(NULL);
auto packet = make_shared<AVPacket>(NULL);
av_register_all();
//先將輸入文件灌到input stream當中
avformat_open_input(&input_content, input, 0, 0);
av_dump_format(input_content, 0, input, 0);
};
int main(){
print("Hello");
}
明天繼續吧....