ffmpeg常用命令总结

806 阅读2分钟

ffmpeg架构

  • libavformat,format,格式封装
  • libavcodec,codec,编码、解码
  • libavutil,util,通用音视频工具,像素、IO、时间等工具
  • libavfilter,filter,过滤器,可以用作音视频特效处理
  • libavdevice,device,设备(摄像头、拾音器)
  • libswscale,scale,视频图像缩放,像素格式互换
  • libavresample,resample,重采样
  • libswresample,也是重采样,类似图像缩放
  • libpostproc,后期处理

视频剪切

ffmpeg -ss 00:01:00 -to 00:03:00 -i input.mp4 -vcodec copy -acodec copy shortvideos/clip.mp4 

视频拼接转码合成

ffmpeg -f concat -i input.txt -qscale 1 -vcodec libx264 -acodec aac -vf scale=1280:720 ouput.mp4 

直播流转mp4

ffmpeg -i https://cctvtxyh5ca.liveplay.myqcloud.com/live/cctv1_2_hd.m3u8 -vcodec copy -acodec copy cctv1.mp4 

直播流转HLS (m3u8)

通过segment -f segment

ffmpeg -i https://cctvtxyh5ca.liveplay.myqcloud.com/live/cctv1_2_hd.m3u8 -f segment -codec copy -map 0 -vbsf h264_mp4toannexb -flags -global_header -segment_format mpegts -segment_list playlist.m3u8 -segment_time 10 %03d.ts 

通过hls -f hls

ffmpeg -v quiet -i https://cctvtxyh5ca.liveplay.myqcloud.com/live/cctv1_2_hd.m3u8 -f image2 -vf fps=1/1 thumb_%d.jpg -map 0:a -acodec pcm_s16le -ar 16000 -ac 1 -segment_time 60 -f segment -segment_format s16le pcm_%d.pcm 

直播流转HLS,并抽取截帧和音频

ffmpeg -i https://cctvtxyh5ca.liveplay.myqcloud.com/live/cctv1_2_hd.m3u8 -vcodec copy -acodec copy -vbsf h264_mp4toannexb -f hls -hls_segment_filename '%03d.ts' -hls_time 10 -hls_list_size 5000 -hls_flags discont_start playlist.m3u8 -f image2 -vf fps=1/1 %03d.jpg -map 0:a -acodec pcm_s16le -ar 16000 -ac 1 -segment_time 30 -f segment -segment_format s16le %03d.pcm 

推流

ffmpeg -re -i input.mp4 -vcodec copy -acodec copy -f flv -y {推流服务器地址} 

获取视频metadata json格式

ffprobe -v quiet -print_format json -show_format -show_streams "input.mp4" 

获取第一帧图片

ffmpeg -i input.mp4 -ss 00:00:00 -t 1 -r 1 -q:v 2 -f mjpeg -y cover.jpg 

生成视频雪碧图

ffmpeg -probesize 30M -analyzeduration 30M -i input.mp4 -vf fps=1,scale={}:{},tile=1x100 -q:v 31 sprite%05d.jpg 

每秒抽帧

-fps

ffmpeg -i input.flv -vf fps=1 out%d.png 

-frames

ffmpeg -i input.flv -ss 00:00:14.435 -frames:v 1 out.png 

抽取音频

ffmpeg -i input.mp4 -vn -acodec copy output-audio.aac 

转码transcode

ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv 
  • -c sets the encoder (see ffmpeg -encoders)
  • -c copy only copies bitstream
  • -c:v sets only video encoders
  • -c:a sets only audio encoders
  • -an and -vn would disable audio or video streams
  • -b:v or -b:a to set bitrate e.g., -b:v 1000K = 1000 kbit/s, -b:v 8M = 8 Mbit/s
  • -q:v or -q:a to set fixed-quality parameter e.g., -q:a 2 for native AAC encoder

转封装remuxing

ffmpeg -i input.mp4 -vcodec copy -acodec copy 1.mp4 

视频裁剪

# Scale to 320×240: 
ffmpeg -i input.mp4 -vf "scale=w=320:h=240" output.mp4 
# Scale to a height of 240 and keep aspect ratio divisible by 2: 
ffmpeg -i input.mp4 -vf scale=w=-2:h=240 output.mp4