解釋:

解釋:

我有一個 3:00 分鐘的短片,中間僅從左向右翻轉約 :30 秒。

因此,如果整件事情從左到右翻轉,我只想申請:

ffmpeg -i 3min.mp4 -vf hflip flipped_3min.mp4

但由於它只是部分翻轉,因此有沒有辦法在單一 ffmpeg 命令中為該 hflip 過濾器應用時間段(1:30-2:00)?

我正在尋找一些關於此的文檔,但找不到任何類似的東西,我想知道這在 FFmpeg 中是否不可能。

答案1

如何使用 只翻轉影片的一小部分ffmpeg

這裡,-filter_complex是你的朋友,因為它可以創建過濾輸入鏈。我們仍將使用hflip過濾圖中問題中提到的過濾器。

您可以像這樣申請一個小節:

ffmpeg -i input.mp4 -filter_complex "[0:v]trim=start=0:duration=90[a];\
[0:v]trim=start=90:duration=30,setpts=PTS-STARTPTS[b];\
[b]hflip[c];\
[a][c]concat[d];\
[0:v]trim=start=120:duration=60,setpts=PTS-STARTPTS[e];\
[d][e]concat[out1]" -map [out1] flip.mp4

一行即可輕鬆複製+貼上:

ffmpeg  -i input.mp4 -filter_complex "[0:v]trim=start=0:duration=90[a];[0:v]trim=start=90:duration=30,setpts=PTS-STARTPTS[b];[b]hflip[c];[a][c]concat[d];[0:v]trim=start=120:duration=60,setpts=PTS-STARTPTS[e];[d][e]concat[out1]" -map [out1] flip.mp4

解釋:

使用過濾器圖表有點像創建一系列操作,並且在“過濾簡介”部分過濾器文檔。過濾器與輸入- 這是您在過濾器之前看到的位,例如[0:v](第一個輸入流的視頻)或[a](名為 的創建的輸出a) - 以及輸出。也就是說,一個輸入或者輸入根據 a 進行變換filter,然後輸出為 a輸出或者輸出

我們這裡有一組簡單的操作,如果我們按順序執行這些操作,我們可以建立輸入和輸出的過濾圖。

使用以下指令建立 3 個影片片段(來自輸入[0:v]trim

  • 第一段(90 秒),不執行任何操作(輸出為[a]
  • 第二段(30 秒),hflipsetpts避免持續時間問題(輸出修剪 as[b]並將其傳遞到hflip輸出 as [c]

然後將這兩者concat組合在一起以產生輸出[a]+[c] -> [d](持續時間:120 秒)

  • 第三段(60秒),再次設定PTS(輸出為[e]

連接段以產生輸出[d] + [e] -> [out1],並將-map其新增至檔案中的最終輸出。

這將為您提供與原始影片相同的持續時間(180 秒),但中間有 30 秒的部分,水平翻轉2


1

視覺表現來自ffmpeg過濾器文檔

在 中libavfilter,過濾器可以有多個輸入和多個輸出。為了說明可能發生的事情,我們考慮以下過濾圖。

                [main]
input --> split ---------------------> overlay --> output
            |                             ^
            |[tmp]                  [flip]|
            +-----> crop --> vflip -------+

此過濾器圖將輸入流分成兩個流,然後透過裁剪過濾器和 vflip 過濾器發送一個流,然後透過將其覆蓋在頂部將其與另一個流合併回來。


2測試使用ffmpeg version N-72939-g5b0f55a

答案2

在此範例中,水平翻轉發生在 2-3 秒之間。
在此範例中,水平翻轉發生在 2-3 秒之間。

一些過濾器透過以下方式提供時間軸支持啟用選項

您可以查看過濾器列表以及它們是否具有時間軸支援ffmpeg -filters。過濾器名稱前面的“ T”表示它支援時間軸編輯。如果您所需的過濾器沒有時間軸支持,請更新您的ffmpeg過濾器,因為過濾器有時會更新以支援此功能。否則,請按照其他答案中的說明使用修剪過濾器。

ffmpeg例子:

ffmpeg -i input -vf "hflip=enable='between(t,90,120)'" -c:a copy output

ffplay例子:

ffplay -vf "hflip=enable='between(t,90,120)'" input

相關內容