../
一些FFMpeg小窍门
================

2022-01-18

## 烧录字幕

如果要给视频加载字幕的话,其实还是单独加载文字格式的字幕轨或者字幕文件最方便。
但是,如果视频要传到一些网站上,或者要用移动设备观看,可能就需要把字幕烧到视频
里面了。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图片。



--------------------------------------------------------------------
Email: i (at) mistivia (dot) com