home · archive · links · projects

一些FFMpeg小竅門

燒錄字幕

如果要給視頻加載字幕的話,其實還是單獨加載文字格式的字幕軌或者字幕文件最方便。但是,如果視頻要傳到一些網站上,或者要用移動設備觀看,可能就需要把字幕燒到視頻裏面了。FFMpeg提供了一個命令:

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

有的字幕是.srt格式的,這時候要先轉碼成.ass格式:

ffmpeg -i input.srt output.ass

要是字幕是MKV文件中的字幕軌,那就需要先提取出來:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt

這裏0:s:0代表第一條字幕軌。因爲有時候一個視頻文件裏面有多條不同語言的字幕軌,比如說很多從Netflix上扒下來的視頻。如果要選擇其他的視頻軌,比如第二條,就、把-map改成0:s:1

合併音頻文件

要合併音頻文件的話,先要把文件列出來,放到一個文本文件裏面,像這樣:

file track-01.mp3
file track-02.mp3
file track-03.mp3
...
file track-XX.mp3

假設把上面的文件存成了list.txt,那麼就運行這個命令:

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp3

把視頻轉成GIF

用FFMpeg其實可以直接把視頻轉成GIF:

ffmpeg -i input.mp4 output.gif

但是,如果直接轉換的話,GIF圖像上會出現橫縱條紋。其實,數字信號處理領域有個專門術語描述這個技術:抖動(dither)。因爲GIF只有128種顏色可供選擇,所以把視頻轉換過來的時候難免會有損失,這個時候用抖動可減小量化誤差。

然而,雖然理論上說,量化誤差減小了,但是實際上人眼看起來卻是不舒服的,所以最好還是把抖動關掉。不過這樣的話步驟要複雜一點,首先要生成GIF調色板:

ffmpeg -i input.mp4 -vf palettegen palette.png

然後結合調色板文件,在禁用抖動的情況下啓動轉碼:

ffmpeg -i input.mp4 -i palette.png -filter_complex "paletteuse=dither=none" output.gif

這樣即可得到滿意的GIF圖片。


© Licensed under CC BY-NC-SA 4.0 if not specified otherwise.
Email: dzshy [at] outlook [dot] com