Windows下使用ffmpeg为视频添加字幕
字幕分以下幾種形式:
第一種是外掛字幕(軟字幕),視頻文件和字幕文件分離。當播放某視頻文件時,會自動載入相同文件夾下同名的字幕文件,當然也可以用播放器(如:VLC media player)手動載入字幕(不要求字幕文件和視頻文件同名并在相同文件夾下,可任意載入)。
第二種是將字幕封裝到容器中,就是所謂的字幕流,和視頻流、音頻流同等地位。值得說明的是,并非所有的容器都支持字幕流,先進的 MKV 是支持的,MP4 目前我只知道支持蘋果的 MOV text。
ffmpeg -i input.mkv -i subtitles.srt -c copy output.mkv查看 output.mkv 的信息,已經包含了字幕流,但不知為何播放視頻時仍然不能顯示字幕。
從容器中提取字幕流,生成字幕文件(例子中生成的是 srt 格式的,可以任意生成所需的格式,改一下擴展名即可):
ffmpeg -i input.mkv output.srt第三種是內嵌字幕(硬字幕),利用 video filter(subtitles、ass、甚至是 overlay)將字幕文件燒進視頻流中,就像水印一樣。
在使用 FFmpeg 的 subtitles filter 或 ass filter 時,可能會出現類似于下面這樣的錯誤:
Fontconfig error: Cannot load default config file
[Parsed_subtitles_0 @ 0000000004b181c0] No usable fontconfig configuration file?found, using fallback.
Fontconfig error: Cannot load default config file
無效的解決方法:
Fontconfig 是一個用來配置和自定義字體訪問的庫,在這里是為了讓 ffmpeg 從系統中取用所需的字體。下載鏈接:http://www.freedesktop.org/software/fontconfig/release/。我下載的是?fontconfig-2.11.94.tar.gz。在存放 ffmpeg.exe 的文件夾內,新建一個命名為 fonts 的文件夾。把 fontconfig-2.11.94.tar.gz 解壓后,找到?fonts.conf.in、fonts.dtd 和 conf.d ,并把它們復制到剛才新建的文件夾 fonts 中,最后把 fonts.conf.in 重命名為?fonts.conf 即可。
通過以上步驟,盡管不再出現前面的錯誤,但輸出的視頻仍然不能顯示字幕。也許要先對 Fontconfig 進行編譯才行(盡管 ffmpeg 不會用到生成的庫),嘗試用 MinGW+msys 編譯了一下,沒有搞定。
有效解決:
還是需要 fonts.conf 文件。下載地址:http://download.csdn.net/detail/u013699869/9074131。只要一步,將下載的壓縮包解壓到 ffmpeg.exe 所在的文件夾下即可。解決方案來源:https://ffmpeg.zeranoe.com/forum/viewtopic.php?f=7&t=2554。
利用 subtitles?filter 為視頻添加字幕(將字幕合成到視頻流中,輸出文件中不含字幕流):
ffmpeg -i input.mkv -vf subtitles=subtitles.srt output.mkv將輸入文件的第一個字幕流合成到視頻流中:
ffmpeg -i input.mkv -vf subtitles=input.mkv output.mkv 將某容器第二個字幕流合成到另一個容器的視頻流中輸出: ffmpeg -i input.mkv -vf subtitles=video.mkv:si=1 output.mkv 關于 subtitles filter 的詳細用法: http://ffmpeg.org/ffmpeg-all.html#subtitles-1ass filter 的用法和?subtitles filter 幾乎一樣,但它只用于 ASS(Advanced Substation Alpha)字幕文件,可以先進行字幕轉換,再使用它:
關于 ass filter 的說明:http://ffmpeg.org/ffmpeg-all.html#ass
FFmpeg 官方 wiki:HowToBurnSubtitlesIntoVideo
還可以用 overlay filter 來把字幕燒錄進視頻,比如把MKV格式轉為MP4格式(mp4 也支持字幕流封裝,但目前我僅知道支持蘋果的 MOV text,所以一般都要把字幕燒到視頻流中):
ffmpeg -i input.mkv -filter_complex [0:v][0:s]overlay[v] -map [v] -map 0:a output.mp4總結
以上是生活随笔為你收集整理的Windows下使用ffmpeg为视频添加字幕的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两年前搭建的网狐系统
- 下一篇: 最简单的基于FFMPEG的视频编码器(Y