ffmpeg下载地址
http://ffmpeg.org/download.html#build-windowshttp://ffmpeg.org/download.html#build-windows
下载完成后直接解压,解压后设置bin目录到环境变量的Path中
命令行使用ffmpeg -version查看是否生效
使用ffmpeg提取视频中的画面
ffmpeg -i 测试视频.mp4 -ss 00:10:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
ffmpeg -i changshan.mp4 -r 30 -q:v 2 -f image2 pic-%03d.jpeg
-ss 指定开始时间
-t 指定从开始时间需要提取画面的时间段,即20秒开始设置为10则提取到30s
-r 表示每一秒提取多少帧
-q:v 表示存储jpeg的图像质量,一般2是高质量
image2 表示图片文件?
截取视频片段
ffmpeg -ss 00:00:35 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
-ss 指定截取视频起始时间点
-t 指定截取视频从截取起始时间点截取的时间段
-i 指定截取输入目标视频
提取视频中的音频数据,音频数据格式可使用命令 ffmpeg -i input.mp4查看
ffmpeg -i input.mp4 -acodec copy -vn output2.aac
提取视频中的纯视频文件,不包含音频
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
-an 不处理音频
使用ffmpeg直接下载视频
ffmpeg -i 视频url output.mp4(保存的视频文件名称) 当前测试可下载m3u8文件
合成视频文件与音频文件
ffmpeg -i outputzixuan.mp4 -i 01.mp3 -vcodec copy -acodec copy -shortest hecheng.mp4
-shortest 使用音频或视频中最小长度作为总长度
fmpeg -i video.mp4 -ss 00:04:00 -i audio.mp3 -c:v copy -af apad -shortest output.mkv
-ss 指定音频起始时间为00:04:00
-c:v copy -af apad 超长无声填充???
压缩视频文件,压缩码率
ffmpeg -i hecheng.mp4 -b:v 5000k yasuo1.mp4
-b:v 指视频码率
-b:a 指音频码率
合成两个视频
ffmpeg -i 001.mp4 -i 002.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4
-
-i input1.mp4 -i input2.mp4
: 输入的两个视频文件。 -
-filter_complex
: 指定复杂的视频和音频过滤器。 -
[0:v:0]
: 第一个文件的视频流。 -
[0:a:0]
: 第一个文件的音频流。 -
[1:v:0]
: 第二个文件的视频流。 -
[1:a:0]
: 第二个文件的音频流。 -
concat=n=2:v=1:a=1
: 将视频和音频流按顺序连接。 -
[v]
: 输出的视频流别名。 -
[a]
: 输出的音频流别名。 -
-map "[v]"
: 指定输出文件的视频流。 -
-map "[a]"
: 指定输出文件的音频流。 -
output.mp4
: 输出文件的名称。
确保输入的视频格式和编码是兼容的,否则可能需要进行转码操作。如果视频的分辨率或帧率不同,可能还需要添加-s
(设置分辨率)和-r
(设置帧率)等选项。
合并多个不同格式的视频,首先转码为ts文件,然后合成
MP4文件不支持concat命令
ffmpeg -i yasuo.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb tsyasuo.ts
ffmpeg -i output1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb tsoutput1.ts
ffmpeg -i yasuo2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb tsyasuo.ts
ffmpeg -i "concat:tsyasuo.ts|tsoutput1.ts|tsyasuo2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output36.mp4
将图片合并为视频
ffmpeg -r 30 -f image2 -i pic-%4d.jpeg video.mp4
-r 帧率,注意改参数必须在ffmpeg后面,否则不生效
旋转视频
ffmpeg -i 需要旋转的视频.mp4 -metadata:s:v rotate="360"(旋转角度) -codec copy 输出视频.mp4
音频MP3文件转pcm文件
大段数据格式
ffmpeg -i test.mp3 -f s16be -ar 16000 -ac 1 -acodec pcm_s16be pcm16k.pcm
小端数据格式
ffmpeg -i test.mp3 -f s16le -ar 16000 -ac 1 -acodec pcm_s16le pcm16k.pcm
说明:
-acodec pcm_s16be:输出pcm格式,采用signed 16编码,字节序为大尾端(小尾端为le);
-ar 16000: 采样率为16000
-ac 1: 声道数为1
上面的命令不好使,需要知道采样率与声道数
ffmpeg -y -i test.mp3 -acodec pcm_s16le -f s16le -ac 2 -ar 16000 16k.pcm
pcm转mp3
ffmpeg -y -f s16be -ac 2 -ar 16000 -acodec pcm_s16le -i 16k.pcm new_mp3.mp3
//该命令验证正常
ffmpeg -y -ac 2 -ar 48000 -f s16le -i 02.pcm -c:a libmp3lame -q:a 2 result2.mp3
参数 | 说明 |
---|---|
-y | 允许覆盖 |
-f s16le | 强制文件格式 |
-ac 2 | 双声道 |
-ar 16000 | 采样率 |
-acodec pcm_s16le | 编码器 |
-i test.mp3 | 源文件 |
将大视频切割为多个视频片段脚本,可以在保存成为文件后再git bash中执行
#!/bin/bash
#脚本中注意换行符问题\r\n与\n
#开始时间单位秒
startTime=0
#结束时间单位秒
endTime=0
#视频长度单位秒
length=5190
i=0
while [ $endTime -le $length ]; do
#statements
i=\[i+1]
#分段间隔时间单位秒,480替换为对应要切割的时间段
endTime=\[startTime+480]
#注意修改文件名名称及输出文件名称
ffmpeg -i ./autotestvideo.mp4 -ss $startTime -to $endTime -acodec copy -vcodec copy $i.mp4
startTime=$[endTime]
done