合并音视频

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 以本机帧速率读取输入。