ffmpeg这个软件有多厉害想必不用过多介绍了吧,它几乎就是所有视频播放器和音频播放器的源头。什么暴风影音、快播等等,都是用它套了个外壳。
剪视频示例,这里我们要把一个名为video.mp4的视频剪辑出来,并重命名为cut.mp4
开始时间 01:55
结束时间 06:22
ffmpeg -ss 00:01:55 -i video.mp4 -to 00:06:22 -copyts cut.mp4
给视频添加字幕
ffmpeg -i 原视频.mkv -i 字幕文件.srt -c copy 输出的视频.mkv
将嵌入字幕转为硬编码字幕
有时候我们在播放器能看到有字幕,但放到网页中却看不到字幕了,这时候可能需要把内嵌字幕转为硬编码字幕
ffmpeg -i input.mp4 -vf "subtitles=input.mp4" -c:v libx264 -c:a aac output.mp4
替换掉已经有的字幕
ffmpeg -i 原视频文件.mp4 -i 字幕文件.srt -c copy -map 0 -map -0:s -map 1 输出的视频.mp4
参数说明:
- -map 0:选择第一个输入文件的所有流
- -map -0:s:删除第一个输入文件中的subtitles流(即删除字幕)
- -map 1:选择第二个输入文件中的流
乱码问题
下载的字幕在Mac打开发现是乱码,解决方法是用命令行转码
iconv -c -f GB2312 -t UTF-8 乱码的字幕.srt >> 输出的字幕.srt
视频转码很简单,用-i参数即可。提取音频也是一样,改一下输出的后缀即可
ffmpeg -i video.flv video.mp4
提取流(音频、字幕)
有时需要指定流来完成格式转换,比如将一个 MP4 视频文件转为 AAC 音频文件(此处实质上是直接提取):
ffmpeg -i video.mp4 -c:a copy audio.aac
此处的 -c:a 表示音频流;视频流 -c:v 与字幕流 -c:s 自然也类似。 注意:如果音频流与容器冲突时,你需要将 copy 改为正确的编解码器(或者删去 -c:a copy 来让 FFmpeg 自动选择),以执行重编码。
对于内挂了字幕的视频文件,也可以将其字幕单独提取出来,例如:
ffmpeg -i video.mkv -c:s copy subtitle.srt
压缩图片
还在满世界找好用的图片压缩工具?ffmpeg强大到你无法想象,实际测试,一个简单的命令就把一张14.4MB的图片压缩到了950KB。丝毫看不出画质有什么损失。令我大为震惊。我没有加任何的参数,只是用了一句 ffmpeg -i 的命令而已。
ffmpeg -i 2.jpg 3.jpg
也可以加-q参数比如 -q 5 范围一到一百。数字越大,压缩得越小。示例:
ffmpeg -i 2.jpg -q 5 out.jpg
经实际测试发现 使用-q 99 或100 参数可以压缩到极限。其实用默认不加参数的已经足够了。以下是实际测试一张14M 的图片用-p参数 从1到30 测试得到的结果:
合并视频和音频
条件是视频中没有声音
ffmpeg -i 视频文件名称.mp4 -i 音频文件名称.wav -c:v copy -c:a aac -strict experimental 合并后输出的名称.mp4
评论 (0)