三種方法使用FFMPEG擷取視訊片斷

Yujiaao發表於2022-07-07

如何以 3 種簡單的方式使用 FFmpeg 剪下視訊(提取/修剪)
2020 年 10 月 12 日 Krishna Rao Vijayanagar FFmpeg

在本教程中,我們將瞭解如何使用 FFmpeg 以 3 種不同的方式剪下/修剪/提取視訊檔案的一部分。有一些快速的方法可以使用不太精確的查詢和複製視訊來實現這一點,並且有一種幀精確技術,雖然速度很慢,但可以選擇重新編碼視訊。

尋找使用-ss引數

假設您要提取視訊的一部分——比如從第 10 秒到第 20 秒。

您需要做的第一件事是告訴 FFmpeg搜尋到第 10 秒,對嗎?這是使用FFmpeg 命令列中的 -ss 引數實現的,語法為 –

./ffmpeg -ss <time> -i <inputvideo> ....... 

在這裡,時間被指定為HH:MM:SS.MILLISECONDS。例如,您可以告訴 FFmpeg 尋找01:02:03——即電影 1 小時的第 2 分鐘的第 3 秒!

指定結束時間

使用-ss,我們指定了開始時間。現在,讓我們學習指定結束時間。而且,如果我們將這兩者放在一起,我們可以使用 FFmpeg 有效地剪下/拼接視訊。

-t範圍
您可以使用引數指定所需剪輯的持續時間-t。例如,-ss 40 -t 10指示 FFmpeg 從第 40 秒開始提取 10 秒的視訊。

-to範圍
您可以使用引數指定結束時間-to。例如,-ss 40 -to 70指示 FFmpeg 從第 40 秒到第 70 秒提取 30 秒的視訊。

注意:如果你同時使用 -t 和 -to,那麼只有-t將被使用。

使用重新編碼進行剪下/修剪

如果您在剪下/修剪時重新編碼您的視訊,那麼您將獲得一個精確到幀的剪下,因為 FFmpeg 將重新編碼視訊並從 I 幀開始。這是使用輸出搜尋的命令列。在此示例中,您將指示 FFmpeg 讀取名為inputVideo.mp4 並提取 5 秒的視訊,從第 3 秒開始到第 8 秒結束 - 同時使用libx264.

ffmpeg -i inputVideo.mp4 -ss 00:03 -to 00:08 -c:v libx264 -crf 30 trim_opseek_encode.mp4

您還可以使用此命令列以特定位元率或質量重新編碼,使用crf更改解析度等。

請記住,此選項將花費大量時間和資源,因為您正在執行重新編碼。但是,它確實有不可忽視的優點。

我剪下了一個 5 秒的部分並使用libx264編碼. 您可以看到它在請求的時間準確啟動,沒有任何卡頓或黑框。如果仔細觀察,時間戳會表明這一點。

這是因為 FFmpeg 從一開始就對視訊進行重新編碼,並且可以根據需要插入 I 幀以生成視訊的幀精確剪輯。

無需重新編碼即可快速剪下/修剪(使用複製和輸入搜尋)

這是一個簡單的命令列,您可以使用它來剪下/修剪/提取視訊的一部分——快!

ffmpeg -ss 00:00:03 -i inputVideo.mp4 -to 00:00:08 -c:v copy -c:a copy  trim_ipseek_copy.mp4

引數很容易理解。您正在指示 FFmpeg 讀取名為 inputVideo.mp4 並提取 5 秒的視訊,該視訊從第 3 秒開始到第 8 秒結束。

相關: 使用 FFmpeg 進行音訊轉碼 - 使用 FFmpeg 輕鬆更改音訊編解碼器
此外,您告訴 FFmpeg 複製音訊和視訊而不執行重新編碼——這非常快!

將輸入搜尋引數-ss放在引數-i之前, 並且非常快,因為 FFmpeg 從I幀跳轉到I幀以到達搜尋點。

有什麼問題嗎?

由於搜尋操作在 I 幀之間跳轉,它不會準確地停止在您請求的幀(或時間)上。它將搜尋最近的 I 幀並從該點開始複製操作。

使用不重新編碼的輸出搜尋進行剪下/修剪
如果我們在-i引數之後插入-ss引數,則稱為輸出搜尋。

ffmpeg -i inputVideo.mp4 -ss 00:00:03 -to 00:00:08 -c:v copy -c:a copy trimmedVideo.mp4

但是,這裡又是一個問題。在視訊壓縮中,您擁有獨立編碼的 I 幀,並且您擁有依賴於其他幀進行解碼的預測幀 (P, B)。

如果您指定的開始時間落在預測幀上,則複製操作將從該幀開始(稱為 X)。輸出中可能缺少“X”需要解碼的幀!因此,在到達第一個 I 幀之前,輸出視訊可能不會順利啟動,並且可能會出現一些卡頓或黑色視訊。

這是輸出。

您可以看到時間戳從第 5 秒左右開始,一直持續到第 8 秒。同樣,類似於輸入搜尋,它無法找到 I 幀來執行準確的剪輯。

結論

有了它——使用 FFmpeg 剪下、修剪、提取部分視訊的三種簡單方法。這三種方法都滿足不同的需求,所以一定要嘗試一下,瞭解您的要求,併為您的專案使用正確的方法!

請在此處訪問我們的其他 FFmpeg 教程。

謝謝你,下次見!

相關文章