Android 音視頻深入 二十一 FFmpeg視頻剪切

来源:https://www.cnblogs.com/jianpanwuzhe/archive/2018/03/10/8540271.html
-Advertisement-
Play Games

視頻剪切我意外的發現上一次的視頻壓縮的代碼能夠運行FFmpeg視頻剪切的命令,但是不能做視頻合併的命令,因為不能讀取記錄了幾個視頻的路徑的txt文件。 這裡我就說直說視頻剪切的過程,不說代碼,只說log,畢竟我也不清楚代碼往哪運行了 上一次的項目地址https://github.com/979451 ...


視頻剪切我意外的發現上一次的視頻壓縮的代碼能夠運行FFmpeg視頻剪切的命令,但是不能做視頻合併的命令,因為不能讀取記錄了幾個視頻的路徑的txt文件。

這裡我就說直說視頻剪切的過程,不說代碼,只說log,畢竟我也不清楚代碼往哪運行了


上一次的項目地址
https://github.com/979451341/FFmpegCompress

首先我們需要將項目代碼里改一下,將runCommand函數傳入的參數改成下麵這樣

                    int ret = FFmpegNativeBridge.runCommand(new String[]{"ffmpeg",
                            "-ss", "00:00:00",
                            "-t","00:00:10",
                            "-i", et_input.getText().toString(),
                            "-vcodec", "copy",
                            "-acodec", "copy",
                            et_output.getText().toString()});

開始就是解析命令

讀取開始時間,就是-ss後面的"00:00:00",你也可以寫成0


03-10 14:19:55.430 21706-22256/org.voiddog.ffmpeg D/TAG: Splitting the commandline.
03-10 14:19:55.430 21706-22256/org.voiddog.ffmpeg D/TAG: Reading option '-ss' ...
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG:  matched as option 'ss' (set the start time offset) with argument ’00:00:00'.

讀取結束時間,就是-t後面的時間,你也可以寫成10

03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Reading option '-t' ...
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG:  matched as option 't' (record or transcode "duration" seconds of audio/video) with argument ’00:00:10'.

設置輸入視頻文件,就是切割這個視頻文件的前10秒形成新的視頻

03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Reading option '-i' ...
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG:  matched as input url with argument '/storage/emulated/0/pauseRecordDemo/video/video.mp4'.

複製視頻流

03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Reading option '-vcodec' ...
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG:  matched as option 'vcodec' (force video codec ('copy' to copy stream)) with argument 'copy'.

複製音頻流

03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Reading option '-acodec' ...
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG:  matched as option 'acodec' (force audio codec ('copy' to copy stream)) with argument 'copy'.

最後就是選擇輸出視頻文件路徑

03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Reading option '/storage/emulated/0/pauseRecordDemo/video/compress6.mp4' ...
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG:  matched as output url.
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Finished splitting the commandline.
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Parsing a group of options: global .
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Successfully parsed a group of options.

開始創建並配置輸出視頻文件

03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Parsing a group of options: input url /storage/emulated/0/pauseRecordDemo/video/video.mp4.
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Applying option ss (set the start time offset) with argument 00:00:00.
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Applying option t (record or transcode "duration" seconds of audio/video) with argument 00:00:10.
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Successfully parsed a group of options.

然後打開它

03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Opening an input file: /storage/emulated/0/pauseRecordDemo/video/video.mp4.
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Opening '/storage/emulated/0/pauseRecordDemo/video/video.mp4' for reading
03-10 14:19:55.431 21706-22256/org.voiddog.ffmpeg D/TAG: Setting default whitelist 'file,crypto'
03-10 14:19:55.434 21706-22256/org.voiddog.ffmpeg D/TAG: Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
03-10 14:19:55.434 21706-22256/org.voiddog.ffmpeg D/TAG: ISO: File Type Major Brand: mp42

解析輸出視頻文件的頭部,不知道啥用

03-10 14:19:55.441 21706-22256/org.voiddog.ffmpeg D/TAG: stts: 0 ctts: 7507, ctts_index: 0, ctts_count: 699
03-10 14:19:55.441 21706-22256/org.voiddog.ffmpeg D/TAG: stts: 3753 ctts: 7507, ctts_index: 0, ctts_count: 699
03-10 14:19:55.441 21706-22256/org.voiddog.ffmpeg D/TAG: stts: 7507 ctts: 7507, ctts_index: 0, ctts_count: 699
03-10 14:19:55.441 21706-22256/org.voiddog.ffmpeg D/TAG: stts: 11260 ctts: 15015, ctts_index: 1, ctts_count: 699
03-10 14:19:55.441 21706-22256/org.voiddog.ffmpeg D/TAG: stts: 15014 ctts: 7508, ctts_index: 2, ctts_count: 699







獲取編碼器,和獲取輸入視頻文件的媒體格式信息

03-10 14:19:55.600 21706-22256/org.voiddog.ffmpeg D/TAG: Parsing MediaFormat {image-data=java.nio.HeapByteBuffer[pos=0 lim=104 cap=104], mime=video/raw, crop-top=0, crop-right=1279, slice-height=720, color-format=21, height=720, width=1280, crop-bottom=719, crop-left=0, stride=1280}
03-10 14:19:55.601 21706-22256/org.voiddog.ffmpeg I/TAG: Output crop parameters top=0 bottom=719 left=0 right=1279, resulting dimensions width=1280 height=720
03-10 14:19:55.601 21706-22256/org.voiddog.ffmpeg D/TAG: MediaCodec 0xe4998b40 started successfully
03-10 14:19:55.601 21706-22256/org.voiddog.ffmpeg I/TAG: MediaCodec started successfully, ret = 0



獲取輸入視頻文件的相關數據


03-10 14:19:55.643 21706-22256/org.voiddog.ffmpeg D/TAG: After avformat_find_stream_info() pos: 1343 bytes read:93574 seeks:2 frames:4
03-10 14:19:55.643 21706-22256/org.voiddog.ffmpeg I/TAG: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/pauseRecordDemo/video/video.mp4':
03-10 14:19:55.643 21706-22256/org.voiddog.ffmpeg I/TAG:   Metadata:
03-10 14:19:55.643 21706-22256/org.voiddog.ffmpeg I/TAG:     major_brand     :
03-10 14:19:55.643 21706-22256/org.voiddog.ffmpeg I/TAG: mp42
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:     minor_version   :
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: 512
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:     compatible_brands:
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: isomiso2avc1mp41
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:     encoder         :
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: HandBrake 0.10.0 2014112200
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:   Duration:
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: 00:00:31.81
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: , start:
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: 0.083000
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: , bitrate:
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: 1878 kb/s
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:     Stream #0:0
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: (und)
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg D/TAG: , 3, 1/90000
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: : Video: h264 (avc1 / 0x31637661), nv12, 1280x720, 1728 kb/s
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: ,
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: 23.98 fps,
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: 23.98 tbr,
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: 90k tbn,
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: 90k tbc
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:  (default)
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:     Metadata:
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:       handler_name    :
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: VideoHandler
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:     Stream #0:1
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: (und)
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg D/TAG: , 1, 1/48000
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: : Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 146 kb/s
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:  (default)
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:     Metadata:
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG:       handler_name    :
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg I/TAG: Stereo
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg D/TAG: Successfully opened the file.



配置輸出視頻文件的相關數據



03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg D/TAG: Parsing a group of options: output url /storage/emulated/0/pauseRecordDemo/video/compress6.mp4.
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg D/TAG: Applying option vcodec (force video codec ('copy' to copy stream)) with argument copy.
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg D/TAG: Applying option acodec (force audio codec ('copy' to copy stream)) with argument copy.
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg D/TAG: Successfully parsed a group of options.
03-10 14:19:55.644 21706-22256/org.voiddog.ffmpeg D/TAG: Opening an output file: /storage/emulated/0/pauseRecordDemo/video/compress6.mp4.
03-10 14:19:55.648 21706-22256/org.voiddog.ffmpeg D/TAG: Setting default whitelist 'file,crypto'
03-10 14:19:55.649 21706-22256/org.voiddog.ffmpeg D/TAG: Successfully opened the file.
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: Output #0, mp4, to '/storage/emulated/0/pauseRecordDemo/video/compress6.mp4':
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:   Metadata:
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:     major_brand     :
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: mp42
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:     minor_version   :
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: 512
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:     compatible_brands:
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: isomiso2avc1mp41
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:     encoder         :
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: Lavf57.73.100
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:     Stream #0:0
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: (und)
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg D/TAG: , 0, 1/90000
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: : Video: h264 ([33][0][0][0] / 0x0021), nv12, 1280x720, q=2-31, 1728 kb/s
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: ,
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: 23.98 fps,
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: 23.98 tbr,
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: 90k tbn,
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: 90k tbc
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:  (default)
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:     Metadata:
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:       handler_name    :
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: VideoHandler
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:     Stream #0:1
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: (und)
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg D/TAG: , 0, 1/48000
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: : Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 146 kb/s
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:  (default)
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:     Metadata:
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:       handler_name    :
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: Stereo



將輸入視頻文件的音視頻流的前10秒數據複製到輸出視頻文件
明明是最重要的部分,卻只有這點log


03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: Stream mapping:
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:   Stream #0:0 -> #0:0
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:  (copy)
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:   Stream #0:1 -> #0:1
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG:  (copy)
03-10 14:19:55.650 21706-22256/org.voiddog.ffmpeg I/TAG: Press [q] to stop, [?] for help


統計出之前複製的數據的包


03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg I/TAG: frame=  244 fps=0.0 q=-1.0 Lsize=    2522kB time=00:00:10.06 bitrate=2052.0kbits/s speed= 136x    
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg I/TAG: video:2280kB audio:233kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead:
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg I/TAG: 0.355927%
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG: Input file #0 (/storage/emulated/0/pauseRecordDemo/video/video.mp4):
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG:   Input stream #0:0 (video):
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG: 245 packets read (2343932 bytes);
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG:   Input stream #0:1 (audio):
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG: 474 packets read (238991 bytes);
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG:   Total: 719 packets (2582923 bytes) demuxed
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG: Output file #0 (/storage/emulated/0/pauseRecordDemo/video/compress6.mp4):
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG:   Output stream #0:0 (video):
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG: 244 packets muxed (2335158 bytes);
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG:   Output stream #0:1 (audio):
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG: 473 packets muxed (238407 bytes);
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg V/TAG:   Total: 717 packets (2573565 bytes) muxed
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg D/TAG: 0 frames successfully decoded, 0 decoding errors
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg D/TAG: Statistics: 60 seeks, 764 writeouts
03-10 14:19:55.725 21706-22256/org.voiddog.ffmpeg D/TAG: Statistics: 2662503 bytes read, 2 seeks


效果


這個compress6.mp4就是從video.mp4切割出來的,video.mp4是31秒,compress6.mp4是10秒的時長,他們的體積大小吻合時間比例。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • vi /etc/sysconfig/network 修改主機名為orcale vi /etc/hosts 修改映射 IP+主機名 配置YUM 安裝yum install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33 g ...
  • iSCSI Linux客戶端的使用在Linux下,需要安裝相應的ISCSI客戶端軟體iscsi-initiator,安裝過程如下:步驟0:安裝iSCSI客戶端軟體,可以通過yum,也可以通過rpm安裝。步驟1:配置iSCSI通過vi打開/etc/iscsi/iscsid.conf:# vi /etc ...
  • Redis下載地址:https://github.com/MSOpenTech/redis/releases 下載msi格式的安裝文件。 1.運行安裝程式,單擊next按鈕。 2.勾選接受許可協議中的條款,單擊next按鈕。 3.選擇安裝目錄,勾選添加到環境變數,單擊next按鈕。 4.埠號以及防 ...
  • USE [ty_szum_oa_v2] GO /****** Object: StoredProcedure [dbo].[ty_oa_insert_ty_oa_document_publish] Script Date: 2018/3/9 9:34:26 ******/ SET ANSI_NULL... ...
  • 原文地址: http://storm.apache.org/releases/1.2.1/Understanding-the-parallelism-of-a-Storm-topology.html 什麼構成一個運行的拓撲:工作進程,執行器和任務 storm區分以下三個用於在Storm集群中實際運行 ...
  • 關係資料庫 關係資料庫(Relational Database,RDB)就是基於關係模型的資料庫。關係資料庫系統是一種重要的資料庫數據模型,不但其理論成熟,而且其應用範圍較網狀和層次資料庫系統也廣得多。目前,關係型資料庫管理系統已成為當今流行的資料庫系統,各種實現方法和優化方法比較完善。關係資料庫的 ...
  • 1、創建用戶 需要先用system用戶登錄資料庫,因為system用戶具有創建其他用戶的許可權。 語法[創建用戶]: create user 用戶名 identified by 口令[即密碼]; 例子: create user dhjw identified by 123456; 語法[更改用戶]: ...
  • 簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網 我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...