ffmpeg
一些ffmpeg的常用指令。ffmpeg document and ffmpeg filters Document。
目录
格式转换
ffmpeg -i input.avi output.mp4 # 把avi格式视频转换为mp4,-i 指定输入
ffmpeg -i input.ava output.mp3 # 音频格式转换
视频裁剪
注意这里的意思是画面大小的剪裁,不是时间轴,时间轴的剪裁在后文。
ffmpeg -i inputFile -filter:v "crop=w=1920:h=1080:x=0:y=0" outputFile
- -filter:v 表示在视频通道使用过滤器,v即video channel
- crop 即剪裁,该过滤器最多指定4个参数,其中w和h分别表示输出的宽和长;x和y指定裁剪的位置,x=0:y=0即表示从视频左上角开始裁剪,不指定xy时默认以原视频中心点为中心进行裁剪。
按比例剪裁
ffmpeg -i inputFile -filter:v "crop=w=1/2*in_w:h=1/2*in_h" outputFile
- 实现的功能是长宽剪裁为原来的一半。
- in_w 即 input width,in_h同理。
视频缩放
用法与剪裁类似,不同的是这次使用scale过滤器。
ffmpeg -i inputFile -filter:v "scale=w=1920:h=1080" outputFile
按比例缩放:
ffmpeg -i inputFile -filter:v "scale=w=1/2*in_w:h=1/2*in_h" outputFile
定比缩放:
ffmpeg -i inputFile -filter:v "scale=w=1920:h=-1" outputFile
- 把w和h其中一个置为-1,如上h=-1,则h的值随w按原视频长宽比例变化。
视频旋转
使用过滤器rotate。
ffmpeg -i inputFile -filter:v "rotate=90\*PI/180" outputFile
- rotate的值为旋转度数,需要弧度值,我们可以通过乘PI/180的方式来赋值,如上表示顺时针旋转90度。
让视频随时间轴进行旋转
ffmpeg -i inputFile -filter:v "rotate=2*PI*t/10" outputFile
- 旋转周期为10s。也可以为其指定初相角,rotate=PI/2+2*PI*t/10
音量调整
ffmpeg -i inputFile -filter:a "volume=2" outputFile
- -filter:a 表示在音频通道上使用过滤器,参数值 a 即 audio channel
- volume=2 表示调用音量过滤器并设置输出音量为原音量的2倍
示例:
ffmpeg -i input.wav -filter:a "volume=3" output.mp3 # 音量放大三倍,并转化格式为MP3
ffmpeg -i input.wav -filter:a "volume=0.5" output.mp3 # 音量减小为原来的1/2
声道调整
ffmpeg -i inputFile -filter:a "channelmap=0-1|1-0" outputFile
- channelmap即声道映射,0表示左声道,1表示右声道。
- channelmap=0-1|1-0 表示把左声道映射到右声道,右声道映射到左声道,即左右声道互换。
以上内容来自一个ffmpeg入门教程,可以看出,其最核心的莫过于各种过滤器的使用,这是ffmpeg的强大之处,也是ffmpeg各种用法的基础思路。以下是杂记。
others
拼接视频
ffmpeg -f concat -i fileList.txt -c copy outputFile
fileList.txt
中写入要拼接的文件,格式如下:file 'video1.wmv' file 'video2.wmv'
时间轴剪裁
ffmpeg -i inputFile -ss start -t duration outputFile
start
是开始时间,格式为00:10:10
或者简单的秒数610
duration
是持续时间,格式同上
加速
提取音频
ffmpeg -i video_name.mp4 -vn -y -acodec copy music_name.aac 从视频中提取音频