FFmpeg常見命令行(五):FFmpeg濾鏡使用

前言

在Android音視頻開發中,網上知識點過于零碎,自學起來難度非常大,不過音視頻大牛Jhuster提出了《Android 音視頻從入門到提高 - 任務列表》,結合我自己的工作學習經歷,我準備寫一個音視頻系列blog。本文是音視頻系列blog的其中一個, 對應的要學習的內容是:如何使用FFmpeg命令行進行濾鏡的處理。


音視頻系列blog

音視頻系列blog: 點擊此處跳轉查看.


目錄

在這里插入圖片描述


1 FFmpeg濾鏡Filter描述格式

1.1 FFmpeg濾鏡Filter的參數排列方式

在FFmpeg中,濾鏡(Filters)是用于處理音頻和視頻流的效果和轉換的工具。濾鏡可以通過一系列的參數來配置其行為。參數排列方式在不同版本的FFmpeg中可能有所不同,但一般情況下,濾鏡的參數可以按照以下方式排列:

ffmpeg -i input.mp4 -vf filter1=value1:param1=value2,filter2=value3:param2=value4 output.mp4

在這里,-vf 是用于指定視頻濾鏡的選項,后面緊跟著一系列的濾鏡和參數。每個濾鏡及其參數都以逗號分隔。例如,假設你想要應用一個調整亮度和對比度的濾鏡,你可以這樣寫:

ffmpeg -i input.mp4 -vf brightness=0.5:contrast=1.2 output.mp4

這里的 brightnesscontrast 是濾鏡名稱,后面的數字是對應的參數值。參數之間使用冒號分隔。

如果一個濾鏡有多個參數,你可以按照如下方式傳遞它們:

ffmpeg -i input.mp4 -vf filter_name=param1=value1:param2=value2:param3=value3 output.mp4

請注意,濾鏡的參數名和取值根據具體的濾鏡而定,不同的濾鏡可能有不同的參數要求和命名。

對于音頻濾鏡,也可以使用 -af 選項來指定,參數排列方式與視頻濾鏡類似:

ffmpeg -i input.mp3 -af filter1=value1:param1=value2,filter2=value3:param2=value4 output.mp3

需要根據你所使用的具體濾鏡的文檔來了解其參數的正確排列方式。你可以通過在命令行中運行 ffmpeg -filters 來查看所有可用的濾鏡及其參數。

總之,FFmpeg的濾鏡參數排列方式是通過在 -vf(視頻濾鏡)和 -af(音頻濾鏡)選項后使用逗號分隔的鍵值對來實現的。


1.2 FFmpeg濾鏡Filter時間內置變量

在FFmpeg中,濾鏡(Filters)可以使用內置的時間相關變量來進行時間相關的操作。這些變量允許你在濾鏡處理過程中訪問和操作輸入流的時間信息。以下是一些常用的時間內置變量:

  1. t:當前幀的時間戳,以秒為單位。
  2. n:當前幀的索引。
  3. pts:當前幀的顯示時間戳(Presentation Timestamp)。
  4. prev_pts:前一幀的顯示時間戳。
  5. start_pts:輸入流的開始時間戳。
  6. prev_selected_pts:前一幀的顯示時間戳,已通過濾鏡選擇(通常與prev_pts不同,因為可能會有幀被濾鏡丟棄)。
  7. tb:時間基準(timebase),用于計算時間戳。例如,如果時間基準是1/90000,那么1個時間單位表示1/90000秒。

這些時間內置變量可以在濾鏡鏈中使用,用于創建基于時間的效果、調整播放速度、裁剪、剪輯等操作。以下是一個簡單的示例,演示如何使用時間內置變量來創建一個變速效果:

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4

在這個示例中,setpts 濾鏡用于調整每一幀的顯示時間戳,使其變為原來的一半,從而實現視頻的兩倍速播放。


2 FFmpeg為視頻加水印

2.1 文字水印

在FFmpeg中為視頻添加文字水印,可以使用 drawtext 濾鏡。該濾鏡允許你在視頻中指定位置添加自定義文本,并且可以設置字體、顏色、大小等屬性。以下是一個基本示例:

ffmpeg -i input.mp4 -vf "drawtext=text='Your Watermark Text':x=10:y=10:fontsize=24:fontcolor=white" output.mp4

在這個示例中,drawtext 濾鏡被應用于輸入視頻。參數解釋如下:

  • text:設置水印文本內容。
  • xy:指定水印的位置,以像素為單位,從左上角計算。
  • fontsize:設置字體大小。
  • fontcolor:設置字體顏色。

你可以根據需要進行調整以滿足你的要求。請注意,字體和顏色的名稱、路徑等取決于你系統中的可用字體和顏色設置。

如果你希望水印在視頻的不同時間段內逐漸出現或消失,你可以結合使用時間內置變量來實現。例如,以下示例會在視頻的前5秒內淡入水印:

ffmpeg -i input.mp4 -vf "drawtext=text='Your Watermark Text':x=10:y=10:fontsize=24:fontcolor=white:enable='between(t,0,5)'" output.mp4

在這個示例中,enable 參數用于設置水印的顯示時間范圍。在上述示例中,水印會在時間范圍為0到5秒內逐漸淡入。


2.2 圖片水印

在FFmpeg中為視頻添加圖片水印,可以使用 overlay 濾鏡。這個濾鏡允許你將一個視頻或圖片疊加到另一個視頻上,從而實現水印效果。以下是一個基本的示例:

ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

在這個示例中,overlay 濾鏡被用于將 watermark.png 圖片疊加到 input.mp4 視頻上。參數解釋如下:

  • overlay:指定水印的位置,以像素為單位。這里的 10:10 表示在視頻的左上角添加水印。

你可以根據需要進行調整以滿足你的要求。如果你想要水印在視頻的不同時間段內逐漸出現或消失,你可以結合使用時間內置變量來實現,類似于之前提到的 drawtext 濾鏡的方法。

另外,你可以使用 xy 參數來進一步調整水印的位置,以及使用 alpha 參數來設置水印的透明度。以下是一個更復雜的示例:

ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=x=main_w-overlay_w-10:y=10:alpha=0.5" output.mp4

在這個示例中,水印被放置在視頻的右上角,同時設置了透明度為0.5。


3 FFmpeg生成畫中畫

在FFmpeg中生成畫中畫效果,可以使用 overlay 濾鏡。這個濾鏡可以將一個視頻或圖片疊加到另一個視頻上,從而實現畫中畫效果。以下是一個生成畫中畫效果的基本示例:

ffmpeg -i background.mp4 -i overlay.mp4 -filter_complex "[0:v][1:v]overlay=10:10[out]" -map "[out]" output.mp4

在這個示例中,background.mp4 是背景視頻,overlay.mp4 是要疊加的畫中畫視頻。overlay 濾鏡將畫中畫視頻疊加到背景視頻上,并指定了疊加的位置為 (10, 10) 像素。

你可以根據需要對疊加的位置、大小、透明度等進行調整。如果你想要畫中畫在視頻的不同時間段內逐漸出現或消失,你可以結合使用時間內置變量來實現。

另外,你還可以通過設置 xy 參數,以及使用 alpha 參數來調整疊加的位置和透明度。以下是一個更復雜的示例,生成一個放大的畫中畫效果:

ffmpeg -i background.mp4 -i overlay.mp4 -filter_complex "[0:v][1:v]overlay=x=(main_w-overlay_w)/2:y=(main_h-overlay_h)/2:zoom=2:alpha=0.5[out]" -map "[out]" output.mp4

在這個示例中,zoom 參數設置為2,使得畫中畫視頻放大兩倍,同時 alpha 參數設置為0.5,使得畫中畫具有一定的透明度。


4 FFmpeg視頻多宮格處理

要在FFmpeg中進行視頻多宮格處理,也就是將多個視頻并排或縱向排列在一個畫面中,你可以使用 tile 濾鏡。這個濾鏡可以將多個輸入視頻分割并排列在一個畫面中。以下是一個基本的示例:

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -filter_complex "[0:v][1:v][2:v]tile=3x1" output.mp4

在這個示例中,input1.mp4input2.mp4input3.mp4 是要合并的多個輸入視頻。tile 濾鏡將這三個視頻按照3列1行的形式排列在一起。

你可以根據需要進行調整,比如改變排列的行數和列數,以及調整間隔等。如果輸入視頻的大小不同,你可能還需要進行尺寸調整以確保宮格處理后的輸出視頻大小是一致的。

以下是一個更復雜的示例,將四個輸入視頻按照2行2列的形式排列,并在每個視頻之間添加一些間隔:

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex "[0:v][1:v][2:v][3:v]tile=2x2:margin=10" output.mp4

在這個示例中,margin 參數用于設置視頻之間的間隔。


5 FFmpeg音頻流濾鏡操作

5.1 雙聲道、單聲道,雙音頻流概念

當涉及音頻處理時,雙聲道、單聲道和雙音頻流是一些基本的概念。先簡單的介紹一下它們:

  1. 雙聲道(Stereo)
    雙聲道是一種音頻格式,它模擬了我們兩只耳朵的聽覺感受。你可以將其想象為音樂或聲音從不同的方向傳入,就像你左耳聽到的聲音可能略有不同于右耳聽到的聲音。這種分離讓你能夠更好地感知聲音的位置和空間。在雙聲道音頻中,通常會有兩個聲道,一個代表左聲道,另一個代表右聲道。這使得音頻更具層次感和立體感。
  2. 單聲道(Mono)
    單聲道是一種音頻格式,其中所有聲音都混合在一個聲道中。這意味著不會有左右聲道的分離,所有聲音都在一個平面上。你可以將其想象為聲音似乎來自于一個唯一的方向。單聲道通常用于廣播、電話等場景,因為它更簡單且易于處理。
  3. 雙音頻流
    雙音頻流是指一個視頻文件中包含兩個獨立的音頻流。這兩個音頻流可以分別是不同的聲道,例如一個用于音樂,另一個用于配音。當你播放這樣的視頻時,你通常可以在設置中選擇要聽的音頻流,或者在播放時切換音頻流。這在多語言環境或者需要混合不同聲音的情況下非常有用。

總之,雙聲道提供了立體聲音的感覺,單聲道將所有聲音混合在一起,而雙音頻流則允許在一個視頻中包含多個獨立的音頻流。這些概念有助于我們更好地理解和處理不同類型的音頻。


5.2 雙聲道合并單聲道

在FFmpeg中,可以使用 amix 音頻濾鏡來將兩個單聲道音頻流合并成一個雙聲道音頻流。這個濾鏡允許你在時間上混合多個音頻流。以下是一個將兩個單聲道音頻合并成雙聲道音頻的示例:

ffmpeg -i input_mono1.wav -i input_mono2.wav -filter_complex "[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=2" output_stereo.wav

在這個示例中,input_mono1.wavinput_mono2.wav 是兩個單聲道音頻文件。amix 濾鏡將這兩個音頻流合并成一個雙聲道音頻文件。

參數解釋如下:

  • inputs:設置輸入的音頻流數量,這里是2。
  • duration:指定合并后音頻流的持續時間,這里選擇第一個輸入流的持續時間。
  • dropout_transition:設置混合過渡的時間,這里是2秒。這個參數可以調整,以平滑地過渡從一個聲道到另一個聲道。

你可以根據需要進行調整,以適應不同的音頻文件和要求。請注意,amix 濾鏡適用于將單聲道音頻合并成雙聲道音頻。


5.3 雙聲道提取

在FFmpeg中,可以使用 pan 音頻濾鏡來從雙聲道音頻流中提取單聲道音頻。這個濾鏡允許你調整聲道的分布,從而提取所需的聲道。以下是一個將雙聲道音頻中的左聲道提取為單聲道音頻的示例:

ffmpeg -i input_stereo.wav -filter_complex "[0:a]pan=1c|c0=c0[a]" -map "[a]" output_mono_left.wav

在這個示例中,input_stereo.wav 是一個雙聲道音頻文件。pan 濾鏡將左聲道提取為一個單聲道音頻文件。

參數解釋如下:

  • pan:指定聲道的調整。這里使用 1c|c0=c0 來提取左聲道的內容。
  • -map:用于選擇濾鏡處理后的音頻流。

可以根據需要進行調整,以提取右聲道或者其他聲道的內容。


5.4 雙聲道轉雙音頻流

在FFmpeg中,可以使用 channelsplit 音頻濾鏡來將雙聲道音頻流拆分為兩個獨立的音頻流,從而生成雙音頻流。以下是一個將雙聲道音頻流轉換為雙音頻流的示例:

ffmpeg -i input_stereo.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo[a1][a2]" -map "[a1]" output_left.wav -map "[a2]" output_right.wav

在這個示例中,input_stereo.wav 是一個雙聲道音頻文件。channelsplit 濾鏡將左聲道和右聲道拆分為兩個獨立的音頻流。

參數解釋如下:

  • channelsplit:用于拆分聲道。
  • channel_layout:指定拆分的聲道布局。這里使用 stereo 表示雙聲道。

通過 -map 參數,可以將拆分后的左聲道音頻流和右聲道音頻流分別保存到不同的輸出文件中。


5.5 單聲道轉雙聲道

在FFmpeg中,可以使用 pan 音頻濾鏡來將單聲道音頻流轉換為雙聲道音頻流。這個濾鏡可以讓你在不同的聲道中復制或調整聲音。以下是一個將單聲道音頻轉換為雙聲道音頻的示例:

ffmpeg -i input_mono.wav -filter_complex "[0:a]pan=stereo|c0=c0|c1=c0[a]" -map "[a]" output_stereo.wav

在這個示例中,input_mono.wav 是一個單聲道音頻文件。pan 濾鏡將單聲道音頻轉換為雙聲道音頻,其中左聲道和右聲道都使用單聲道音頻的內容。

參數解釋如下:

  • pan:用于調整聲道分布。這里使用 stereo|c0=c0|c1=c0 來復制單聲道的內容到左右聲道。

通過 -map 參數,可以將處理后的雙聲道音頻流保存到輸出文件中。


5.6 兩個音頻源合并雙聲道

在FFmpeg中,可以使用 amerge 音頻濾鏡來將兩個音頻源合并成一個雙聲道音頻流。這個濾鏡用于將多個音頻流混合在一起。以下是一個將兩個音頻源合并為雙聲道音頻的示例:

ffmpeg -i input_audio1.wav -i input_audio2.wav -filter_complex "[0:a][1:a]amerge=inputs=2[a]" -map "[a]" output_stereo.wav

在這個示例中,input_audio1.wavinput_audio2.wav 是兩個音頻文件。amerge 濾鏡將這兩個音頻流混合成一個雙聲道音頻文件。

參數解釋如下:

  • amerge:用于混合音頻流。
  • inputs:指定輸入的音頻流數量,這里是2。

通過 -map 參數,可以將混合后的雙聲道音頻流保存到輸出文件中。


5.7 多個音頻合并為多聲道

在FFmpeg中,可以使用 amerge 音頻濾鏡來將多個音頻合并成一個多聲道音頻流。這個濾鏡允許你將多個音頻流混合在一起,生成具有多個聲道的音頻。以下是一個將三個音頻源合并為一個三聲道音頻的示例:

ffmpeg -i input_audio1.wav -i input_audio2.wav -i input_audio3.wav -filter_complex "[0:a][1:a][2:a]amerge=inputs=3[a]" -map "[a]" output_3channel.wav

在這個示例中,input_audio1.wavinput_audio2.wavinput_audio3.wav 是三個音頻文件。amerge 濾鏡將這三個音頻流混合成一個三聲道音頻文件。

參數解釋如下:

  • amerge:用于混合音頻流。
  • inputs:指定輸入的音頻流數量,這里是3。

通過 -map 參數,你可以將混合后的多聲道音頻流保存到輸出文件中。請注意,混合多個音頻為多聲道時,確保輸入的音頻文件的聲道數和聲道布局是一致的,這樣才能得到正確的多聲道音頻。


6 FFmpeg音頻音量探測

6.1 音頻音量獲得

在FFmpeg中,可以使用 volumedetect 音頻濾鏡來探測音頻的音量級別。這個濾鏡允許你獲取音頻流的音量信息,以便進一步分析或處理。以下是一個獲取音頻音量的示例:

ffmpeg -i input_audio.wav -af "volumedetect" -vn -f null /dev/null

在這個示例中,input_audio.wav 是音頻文件。volumedetect 濾鏡會分析音頻流的音量信息。

參數解釋如下:

  • -af "volumedetect":將 volumedetect 濾鏡應用于音頻流。
  • -vn:禁用視頻流。
  • -f null /dev/null:將輸出重定向到空設備,因為我們只關心音量信息而不需要實際輸出文件。

運行命令后,你會在輸出中看到類似以下的信息:

[Parsed_volumedetect_0 @ 0x7fcb44a03dc0] mean_volume: -24.0 dB
[Parsed_volumedetect_0 @ 0x7fcb44a03dc0] max_volume: -15.0 dB
[Parsed_volumedetect_0 @ 0x7fcb44a03dc0] histogram_15db: 5
[Parsed_volumedetect_0 @ 0x7fcb44a03dc0] histogram_14db: 11

這些行中的 mean_volume 是平均音量的值,max_volume 是最大音量的值。值越小,音量越低。你可以根據需要將這些值用于進一步的音量分析或處理。

請注意,音量值是以負分貝(dB)為單位表示的。如果需要將這些值轉換為正分貝或其他音量單位,可以使用相應的數學轉換公式。


6.2 繪制音頻波形

要在FFmpeg中繪制音頻波形,可以使用 showwaves 音頻濾鏡。這個濾鏡允許你在視頻中繪制音頻波形圖,以可視化音頻的振幅變化。以下是一個繪制音頻波形的示例:

ffmpeg -i input_audio.wav -filter_complex "[0:a]showwaves=s=1280x720:colors=red:mode=line" -frames:v 1 output_waveform.png

在這個示例中,input_audio.wav 是音頻文件。showwaves 濾鏡將在一個幀中繪制音頻波形。

參數解釋如下:

  • s=1280x720:設置波形圖的分辨率為1280x720像素。
  • colors=red:設置波形圖的顏色為紅色。
  • mode=line:設置波形圖的顯示模式為線性波形。

通過 -frames:v 1 參數,你可以生成一個幀,然后將波形圖保存為輸出圖片文件 output_waveform.png

運行命令后,你會得到一個繪制了音頻波形的圖片文件。請注意,showwaves 濾鏡提供了許多其他的參數和選項,你可以根據需要進行調整以獲得不同的波形效果。如果想要在視頻中繪制音頻波形,可以使用類似的方法,只需將濾鏡應用到視頻流而不是圖像幀上。


7 FFmpeg為視頻加字幕

7.1 什么是ASS字幕流

ASS字幕流是一種高級的字幕格式,全名是"Advanced SubStation Alpha"。它與普通的字幕文件(如SRT格式)相比,提供了更多的樣式和特效選項,使字幕看起來更加漂亮和富有創意。

想象一下,你在看電影或視頻時,會出現在屏幕上方或下方的文字,這些文字是為了幫助你理解說話內容或提供其他信息的。ASS字幕就是一種能夠讓這些文字變得更豐富多彩的方式。

ASS字幕流不僅可以顯示文字,還可以調整字幕的字體、顏色、大小、位置等。甚至可以為字幕添加動畫、漸變效果、陰影和描邊,讓字幕看起來更生動。這就像是在電影中添加了一層視覺效果,讓字幕更好看、更有趣。

因此,ASS字幕流是一種讓電影和視頻中的字幕更有個性、更具吸引力的方式,通過使用它,字幕可以成為視頻內容的一部分,增加了觀眾的體驗。


7.2 ASS字幕流寫入視頻流

在FFmpeg中,要將ASS字幕流寫入視頻流,可以使用 ass 濾鏡。這個濾鏡可以將ASS字幕疊加到視頻上,使得字幕成為視頻的一部分。以下是一個將ASS字幕流寫入視頻流的示例:

ffmpeg -i input.mp4 -vf "ass=subtitle.ass" output_with_subtitles.mp4

在這個示例中,input.mp4 是視頻文件,subtitle.ass 是ASS字幕文件。ass 濾鏡將ASS字幕疊加到視頻上。

參數解釋如下:

  • subtitle.ass:指定ASS字幕文件的路徑和名稱。

你可以根據需要調整字幕的樣式、位置、字體、大小等,這些都可以在ASS字幕文件中設置。要了解更多關于ASS字幕文件的設置和樣式,你可以查閱相關的ASS字幕格式文檔。

請注意,ASS字幕文件需要符合ASS字幕格式,這種格式允許你在字幕文件中指定字幕的樣式、特效和動畫。


7.3 ASS字幕流寫入封裝容器

將ASS字幕流寫入封裝容器(例如MKV、MP4)需要使用一些特殊的選項。在FFmpeg中,可以使用 -c:s 參數來指定字幕流的編碼器,并使用 -scodec 參數來指定字幕流的編碼器類型。以下是一個將ASS字幕流寫入MKV封裝容器的示例:

ffmpeg -i input.mp4 -i subtitle.ass -c:s mov_text output_with_subtitles.mkv

在這個示例中,input.mp4 是視頻文件,subtitle.ass 是ASS字幕文件。-c:s mov_text 參數指定使用 mov_text 編碼器來寫入字幕流。

要將字幕寫入其他封裝容器,你可以更換 -c:s 參數中的編碼器類型。例如,對于MP4封裝容器,你可以使用 srt 編碼器:

ffmpeg -i input.mp4 -i subtitle.ass -c:s srt output_with_subtitles.mp4

參數解釋如下:

  • -c:s:用于指定字幕流的編碼器。
  • mov_textsrt:分別是MKV和MP4封裝容器所使用的字幕編碼器。

通過這樣的方式,可以將ASS字幕流寫入封裝容器中。?


8 FFmpeg視頻摳圖合并

摳圖合并是指將一個視頻中的某個部分(如人物、物體等)摳出,然后將其合并到另一個視頻或背景中。這通常用于實現特殊效果,比如把一個人物放到不同的背景中,創造出虛擬場景。

要在FFmpeg中實現視頻摳圖合并,通常需要以下步驟:

  1. 視頻摳圖:首先,你需要通過使用類似于 chromakeycolorkey 濾鏡來摳出視頻中的部分。這些濾鏡可以根據顏色信息將特定顏色范圍的區域摳出。例如,如果你要摳出一個綠色背景的人物,你可以使用 chromakey 濾鏡。
  2. 背景視頻:你需要準備一個背景視頻,這是摳出的部分將要合并的地方。
  3. 合并:使用 overlay 濾鏡將摳出的部分疊加到背景視頻上。這個濾鏡可以控制疊加的位置、大小等。

以下是一個基本的示例,展示了如何將摳圖后的人物疊加到背景視頻中:

ffmpeg -i person.mp4 -i background.mp4 -filter_complex "[0:v]chromakey=green:0.1:0.2 [chroma]; [1:v][chroma]overlay[out]" -map "[out]" output_merged.mp4

在這個示例中,person.mp4 是包含綠色背景的人物視頻,background.mp4 是背景視頻。chromakey 濾鏡用于摳圖,然后使用 overlay 濾鏡將摳圖后的人物疊加到背景上。


9 FFmpeg 3D視頻處理

9.1 stereo3d處理3D視頻

在FFmpeg中,可以使用 stereo3d 濾鏡來處理3D視頻,包括將單個視頻轉換為3D格式、調整3D效果以及將3D視頻轉換回2D。以下是一些 stereo3d 濾鏡的用法示例:

  1. 將單個視頻轉換為3D格式
ffmpeg -i input.mp4 -vf "stereo3d=al:sbsl" output_3d.mp4

在這個示例中,input.mp4 是輸入視頻文件。stereo3d 濾鏡將視頻轉換為3D格式。參數 al:sbsl 表示將左眼圖像放在左邊,右眼圖像放在右邊。

  1. 調整3D效果

你可以使用不同的參數來調整3D效果,例如調整眼距和視差。下面是一個示例:

ffmpeg -i input_3d.mp4 -vf "stereo3d=sbsr:eyepar=4:width=1920" output_adjusted_3d.mp4

在這個示例中,input_3d.mp4 是一個3D視頻文件。stereo3d 濾鏡使用參數 sbsr 表示將右眼圖像放在左邊,eyepar 參數用于調整眼距,width 參數指定輸出視頻的寬度。

  1. 將3D視頻轉換回2D

如果你想將3D視頻轉換回2D,你可以使用以下示例:

ffmpeg -i input_3d.mp4 -vf "stereo3d=abl" output_2d.mp4

在這個示例中,input_3d.mp4 是一個3D視頻文件。stereo3d 濾鏡使用參數 abl 表示只保留左眼圖像,從而將3D視頻轉換為2D。

請注意,stereo3d 濾鏡有許多不同的參數,可以用于不同的3D效果和轉換。


9.2 3D圖像轉換舉例

在FFmpeg中,可以使用 stereo3d 濾鏡來處理3D圖像,包括將單個圖像轉換為3D格式、調整3D效果以及將3D圖像轉換回2D。以下是一些 stereo3d 濾鏡的用法示例:

  1. 將單個圖像轉換為3D格式
ffmpeg -i input.jpg -vf "stereo3d=al:sbsl" output_3d.jpg

在這個示例中,input.jpg 是輸入圖像文件。stereo3d 濾鏡將圖像轉換為3D格式。參數 al:sbsl 表示將左眼圖像放在左邊,右眼圖像放在右邊。

  1. 調整3D效果

你可以使用不同的參數來調整3D效果,例如調整眼距和視差。下面是一個示例:

ffmpeg -i input_3d.jpg -vf "stereo3d=sbsr:eyepar=4:width=1920" output_adjusted_3d.jpg

在這個示例中,input_3d.jpg 是一個3D圖像文件。stereo3d 濾鏡使用參數 sbsr 表示將右眼圖像放在左邊,eyepar 參數用于調整眼距,width 參數指定輸出圖像的寬度。

  1. 將3D圖像轉換回2D

如果你想將3D圖像轉換回2D,你可以使用以下示例:

ffmpeg -i input_3d.jpg -vf "stereo3d=abl" output_2d.jpg

在這個示例中,input_3d.jpg 是一個3D圖像文件。stereo3d 濾鏡使用參數 abl 表示只保留左眼圖像,從而將3D圖像轉換為2D。

這些示例演示了如何在FFmpeg中使用 stereo3d 濾鏡來處理3D圖像,可以根據需要進行調整。


10 FFmpeg定時視頻截圖

10.1 vframe參數截取一張圖片

在FFmpeg中,可以使用 -vframes 參數來指定要截取的幀數,從而截取視頻中的一張或多張圖片。以下是一個截取一張圖片的示例:

ffmpeg -i input.mp4 -vframes 1 output.jpg

在這個示例中,input.mp4 是輸入視頻文件,output.jpg 是輸出圖片文件。-vframes 1 參數表示只截取一幀,即一張圖片。

如果你想要在特定的時間點截取一張圖片,你可以使用 -ss 參數來指定時間點。例如,要在視頻的第10秒處截取一張圖片,可以這樣做:

ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 output.jpg

在這個示例中,-ss 00:00:10 參數表示從視頻的第10秒開始截取。

請注意,使用 -vframes 參數來截取圖片會非常快速,因為它只截取指定數量的幀而不需要完整地解碼整個視頻。這使得截取圖片變得非常高效。

如果你想要截取多張圖片,只需將 -vframes 參數的值設置為所需的幀數即可。


10.2 fps濾鏡定時獲得圖片

要在特定的時間間隔內從視頻中定時獲取圖片,可以使用 fps 濾鏡。這個濾鏡允許你以指定的幀率從視頻流中獲取幀,然后保存為圖片。以下是一個根據指定的幀率定時獲取圖片的示例:

ffmpeg -i input.mp4 -vf "fps=1/5" -vsync 0 output_%03d.jpg

在這個示例中,input.mp4 是輸入視頻文件。fps=1/5 濾鏡指定了幀率為每秒5幀,這樣就會定時每隔0.2秒從視頻中獲取一幀。-vsync 0 參數禁用了同步幀處理,以確保準確的幀率。

output_%03d.jpg 表示輸出圖片的文件名,%03d 表示用三位數字來編號輸出圖片文件。這會生成類似 output_001.jpgoutput_002.jpg 等的文件名。

通過這個命令,你將會定時每隔0.2秒從視頻中獲取一幀,并將其保存為圖片。你可以根據需要調整幀率、文件名模式和輸出圖片格式。

如果你需要更多的定時控制,你也可以結合使用 -ss 參數來指定起始時間點。例如,要從視頻的第10秒開始,每隔1秒獲取一幀,你可以這樣做:

ffmpeg -i input.mp4 -vf "fps=1" -ss 10 -vsync 0 output_%03d.jpg

通過調整參數,你可以實現不同時間間隔的定時截圖操作。


11 FFmpeg生成測試元數據

11.1 FFmpeg生成音頻測試流

要在FFmpeg中生成音頻測試流,可以使用 aevalsrc 音頻濾鏡。這個濾鏡允許你生成包含特定音頻模式和聲音的音頻流。以下是一個生成音頻測試流的示例:

ffmpeg -f lavfi -i "aevalsrc=sin(400*2*PI*t):d=5" -c:a pcm_s16le output.wav

在這個示例中,aevalsrc 濾鏡用于生成一個包含正弦波的音頻流。參數解釋如下:

  • sin(400*2*PI*t):這是正弦波的表達式,其中 400 是頻率(赫茲),2*PI 是周期,t 是時間。
  • d=5:表示音頻持續時間為5秒。

通過 -c:a pcm_s16le 參數,你可以指定音頻流的編碼格式為16位線性PCM。最后,將生成的音頻流保存為輸出文件 output.wav

這個示例生成了一個包含特定頻率和持續時間的音頻測試流。


11.2 FFmpeg生成視頻測試流

要在FFmpeg中生成視頻測試流,可以使用 testsrc 視頻源濾鏡。這個濾鏡允許你生成不同類型的測試圖像和圖案,用于視頻流的測試和調試。以下是一個生成視頻測試流的示例:

ffmpeg -f lavfi -i testsrc=duration=5:size=1280x720:rate=30 output.mp4

在這個示例中,testsrc 濾鏡用于生成一個測試視頻流。參數解釋如下:

  • duration=5:表示視頻的持續時間為5秒。
  • size=1280x720:設置視頻分辨率為1280x720像素。
  • rate=30:設置視頻幀率為30幀/秒。

通過 -f lavfi 參數,你可以指定輸入為lavfi(libavfilter)源。最后,將生成的視頻流保存為輸出文件 output.mp4

這個示例生成了一個包含測試圖像的視頻測試流。你可以根據需要調整分辨率、幀率和其他參數來生成不同類型的測試圖像。 ?


12 FFmpeg對音視頻倍速處理

12.1 atempo音頻倍速處理

在FFmpeg中,你可以使用 atempo 音頻濾鏡來進行音頻的倍速處理,即加快或減慢音頻的播放速度。這個濾鏡可以用于在不改變音調的情況下調整音頻的播放速度。以下是一個使用 atempo 濾鏡的示例:

ffmpeg -i input.mp3 -filter:a "atempo=1.5" output_fast.mp3

在這個示例中,input.mp3 是輸入音頻文件。atempo=1.5 濾鏡參數表示將音頻的播放速度加快到原速度的1.5倍。

如果你想要將音頻的播放速度減慢,可以使用小于1的值,例如 atempo=0.8 表示將音頻的播放速度減慢到原速度的0.8倍。

請注意,使用 atempo 濾鏡可以改變音頻的播放速度,但不會改變音頻的音調。但是,過于快速或減慢音頻可能會導致音頻失真或質量下降,所以在調整倍速時需要注意音質。 ?


12.2 setpts視頻倍速處理

在FFmpeg中,可以使用 setpts 視頻濾鏡來進行視頻的倍速處理,即加快或減慢視頻的播放速度。這個濾鏡可以用于在不改變音頻的情況下調整視頻的播放速度。以下是一個使用 setpts 濾鏡的示例:

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output_fast.mp4

在這個示例中,input.mp4 是輸入視頻文件。setpts=0.5*PTS 濾鏡參數表示將視頻的播放速度加快到原速度的2倍(0.5倍的PTS意味著播放速度加快為2倍)。

如果你想要將視頻的播放速度減慢,可以使用大于1的值,例如 setpts=2*PTS 表示將視頻的播放速度減慢為原速度的一半。

需要注意的是,使用 setpts 濾鏡可以改變視頻的播放速度,但不會改變音頻的播放速度。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38583.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38583.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38583.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nginx反向代理服務流式輸出設置

Nginx反向代理服務流式輸出設置 1.問題場景 提問:為什么我部署的服務沒有流式響應 最近在重構原有的GPT項目時,遇到gpt回答速度很慢的現象。在使用流式輸出的接口時,接口響應速度居然還是達到了30s以上。 2.現象分析 分析現象我發現&…

Leetcode鏈表篇 Day3

.24. 兩兩交換鏈表中的節點 - 力扣(LeetCode) 1.構建虛擬結點 2.兩兩一組,前繼結點一定在兩兩的前面 3.保存結點1和結點3 19. 刪除鏈表的倒數第 N 個結點 - 力扣(LeetCode) 1.雙指針:快慢指針 兩個指針的差…

新能源汽車需要檢測哪些項目

截至2022年底,中國新能源車保有量達1310萬輛,其中純電動汽車保有量1045萬輛。為把好新能源汽車安全關,我國新能源汽車除了完善的強制性產品認證型式實驗外,還建立了“車企-地方-國家”逐級上報的三級監管體系實行新能源汽車全生命…

2023.8.14論文閱讀

文章目錄 ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation摘要本文方法實驗結果 DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection摘要本文方法實驗結果 ESPNet: Efficient Spatial Pyramid of Dilated Convo…

vue 路由地址把#去掉

在路由對象里邊添加history模式就不顯示# mode:history // 4.通過規則創建對象 const router new VueRouter({routes,// 默認模式為hash 帶# // history 不帶#mode:history })想把端口號8000換成其他的 比如我這樣的3000更換端口號教程

Android Framework 動態更新插拔設備節點執行權限

TF卡設備節點是插上之后動態添加,所以不能通過初始化設備節點權限來解決,需要監聽TF插入事件,在init.rc 監聽插入后動態更新設備節點執行權限 添加插拔TF卡監聽 frameworks/base/services/core/java/com/android/server/StorageManagerServic…

IL匯編ldc指令學習

ldc指令是把值送到棧上, 說明如下, ldc.i4 將所提供的int32類型的值作為int32推送到計算堆棧上; ldc.i4.0 將數值0作為int32推送到計算堆棧上; ... ldc.i4.8 將數值8作為int32推送到計算堆棧上; ldc.i4.m1 將數值-…

Stable Diffusion 告別復制關鍵詞,高質量提示詞自動生成插件

在使用SD時,我們經常會遇到心中無想法,或不知如何描述心中所想的圖像。有時由于提示詞的選擇不當,生成的圖片質量也不盡如人意。為此,我今天為大家推薦一個高質量的提示詞自動生成插件——One Button Prompt。 下面是他生成的一些樣圖。 文章目錄 插件安裝插件說明主菜單工…

用python繪制CDF圖

一、code import os.pathimport pandas as pd import numpy as np import matplotlib.pyplot as pltcsv_path r"XXX.csv" save_fig_path os.path.join(os.path.split(csv_path)[0], "metrics_cdf.png")# 從CSV讀取數據 data pd.read_csv(csv_path)[XXX…

Android 屏幕適配資源xml的配置方法

在 Android 中進行屏幕適配是確保應用在不同設備上正常顯示的重要步驟之一。資源文件夾的配置是實現屏幕適配的關鍵之一,以下是一些常見的資源文件夾配置方法,以適應不同屏幕尺寸和密度。 不同屏幕尺寸的適配: res/layout:通常存放…

使用vscode進行遠程調試

官方調試手冊:vscode官方調試手冊 1.安裝python擴展 如果是遠程連接的話,一定要在ssh上啟用擴展。不然創建基于python的配置文件時就會提示,無python擴展。 2.新建配置文件,并修改參數 點擊左側第四個按鈕,運行與調試…

【C# 基礎精講】異常的類型和處理方法

異常(Exception)是在程序執行過程中發生的意外或異常情況,例如除零錯誤、空引用訪問、文件不存在等。在C#及其他編程語言中,異常處理是一種重要的機制,用于捕獲和處理程序運行時可能出現的錯誤,以保證程序的…

【碎碎念隨筆】1、回顧我的電腦和編程經歷

?? 閑著無事,講述一下我的計算機和代碼故事 一、初識計算機 🖥? 余家貧,耕植無錢買電腦。大約六年級暑假,我在姐姐哪兒第一次接觸到了計算機(姐姐也是買的二手)。 🖥? 計算機真有趣&#x…

多線程并發服務器

代碼&#xff1a; #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 6666 //1024~49151 #define IP "192.168.122.130" //ifconfig查看本機IP #include <pthread.h> //…

深入解析:HTTP和HTTPS的三次握手與四次揮手

推薦閱讀 AI文本 OCR識別最佳實踐 AI Gamma一鍵生成PPT工具直達鏈接 玩轉cloud Studio 在線編碼神器 玩轉 GPU AI繪畫、AI講話、翻譯,GPU點亮AI想象空間 「java、python面試題」來自UC網盤app分享&#xff0c;打開手機app&#xff0c;額外獲得1T空間 https://drive.uc.cn/…

探索Python編程的技巧:多線程魔法、網絡舞臺、正則魔法陣與遞歸迷宮

一 多線程 1.1 進程和線程 進程&#xff1a; 就是一個程序&#xff0c;運行在系統之上&#xff0c;稱這個程序為一個運行進程&#xff0c;并分配進程ID方便系統管理。線程&#xff1a;線程是歸屬于進程的&#xff0c;一個進程可以開啟多個線程&#xff0c;執行不同的工作&…

【C++面向對象】--- 繼承 的奧秘(下篇)

個人主頁&#xff1a;平行線也會相交&#x1f4aa; 歡迎 點贊&#x1f44d; 收藏? 留言? 加關注&#x1f493;本文由 平行線也會相交 原創 收錄于專欄【C之路】&#x1f48c; 本專欄旨在記錄C的學習路線&#xff0c;望對大家有所幫助&#x1f647;? 希望我們一起努力、成長&…

Vim基本使用

Vim基本使用 概念模式類型常規模式編輯模式命令模式 概念 vim 是一款功能豐富、高度可定制和高效的文本編輯器&#xff0c;適用于處理各種文本文件和編程任務。熟練使用vim幫助提高編輯效率&#xff0c;并為用戶提供更多的操作選項。 模式類型 常規模式 使用vim打開一個文件…

Postman接口自動化測試實戰,從0到1一篇徹底打通...

目錄&#xff1a;導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 postman中的測試 …

【網絡基礎】傳輸層

【網絡基礎】傳輸層 文章目錄 【網絡基礎】傳輸層1、端口號1.1 工具 2、UDP協議2.1 協議端格式2.2 UDP特點2.3 傳輸數據報2.4 緩沖區2.5 基于UDP應用層協議2.6 使用注意事項 3、TCP協議3.1 協議段格式3.2 ACK機制3.3 超時重傳機制3.4 連接管理機制3.5 滑動窗口3.6 流量控制3.7 …