FFmpeg
合并音视频
ffmpeg -i input.mp4 -i inputvoice.mp4 -c:v copy -c:a copy output.mp4
ffmpeg -i input.mp4 -i input.webm -c:v copy -c:a aac output.mp4
提取音频
ffmpeg -i input.mp4 output.wav
删除视频中的片段
ffmpeg -i input.mp4 -vf "select='not(between(t,36,43))',setpts=N/(FRAME_RATE*TB)" -af "aselect='not(between(t,36,43))',asetpts=N/(SR*TB)" output.mp4
ffmpeg -i input.mp4 -vf "select='not(between(t,17*60+41,18*60+59))',setpts=N/(FRAME_RATE*TB)" -af "aselect='not(between(t,17*60+41,18*60+59))',asetpts=N/(SR*TB)" -c:v libx264 -c:a aac output.mp4
- -vf “select=’not(between(t,1760+41,1860+59))’,setpts=N/(FRAME_RATETB)”:视频过滤器选项,其中 select 表示选择满足条件的帧,not(between(t,1760+41,1860+59)) 表示不选取时间在 17 分 41 秒至 18 分 59 秒之间的帧,setpts 表示修改视频帧的时间戳,N/(FRAME_RATETB) 表示将每个帧的时间戳除以帧率乘以时间基准得到新的时间戳。
- -af “aselect=’not(between(t,1760+41,1860+59))’,asetpts=N/(SRTB)”:音频过滤器选项,其中 aselect 表示选择满足条件的音频样本,not(between(t,1760+41,1860+59)) 表示不选取时间在 17 分 41 秒至 18 分 59 秒之间的音频样本,asetpts 表示修改音频样本的时间戳,N/(SRTB) 表示将每个样本的时间戳除以采样率乘以时间基准得到新的时间戳。
- -c:v libx264:视频编码器选项,使用 libx264 编码器将视频编码为 H.264 格式。
- -c:a aac:音频编码器选项,使用 aac 编码器将音频编码为 AAC 格式。。
截取视频
ffmpeg -i input.mp4 -ss 0:00:00 -t 5 output.mp4
crop 裁剪视频
ffmpeg -i input.mp4 -ss 0:00:00 -t 5 -vf crop=1080:1080:0:100 -c:a copy output.mp4
ffmpeg -i input.mp4 -vf crop=1080:1080:0:100 -c:a copy output.mp4
- crop=w=100:h=100:x=12:y=34
- w:指定宽度
- h:指定高度
- x:指定左侧的pos
- y:指定顶部的pos
Useful FFmpeg Commands for Working with Audio and Video Files
rotating
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
-
transpose=1 顺时针旋转 90°
-
transpose=2 逆时针旋转 90°
https://creatomate.com/blog/how-to-rotate-videos-using-ffmpeg
转换分辨率
ffmpeg -i input.mp4 -vf scale=1920:1080 output.mp4
将图片合并成视频
ffmpeg -r 25 -i input_imgs/%d.jpg -i input.mp3 output.mp4
rtmp 推流
ffmpeg -re -i input.mp4 -c:v copy -c:a aac -ar 44100 -f flv rtmp://127.0.0.1/live/livestream
-re 以本机帧速率读取输入。