ffmpeg入門教程之ffmpeg命令行實戰------視頻濾鏡

ffmpeg入門教程https://www.jianshu.com/p/042c7847bd8a

本文將會持續更新,敬請關注

視頻播放器原理

———————————————— 版權聲明

此處摘抄部分爲CSDN博主「雷霄驊」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/leixiaohua1020/article/details/18893769

視音頻技術主要包含以下幾點:封裝技術,視頻壓縮編碼技術以及音頻壓縮編碼技術。如果考慮到網絡傳輸的話,還包括流媒體協議技術。

視頻播放器播放一個互聯網上的視頻文件,需要經過以下幾個步驟:解協議,解封裝,解碼視音頻,視音頻同步。如果播放本地文件則不需要解協議,爲以下幾個步驟:解封裝,解碼視音頻,視音頻同步。他們的過程如圖所示。

在這裏插入圖片描述

解協議的作用

就是將流媒體協議的數據,解析爲標準的相應的封裝格式數據。視音頻在網絡上傳播的時候,常常採用各種流媒體協議,例如HTTP,RTMP,或是MMS等等。這些協議在傳輸視音頻數據的同時,也會傳輸一些信令數據。這些信令數據包括對播放的控制(播放,暫停,停止),或者對網絡狀態的描述等。解協議的過程中會去除掉信令數據而只保留視音頻數據。例如,採用RTMP協議傳輸的數據,經過解協議操作後,輸出FLV格式的數據。

解封裝的作用

就是將輸入的封裝格式的數據,分離成爲音頻流壓縮編碼數據和視頻流壓縮編碼數據。封裝格式種類很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是將已經壓縮編碼的視頻數據和音頻數據按照一定的格式放到一起。例如,FLV格式的數據,經過解封裝操作後,輸出H.264編碼的視頻碼流和AAC編碼的音頻碼流。

解碼的作用

就是將視頻/音頻壓縮編碼數據,解碼成爲非壓縮的視頻/音頻原始數據。音頻的壓縮編碼標準包含AAC,MP3,AC-3等等,視頻的壓縮編碼標準則包含H.264,MPEG2,VC-1等等。解碼是整個系統中最重要也是最複雜的一個環節。通過解碼,壓縮編碼的視頻數據輸出成爲非壓縮的顏色數據,例如YUV420P,RGB等等;壓縮編碼的音頻數據輸出成爲非壓縮的音頻抽樣數據,例如PCM數據。

視音頻同步的作用

就是根據解封裝模塊處理過程中獲取到的參數信息,同步解碼出來的視頻和音頻數據,並將視頻音頻數據送至系統的顯卡和聲卡播放出來。

命令行詳解可參考ffmpeg入門教程或者參考官網文檔

https://www.jianshu.com/p/042c7847bd8a

實例來源於《FFmpeg從入門到精通》

-filter_complex爲視頻添加logo

ffmpeg -i C:\Users\Administrator\Desktop\袋熊.mp4 
-i F:\表情包\JB`~O0J_SH{U{VA0U{3%X~I.gif 
-filter_complex "[1:v]scale=300:300[logo];[0:v][logo]overlay=x=0:y=0" 
C:\Users\Administrator\Desktop\filtered_video.mp4
  • 2-i指定2個輸入文件
  • -filter_complex複雜濾鏡
  • [1:v]scale=300:300[logo]將第2個輸入文件的視頻流(如果是圖片文件,則操作的是圖片)縮放成300x300大小,並設置標籤[logo]
  • [0:v][logo]overlay=x=0:y=0將第1個輸入文件的視頻流用[logo]覆蓋在(0,0)位置(圖片的左上角在視頻的0,0位置)
  • 最後是輸出文件

在這裏插入圖片描述

movie爲視頻添加logo

ffmpeg -y -i C:\Users\cy\Desktop\video.mp4 
-vf "movie=C\\:/Users/cy/Desktop/logo.jpg[logo];[in][logo]overlay=100:100[out]"
 C:\Users\cy\Desktop\video_filtered.mp4

在這裏插入圖片描述

movie實現視頻畫中畫

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 
-vf "movie=C\\:/Users/Administrator/Desktop/video.mp4,scale=480x320[logo];[in][logo]overlay[out]"
 C:\Users\Administrator\Desktop\video_filter.mp4

在這裏插入圖片描述
將畫中畫放置於右下角

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 
-vf "movie=C\\:/Users/Administrator/Desktop/video.mp4,scale=480x320[logo];
[in][logo]overlay=x=main_w-480:y=main_h-320[out]" C:\Users\Administrator\Desktop\video_filter.mp4
  • main_w主視頻寬度
  • main_h主視頻高度
    在這裏插入圖片描述

movie實現視頻畫中畫跑馬燈

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 
-vf "movie=C\\:/Users/Administrator/Desktop/video.mp4,scale=480x320[logo];
[in][logo]overlay=x='if(gte(t,1),-w+t*400,NAN)':y=0 [out]" 
-vcodec libx264 C:\Users\Administrator\Desktop\video_filtered.flv
  • t 時間,s
  • [in] 指輸入視頻
  • [out] 指輸出視頻
  • gte(t,1)如果t>=1,返回1,否則返回0
  • if(gte(t,1),-w+t*400,NAN) 如果gte(t,1)非0,返回-w+t*400,否則返回NAN,非數,即不顯示跑馬燈視頻。
    表示從主視頻播放1s後開始顯示跑馬燈,跑馬燈視頻左上角x座標爲-w+t*400,w是跑馬燈視頻寬度
  • -vcodec 指定編解碼器

在這裏插入圖片描述

視頻添加中文水印的正確姿勢

ffmpeg -y -i C:\Users\cy\Desktop\video.mp4 -vf
 "drawtext=fontsize=100:fontfile=C\\:/Windows/Fonts/simhei.ttf:text='傻逼,你好':
 fontcolor=green:box=1:boxcolor=yellow:x=20:y=20" C:\Users\cy\Desktop\video_filtered.mp4
  • -y強制覆蓋輸出文件
  • -i指定輸入文件
  • -vf -filter:v的別名,爲視頻流添加濾鏡處理
  • drawtext添加文字水印
  • fontsize指定字體大小
  • fontfile指定字體庫
  • text指定文字內容
  • fontcolor指定文字顏色
  • box=1表示爲水印添加背景色
  • boxcolor指定背景色
  • x=20:y=20指定水印偏移的位置
  • 最後是輸出文件

fontfile=C\\:/Windows/Fonts/simhei.ttf指定的字體是黑體
windows系統下,字體在C:\Windows\Fonts下,

注意:指定fontfile路徑時,號必須用\\轉義,路徑不能用\,必須/,否則亂碼,因爲路徑指定有誤,ffmpeg無法找到字庫

在這裏插入圖片描述

中文水印亂碼

fontfile=C\\:\Windows\Fonts\simhei.ttf
fontfile=C\:\Windows\Fonts\simhei.ttf

在這裏插入圖片描述

視頻添加實時時間水印

ffmpeg -y -i C:\Users\cy\Desktop\video.mp4 -vf 
"drawtext=fontsize=100:text='%{localtime\:%Y-%m-%d %H-%M-%S}':
fontcolor=green:box=1:boxcolor=yellow:x=20:y=20" 
C:\Users\cy\Desktop\video_filtered.mp4

%{localtime\:%Y-%m-%d %H-%M-%S} 注意大小寫,否則GG

在這裏插入圖片描述

視頻間隔性添加水印

ffmpeg -y -i C:\Users\cy\Desktop\video.mp4 
-vf "drawtext=fontsize=100:text='helloworld':fontcolor=green:
box=1:boxcolor=yellow:x=20:y=20:enable=lt(mod(t\,2)\,1)" 
C:\Users\cy\Desktop\video_filtered.mp4
  • t 時間,s
  • mod(t\,2) 計算t%2
  • lt(mod(t\,2)\,1) 如果mod(t\,2)<1,返回1,否則返回0
  • enable=lt(mod(t\,2)\,1) 每隔1s顯示一次水印,enable=lt(mod(t\,3)\,1) 每隔3s.

注意:逗號需要轉義

在這裏插入圖片描述

視頻九宮格

在這裏插入圖片描述
在這裏插入圖片描述
圖片來源於《FFmpeg從入門到精通》

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 -i C:\Users\Administrator\Desktop\video.mp4 
-i C:\Users\Administrator\Desktop\video.mp4 -i C:\Users\Administrator\Desktop\video.mp4 
-filter_complex "nullsrc=size=640x480[base];
[0:v]scale=320x240[topleft];
[1:v]scale=320x240[topright];
[2:v]scale=320x240[bottomleft];
[3:v]scale=320x240[bottomright];
[base][topleft]overlay=shortest=1[tmp1];
[tmp1][topright]overlay=shortest=1:x=320[tmp2];
[tmp2][bottomleft]overlay=shortest=1:y=240[tmp3];
[tmp3][bottomright]overlay=shortest=1:x=320:y=240" 
-vcodec libx264 C:\Users\Administrator\Desktop\video_filtered.flv
  • nullsrc 創建畫布

最短的那條流決定了編碼時長

默認情況下,編解碼處理是處理完所有媒體流纔會結束的,也就是最長的那條流決定處理的時長。可以使用 -shortest參數指定最短的那條流決定處理時長。

比如要合併video.avi 和 audio.mp3,音頻audio.mp3時長比視頻video的短,現在要處理完音頻即退出,如下:

ffmpeg -i video.avi -i audio.mp3 -shortest output.mp4  //添加-shortest參數

此處overlay=shortest=1,表示用作overlay的視頻流結束後,停止編碼(當然要所有用作overlay的視頻流都結束後纔會停止編碼),如果不指定該參數,編碼會永不停止,視頻後面會一直黑屏。

在這裏插入圖片描述

vframes 視頻截圖

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 -ss 00:00:4 
-vframes 1 C:\Users\Administrator\Desktop\video.png
  • -ss 定位時間
  • -vframes限制輸出的視頻幀數

在這裏插入圖片描述

fps濾鏡定時截圖

ffmpeg -y -i C:\Users\Administrator\Desktop\haibao.mp4 -vf fps=1/2 C:\Users\Administrator\Desktop\haibao%d.png
  • fps frame per seconds 幀率
  • fps=1/2 每2s截圖1張 (可理解爲1/2張每s)
  • fps=1 每1s截圖1張
  • fps=2 每1s截圖2張

截取關鍵幀圖片

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 
-vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr C:\Users\Administrator\Desktop\thumb%d.png

setpts視頻倍速處理

半速處理

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 -filter_complex "setpts=PTS*2" 
C:\Users\Administrator\Desktop\video_.mp4

輸出的視頻文件的時長是原來的2 倍,播放速度當然是原來的1/2

  • setpts更改輸入幀的PTS(顯示時間戳)。
  • PTS*2 原來幀在PTS時 顯示,*2讓幀延遲到PTS*2時顯示

2倍速處理

ffmpeg -y -i C:\Users\Administrator\Desktop\video.mp4 -filter_complex "setpts=PTS/2" 
C:\Users\Administrator\Desktop\video_.mp4

輸出的視頻文件的時長和原來一樣(好奇),播放速度當然是原來的2倍

本文將會持續更新,敬請關注

歡迎分享、轉載、聯繫、指正、批評、撕逼

Github:https://github.com/AnJiaoDe

簡書:https://www.jianshu.com/u/b8159d455c69

CSDN:https://blog.csdn.net/confusing_awakening

ffmpeg入門教程:https://www.jianshu.com/p/042c7847bd8a

微信公衆號
這裏寫圖片描述

QQ羣

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章