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
视频裁剪
ffmpeg -i input.mp4 -vf "scale=w=320:h=240" output.mp4
ffmpeg -i input.mp4 -vf scale=w=-2:h=240 output.mp4