FFmpeg Basic學習筆記(3)


視頻疊加——畫中畫效果 overlay video filter

視頻疊加比較常見的應用場景是台標的疊加,在畫面左上角、右上角、左下角或右下角疊加台標。
ffmpeg提供的overlay filter支持視頻疊加。基本語法如下:

overlay[=x:y[[:rgb={0,1}]]]

其中x、y是嵌入圖像的位置,默認為0;rgb表示輸入源的格式,0表示不修改,1表示設置輸入源格式為RGB。可使用下面四個參數:

  • main_w或W、main_h或H,主輸入(被嵌入的視頻)的寬度和高度
  • overlay_w或w、 overlay_h或h,疊加輸入(嵌入視頻)的寬高

下面的命令行可以實現視頻疊加:

ffmpeg -i input1 -i input2 -filter_complex overlay=x:y output

台標疊加測試

在左上角疊加可以用下面命令行:

ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay pair1.mp4

疊加效果如下圖:
2-1.png

右下角疊加可以使用下面命令行:

ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w:H-h pair3.mp4

疊加效果如下:

2-2.png

畫面上的字體顯示 drawtext video filter

drawtext filter的語法如下:

drawtext=fontfile=font_f:text=text1[:p3=v3[:p4=v4[...]]]

p3, p4 ... means parameter #3, parameter #4, etc.

由於具體參數比較多,有興趣的可以閱讀FFmpeg Basics的Ch10或者參考ffmpeg的在線文檔drawtext filter
下面是具體的例子:

ffplay -f lavfi -i color=c=white -vf drawtext=fontfile=arial.ttf:text=Welcome

這會在白色窗口的左上角顯示Welcome字樣。效果如下:
2-3.jpg

顯示位置可以通過x、y設置,命令如下:

ffplay -f lavfi -i color=c=white -vf
drawtext="fontfile=arial.ttf:text='Good day':x=(w-tw)/2:y=(h-th)/2"

字體大小和顏色可以通過fontcolor、fontsize設置,命令如下:

ffplay -f lavfi -i color=c=white -vf drawtext=
"fontfile=arial.ttf:text='Happy Holidays':x=(w-tw)/2:y=(h-th)/2:
fontcolor=green:fontsize=30"

滾動字幕的實現

drawtext filter支持t,表示當前運行的描述。配合起來可以實現滾動字幕的效果。
可參考下面命令行:

ffmpeg -f lavfi -i color=c=#abcdef -vf drawtext=
"fontfile=arial.ttf:text='Dynamic RTL text':x=w-t*50:
fontcolor=darkorange:fontsize=30" output

水平滾動,每秒滾動50 pixel。

不同格式之間的轉換——轉碼/轉封裝

媒體文件格式是指用於存儲特定音頻或視頻的標准。容器格式是指可以存儲多個音頻或視頻流的標准。ffmpeg支持的文件格式可以通過-formats查看。

通常容器支持多種音視頻格式的封裝,比如AVI、TS、MKV、MP4都是容器,可以支持H.264、MPEG-2、AAC等音視頻格式。在實際應用中如果僅僅想更換封裝格式,可以考慮使用-c copy-c:a copy-c:v copy

下圖說明了實際轉碼過程中涉及到的封裝格式(容器格式)、編解碼格式(比特流格式)
2-4.jpg

轉碼過程中每個容器或codec都有私有的參數,可以使用-h encoder=encoder_name查看。具體參考FFmpeg Basic學習筆記1

ffmpeg支持的時間格式

多媒體處理涉及修改輸入源的總長度、延時指定時間或者截取特定時間等操作。ffmpeg中支持的時間格式有兩種:

  • [-]HH:MM:SS[.m...]
  • [-]S+[.m...]

按照時間設置輸出流長度

使用-t命令參數即可。下面語句從輸入源中截取三分鍾輸出:

ffmpeg -i music.mp3 -t 180 music_3_minutes.mp3

使用幀數限定輸出長度

  • 音頻使用 -aframes number-frames:a number
  • 視頻使用 -vframes number-frames:v number

下面命令行指定輸出15000幀視頻,大約10分鍾視頻長度(按25fps計算)

ffmpeg -i video.avi -vframes 15000 video_10_minutes.avi

指定延時時間

可使用-ss命令項(seek from start)。調用命令如下:

ffmpeg -i input.avi -ss 10 output.mp4

表示從第10秒開始輸出數據。

-ss-t配合使用可以截取任意時長的畫面,比如下面命令截取輸入的第五分鍾(240秒~300秒)的視頻。

ffmpeg -i video.mpg -ss 240 -t 60 clip_5th_minute.mpg

限制處理時間

使用-timelimit命令可以限制ffmpeg處理的總時間。命令如下:

ffmpeg -i input.mpg -timelimit 600 output.mkv

不管ffmpeg有沒有處理完,600s之后程序退出。

播放速度改變的filter(注意修改的是時間戳)

視頻可以使用setpts filter;音頻可以使用atempo filter。

Metadata和Subtitle 元數據和字幕流

Metadata通常用於記錄一些標簽信息,比如發布者、作者、發布日期、專題名等。字幕流在配音電影中比較常見,通常以獨立的字幕文件存在,需要的時候可以加載進來播放。

MetaData

MetaData在MP3文件中比較常見,在mp3播放時可以看到比較多的類似信息,使用下面命令可以查看metadata:

ffplay -i "Kalimba.mp3"

創建metadata

可以使用-metadata key=value的形式創建metadata,比如下面命令行:

ffmpeg -i input -metadata artist=FFmpeg -metadata title="Test 1" output

刪除metadata

使用-map_metadata -1可以刪除metadata

subtitle

subtitle有兩種,一種是外置的,可以獨立編輯發行;一種是內嵌的,嵌入到視頻文件中。

subtitles video filter內嵌字幕流

語法如下:

subtitles=filename[:original_size]

下面命令行可以實現字幕嵌入:

ffmpeg -i video.avi -vf subtitles=titles.srt video.mp4

附加說明

本部分內容主要涉及《Ffmpeg Basic》的第8章到第14章(包含第14章),主要是關於視頻疊加、字符疊加、subtitle、時間操作、多媒體文件的容器格式和文件格式。

一部分內容沒有做詳細介紹,有些參數建議參考FFmpeg的官網


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM