FFmpeg Principle分析Out put File 數據結構
struct OutputFile
struct OutputFile
是單個輸出文件的管理器。之前在 parse_optgroup()
處理好的 OptionsContext o
變量,有一部分字段會賦值給 OutputFile
管理器
如下:
OptionsContext o
變量的另一部分字段,會在 open_output_file()
裡面傳遞給 API 函數,例如:avformat_write_header()
,或者賦值給 OutputStream
的一些字段。
ret = avformat_write_header(of->ctx, &of->opts);
output_files
全局變量是一個數組,裡面的成員正是 OutputFile
,所以你在二次開發 ffmpeg.exe
的時候,可以通過 output_files
全局變量獲取到所有的輸出文件的信息。
OutputFile **output_files = NULL; int nb_output_files = 0;
我們接下來仔細學習一下 struct OutputFile
的結構,如下:
typedef struct OutputFile { AVFormatContext *ctx; AVDictionary *opts; int ost_index; /* index of the first stream in output_streams */ int64_t recording_time; ///< desired length of the resulting file in microseconds == AV_TIME_BASE units int64_t start_time; ///< start time in microseconds == AV_TIME_BASE units uint64_t limit_filesize; /* filesize limit expressed in bytes */ int shortest; int header_written; } OutputFile;
相比 InputFile
,OutputFile
數據結構的字段簡直太少瞭,讀起來太爽瞭。
struct OutputFile 字段解析
1, AVFormatContext *ctx
,容器上下文,也叫容器實例。
2, AVDictionary *opts
,容器格式的參數,是從 OptionsContext
裡面 的 OptionGroup
的 format_opts
復制過來的,如下:
av_dict_copy(&of->opts, o->g->format_opts, 0);
opts
會傳遞給 avformat_write_header()
函數,如下:
ret = avformat_write_header(of->ctx, &of->opts);
3, int ost_index
,輸出文件的第一個流在 output_streams
數組裡面的索引,output_streams
數組是一個全局變量,裡面包含所有輸出文件的所有輸出流。你二次開發 ffmpeg.exe
的時候,可以使用 output_streams
數組,獲取到所有的輸出流。
4, int64_t recording_time
,命令行選項 -t
的值,設置輸出文件的時長,單位是微秒,具體的功能是通過 trim
濾鏡來實現的。
5, int64_t start_time
,標記輸出文件的開始時間,例如一個輸入文件本來是 6 分鐘的,你可以用 -ss 120
指定 start_time
,這樣,輸出文件就會裁剪成 第 2 ~ 6分鐘 的視頻,前面 2 分鐘丟棄。
6, uint64_t limit_filesize
,限制輸出文件的大小,一旦達到這個大小,輸出文件立即結束。
7, int shortest
,命令行選項 -shortest
的值,當最短的輸出流結束的時候,整個文件就結束瞭,例如一個輸出文件裡面有 音頻流 跟 視頻流,視頻流 3 分鐘,音頻流 5 分鐘。如果啟用瞭這個選項,音頻流就會被裁剪成 3 分鐘。
8, int header_written
,是否已經調用瞭 avformat_write_header()
函數,往輸出文件寫入瞭頭部信息。
以上就是FFmpeg Principle分析Out put File 數據結構的詳細內容,更多關於Out put File 數據結構的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- FFmpeg Principle學習open_output_file打開輸出文件
- Qt+FFMPEG實現循環解碼詳解
- FFmpeg Principle學習new_video_stream添加視頻輸出流
- PHP內存溢出優化代碼詳解
- python基於moviepy實現音視頻剪輯