iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 29
1
Software Development

C++ 30天屠龍記系列 第 29

C++ 30天屠龍記(第28天): FFMPEG超速影片剪輯

今天在想應該講什麼C++的特性,或者什麼C++的Library,最後決定講FFMPEG,畢竟在介紹中和第二日答應過大家的。

大綱

  1. 什麼是FFmpeg
  2. 用Conan, ninja 和 cmake配置FFmpeg
  3. FFmpeg剪片例子

什麼是FFmpeg

FFmpeg是一個處理影片的C++模組,全稱是(Fast Forward mpeg),當中包括影片解碼編碼,影片剪輯,filtering,美化等等,適當的使用能達到很好的效果,我今天就介紹一下怎麼使用FFmpeg剪片,比Premiere iMovie等等快超級多的。

配置

Conan

今日我們專門講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");
}
明天繼續吧....

上一篇
C++ 30天屠龍記(第28天): OpenCV圖片美化
下一篇
C++ 30天屠龍記(第29天): 感言
系列文
C++ 30天屠龍記30

尚未有邦友留言

立即登入留言