简介

FFmpeg 是一个开放源代码的自由软件,可以执行音频和视频多种格式的录影、转换、串流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。

说白了就是可以通过命令行方便地对视频文件和音频文件转码,这个软件功能强大,支持大量的格式互转。本文主要用于记录常用的ffmpeg,方便查阅使用。

视频格式处理常用命令

横向合并视频

ffmpeg -i input1.mp4 -i input2.mp4 -lavfi hstack output.mp4

上面的命令虽然可以合并视频,两个视频可以正常播放,但是只保留了前面一个的音频。
下面会介绍怎么避开这个坑。

注意这时候input1和input2必须同样的高度,如果不一样的高度可以使用-shortest参数来保证同样的高度。

如果希望合并多个视频,可以使用下面命令行。
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3 output.mp4
其中input=3表示希望合并的视频的个数

纵向合并视频

ffmpeg -i input1.mp4 -i input2.mp4 -lavfi vstack output.mp4

网格合并视频

当多个视频时,还可以合并成网格状,比如2x2,3x3这种。但是视频个数不一定需要是偶数,如果是奇数,可以用黑色图片来占位。

ffmpeg -f lavfi -i color=c=black:s=1280x720 -vframes 1 black.png
该命令将创建一张1280*720的图片

然后就可以使用下面这个命令来合并成网格视频了,如果只有三个视频,可以选择上面创建的黑色图片替代。
**ffmpeg -i top_left.mp4 -i top_right.mp4 -i bottom_left.mp4 -i bottom_right.mp4
****-lavfi “[0:v][1:v]hstack[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack”
**-shortest 2by2grid.mp4

上面创建的是正规的2x2网格视频。想象一下,现在只有三个视频,我想把第一个视频摆放在第一行的中间,然后把第二、三个视频摆放在第二行。那么就可以使用下面两个命令了。

ffmpeg -f lavfi -i color=c=black:s=640x720 -vframes 1 black.png

**ffmpeg -i black.png -i top_center.mp4 -i bottom_left.mp4 -i bottom_right.mp4
****-lavfi “[0:v][1:v][0:v]hstack=inputs=3[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack”
**-shortest 3_videos_2x2_grid.mp4

合并音频和视频(复制视频流和音频流到out.mp4)

ffmpeg -i video.m4s -i audio.m4s -c:v copy -c:a copy -strict experimental output.flv

如果视频中已经包含了音频,这个时候还可以替换视频中的音频,使用下面命令行。
**ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental
**-map 0✌️0 -map 1🅰️0 output.mp4

合并两个音频

ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 output.mp3

获取视频中的音频

ffmpeg -i input.mp4 -vn -y -acodec copy output.m4a

去掉视频中的音频

ffmpeg -i input.mp4 -an output.mp4

音频格式处理常用命令

ffmpeg -i audio.m4s output.mp3

//to flac

ffmpeg -i audio.m4s -acodec flac output.flac

//to ogg & 设置采样率 320k

ffmpeg -i audio.m4s -ab 320k output.ogg

注意 Safari不支持ogg

ffmpeg -i audio.m4s -ab 320k output.mp3

//flv转flac

ffmpeg -i input.flv -vn -y -acodec flac output.flac

//flv转mp3

ffmpeg -i input.flv -ab 320k output.mp3

//flac转mp3

ffmpeg -i input.flac -ab 320k output.mp3

//H.265 TO H.264

ffmpeg -i input.mp4 -map 0 -c:a copy -c:s copy -c:v libx264 output.mp4

Q.E.D.