FFMpeg 常用命令的理解与使用
ffprobe
输出封装格式信息
ffprobe -show_format xxx
// 以json格式输出
ffprobe -print_format json xxx
// 输出流信息
ffprobe -show_frames xxx
// 输出包信息
ffprobe -show_packets xxx
ffplay
ffplay xxx -loop n 循环播放
ffplay xxx -ast 1 播放第一路音频流
ffplay xxx -vst 1 播放第一路视频流
音视频的裁剪
第一种方式:将input.mov 从第50秒开始剪切20s 的时间,输出到output.mov 中,其中-ss 制定偏移时间,-t 指定的偏移时长
ffmpeg -ss 00:00:50 -t 00:00:20 -i video.mov -vcodec copy -acodec copy tmp.mp4
调整视频的速度
调整tps为原来的1.11倍, 音频为原来的0.9倍,具体需求具体对待,不然可能会音画不同步
ffmpeg -i tmp.mp4 -filter_complex "[0:v]setpts=1.11*PTS[v];[0:a]atempo=0.9[a]" -map "[v]" -map "[a]" output.mp4
将input.mov 切割多个视频
ffmpeg -i input.mov -ss 00:00:20 -c copy small-1.mov -ss 00:00:10 -codec copy small-2.mov
提取一个视频的音频文件
ffmpeg -I video.mov -vn -acodec copy video_record.m4a
提取一个视频的视频,让其静音
ffmpeg -I video.mov -an -vcodec copy video_noSound.mp4
从MP4文件中抽取视频流导出为H264裸数据
ffmpeg -I video.mov -an -vcodec copy -bsf:v h264_mp4toannexb output2.h264
将音频和H264裸数据整合到一起
ffmpeg -i video_audio.m4a -i output2.h264 -acodec copy -bsf:a aac_adtstoasc -vcodec copy -f mp4 outputVideo.mp4
重点: 将音频文件的编码格式做转换
ffmpeg -i audio.wav -acodec libfdk_aac output.aac
从WAV音频文件导出PCM裸数据
ffmpeg -I input.wav -acodec pcm_s16le -f s16le output.pcm
重新编码视频文件,复制音频流,同时封装到MP4格式的文件
ffmpeg -I input.flv -vcodec libx264 -acodec copy output.mp4
将一个mp4 文件转换为gif格式的图
按照分辨率不动宽度改为100,帧率改为10(-r) 只处理前5秒钟(-t) 的视频,生成gif
ffmpeg -I input.mpv -vf scale=100:-1 -t 5 -r 10 image.gif
将视频的画面部分生成图片,比如要分析视频的每一帧展示什么内容的时候
每4秒生成一张
ffmpeg -I output.mp4 -r 0.25 frames_%04.png
使用一组图片可以组成一个gif
Ffmpeg -I frames_%04d.png -r 5 output.gif
改变音量效果,将音量缩小一半
ffmpeg -I input.mav -af ‘volume=0.5’ output.wav
将两路声音合并,时间按照较短的时间合并
ffmpeg -I vocal.wav -I vocal2.wav -filter_compex amix=inputs=2:duration=shortest output.wav
将声音进行变速但不变调效果器的使用
速度变为原来的0.5倍,时间就是2倍
ffmpeg -I vocal.wav -filter_compex atempo=0.5 output.wav
为视频增加水印
ffmpeg -I input.mp4 -I xxx.png -filter_compex ‘[0:v][1:v]overlay=main_w-overlay_w-10:10:1[out]’ -map ‘[out]’ output.mp4
将一张RGBA格式的数据转换为JPEG
ffmpeg -f rawvideo -pix_fmt rgba -s 480*480 -I texture.rgb -f image2 -vcodec mjpeg output.jpg
将YUV格式的数据转换为JPEG
ffmpeg -f rawvideo -pix_fmt yuv420p -s 480*480 -I texture.yuv -f image2 -vcodec mjepg output.jpg
将一段视频推送到流媒体服务器上
ffmpeg -re -I input.mp4 -acodec copy -vcodec copy -f flv rtmp://xxxxxx
将流媒体服务器上的流dump到本地
ffmpeg -I http://xssssssss.flv -acodec copy -vcodec copy -f flv xxx.flv
// 视频的合并
//截取从头开始的30s
ffmpeg -ss 00:00:00 -t 00:00:30 -i keyoutput.mp4 -vcodec copy -acodec copy split.mp4
//截取从30s开始的30s
ffmpeg -ss 00:00:30 -t 00:00:30 -i keyoutput.mp4 -vcodec copy -acodec copy split1.mp4
//进行视频的合并
ffmpeg -f concat -i list.txt -c copy concat.mp4
list.txt 内容如下
file ./split.mp4
file ./split1.mp4
文章摘自: