首先,并非专业视频处理人员;以下命令都是我从网上搜索后修改以为己所用。

图片转视频

# gif 转视频(DURATION:时长,gif会循环播放)
ffmpeg -ignore_loop 0 -t DURATION -f gif -i "INPUT.gif" -vcodec libx264 -crf 5 "OUTPUT.mp4"

# png、jpg 转视频
ffmpeg -loop 1 -framerate 30 -f image2 -t DURATION -i "INPUT.jpg" -vcodec libx264 -crf 5 "OUTPUT.mp4"

给视频添加音轨

ffmpeg -y -i "INPUT.mp4" -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -shortest -c copy -c:a aac -bsf:v h264_mp4toannexb "OUTPUT.mp4"

修改视频分辨率

使用以下命令可以将视频分辨率修改为1280x768,不同比例的视频会填充黑边

ffmpeg -i "INPUT.mp4" -vf "scale=1280:768:force_original_aspect_ratio=decrease,pad=1280:768:(ow-iw)/2:(oh-ih)/2" OUTPUT.mp4

合并视频

如果视频都是相同格式,可以将视频用一下格式列举在一个文件中(也可以用来合并 mp3 文件):

# concat.txt
file input1.mp4
file input2.mp4
file input3.mp4

然后使用以下命令拼接:

ffmpeg -safe 0 -f concat -i "concat.txt" -c copy "OUTPUT.mp4"

如果是不同格式的视频合并:

ffmpeg -i INPUT1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i INPUT2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i INPUT3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts
ffmpeg -y -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart OUTPUT.mp4

截取视频段

以下命令将从视频 1 分钟的位置开始,截取 15 秒。不要用-c copy,不然视频会缺少关键帧。

ffmpeg -ss 00:01:00 -accurate_seek -i INPUT.mp4 -t 15 OUTPUT.mp4

加速视频和音频

以下命令将 mp3 加速为1.1

ffmpeg -i INPUT.mp3 -filter_complex "[0:a]atempo=1.1[a]" -map "[a]" "OUTPUT.mp3"

以下命令将视频和音频同时加速为1.3倍(1/1.3 = 0.769230769231

ffmpeg -i INPUT.mp4 -filter_complex "[0:v]setpts=0.769230769231*PTS[v];[0:a]atempo=1.300000[a]" -map "[v]" -map "[a]" OUTPUT.mp4

添加srt字幕

ffmpeg -i INPUT.mp4 -i INPUT.srt -c:s mov_text -c:v copy -c:a copy OUTPUT.mp4