上一篇博客讲的是ffmpeg的命令行语法,这篇将通过更多示例继续讲解命令行的语法,算是进阶篇了。主要讲解ffmpeg对音频和视频的常用操作,比如音频切割、合并、转码,视频的切割、合并、加水印等。在讲解之前,我们需要先了解下几个名词
1、名词解释
1.1、采样率
采样率指音频每秒钟采样的次数,用赫兹(Hz)表示。采样率越高,音频的还原度越高,音质也越好,但同时文件大小也会增加。常见的采样率有44.1kHz、48kHz、96kHz等。
1.2、采样位深度
采样位深度指音频采样时每个样本的位数,通常是8位、16位、24位、32位等。采样位深度越高,音频的动态范围越大,能表现更细腻的音频信息,但同时文件大小也会增加。
1.3、声道数
声道数指音频的通道数量,常见的有单声道(mono)和立体声(stereo)两种。立体声一般包括左右两个声道,而单声道只有一个声道。通常来说,立体声能够更好地还原音频的空间感,但同时文件大小也会增加。
2、音频处理常用命令
音频处理是 FFmpeg 的主要功能之一。以下是一些常用的音频处理命令:
2.1、转换音频
即将一个音频文件转换成另一个格式。下面的命令将 input.mp3 文件转换成 output.wav 文件。
ffmpeg -i input.mp3 output.wav
2.2、剪切音频
下面的命令将 input.mp3 文件从第 10 秒开始剪切,长度为 10 秒,并将结果保存到 output.mp3 文件。
ffmpeg -ss 00:00:10 -i input.mp3 -t 10 output.mp3
2.3、合并音频
下面的命令将 input1.mp3 和 input2.mp3 文件合并成一个 output.mp3 文件。
ffmpeg -i "concat:input1.mp3|input2.mp3" -acodec copy output.mp3
2.4、调整音量
下面的命令将 input.mp3 文件的音量调整为原来的两倍,并将结果保存到 output.mp3 文件。
ffmpeg -i input.mp3 -filter:a "volume=2.0" output.mp3
2.5、提取音频
下面的命令从 input.mp4 文件中提取音频,忽略视频,直接将音频保存到 output.mp3 文件。
ffmpeg -i input.mp4 -vn -acodec copy output.mp3
3、视频处理的常用命令
视频处理是 FFmpeg 最常用的功能之一,以下是一些常用的视频处理命令:
3.1、视频转码命令
该命令将 input.mp4 转换为 output.avi,同时保留原有的视频和音频编码格式。
ffmpeg -i input.mp4 -vcodec copy -acodec copy output.avi
3.2、裁剪视频命令
该命令将 input.mp4 的第 5 秒开始裁剪,裁剪 10 秒钟,视频编码为 H.264,音频保持原格式,输出为 output.mp4。
ffmpeg -i input.mp4 -ss 00:00:05 -t 00:00:10 -c:v libx264 -c:a copy output.mp4
3.3、视频合并命令
该命令将 input1.mp4、input2.mp4 和 input3.mp4 三个视频文件合并为一个文件 output.mp4,视频和音频编码格式保持不变。
ffmpeg -i "concat:input1.mp4|input2.mp4|input3.mp4" -c copy output.mp4
3.4、添加水印命令
该命令将输入视频 input.mp4 和水印文件 watermark.png 进行叠加,叠加位置为视频左上角偏移 10 像素的位置,输出为 output.mp4。
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
3.5、提取视频帧命令
该命令将输入视频 input.mp4 的第一帧提取出来,输出为 output.jpg,图像质量为 3。
ffmpeg -i input.mp4 -vf "select=eq(n\,0)" -q:v 3 -f image2 output.jpg
4、音视频混合
4.1、合并视频文件
将多个视频文件合并成一个视频文件,可以使用 FFmpeg 中的 concat 协议。下面是一个例子,将三个视频文件 test1.mp4、test2.mp4 和 test3.mp4 合并成一个文件 output.mp4:
ffmpeg -i "concat:test1.mp4|test2.mp4|test3.mp4" -c copy output.mp4
其中,-i 参数指定输入文件,使用 concat 协议,参数为需要合并的文件列表,多个文件之间使用 | 分隔;-c copy 参数指定复制视频和音频流,不进行转码。
4.2、合并音频文件
将多个音频文件合并成一个音频文件,可以使用 FFmpeg 中的 concat 协议。下面是一个例子,将三个音频文件 test1.mp3、test2.mp3 和 test3.mp3 合并成一个文件 output.mp3:
ffmpeg -f concat -i <(for f in test1.mp3 test2.mp3 test3.mp3; do echo "file '$PWD/$f'"; done) -c copy output.mp3
其中,-f concat 指定使用 concat 协议,-i 参数指定输入文件,使用子进程的方式生成文件列表,-c copy 参数指定复制音频流,不进行转码。
4.3、合并音视频文件
将音频和视频文件合并成一个视频文件,可以使用 FFmpeg 中的 -map 选项。下面是一个例子,将 test.mp4 视频和 test.mp3 音频合并成一个视频文件 output.mp4:
ffmpeg -i test.mp4 -i test.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a copy output.mp4
其中,-i 参数指定输入文件,-map 选项指定需要使用的视频流和音频流,-c:v copy 和 -c:a copy 参数分别指定复制视频流和音频流,不进行转码。
5、音视频分离
5.1、分离视频文件
将视频文件分离成视频流和音频流,可以使用 FFmpeg 中的 -map 选项。下面是一个例子,将 test.mp4 分离成视频文件 test_video.mp4 和音频文件 test_audio.mp3:
ffmpeg -i test.mp4 -map 0:v:0 -c copy test_video.mp4 -map 0:a:0 -c copy test_audio.mp3
其中,-i 参数指定输入文件,-map 选项指定需要使用的视频流和音频流,-c copy 参数指定复制流,不进行转码。
5.2、分离音频文件
分离音频文件是指将音频流从视频文件中分离出来,生成一个单独的音频文件,可以方便地对音频进行编辑和处理。
ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 4 output.mp3
其中,-i input.mp4:指定输入文件名,这里是一个视频文件;-vn:表示不处理视频流,只处理音频流;-acodec copy:表示复制音频流,不进行重新编码;-acodec libmp3lame:表示将音频流重新编码为MP3格式;-q:a 4:表示指定输出音频的质量,值为0-9,数值越小,质量越好,文件大小越大;output.aac:指定输出文件名,这里是一个AAC格式的音频文件。
6、音视频同步处理
6.1、调整音频速率
有时候,在进行音视频处理时,可能需要改变音频的播放速率。可以使用FFmpeg的"atempo"过滤器来实现调整音频速率。该过滤器接受一个浮点数参数,表示音频的播放速率。例如:
ffmpeg -i input.mp3 -filter:a "atempo=1.5" output.mp3
上述命令将音频播放速率提高到1.5倍。
6.2、调整音频音量
在进行音视频处理时,有时候需要调整音频的音量大小。可以使用FFmpeg的"volume"过滤器来实现调整音量大小。该过滤器接受一个浮点数参数,表示音频的音量大小。例如:
ffmpeg -i input.mp3 -filter:a "volume=2.0" output.mp3
上述命令将音频的音量调整为原来的2倍。
6.3、调整视频速率
类似于调整音频速率,有时候在进行音视频处理时,需要调整视频的播放速率。可以使用FFmpeg的"setpts"过滤器来实现调整视频速率。该过滤器接受一个时间参数,表示视频播放的速率。例如:
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4
上述命令将视频的播放速率降低到原来的一半。
6.4、调整视频画面大小
在进行音视频处理时,有时候需要调整视频的画面大小。可以使用FFmpeg的"scale"过滤器来实现调整视频画面大小。该过滤器接受一个字符串参数,表示视频的宽度和高度。例如:
ffmpeg -i input.mp4 -vf scale=640:360 output.mp4
上述命令将视频的画面大小调整为640x360。
相关阅读
文章评论