小Q的博客

  • 首页
  • net编程
    • 产品和框架
    • 开发实例
    • 经验技巧
    • 开源组件
  • wp独立站
  • 自媒体
  • 日记本
  • 工具箱
每个程序员,都应该有一个自己的博客站
  1. 首页
  2. net编程
  3. 经验技巧
  4. 正文

ffmpeg教程 3.音视频处理,常用操作都在这里

2023年3月13日 158点热度 0人点赞 0条评论

上一篇博客讲的是ffmpeg的命令行语法,这篇将通过更多示例继续讲解命令行的语法,算是进阶篇了。主要讲解ffmpeg对音频和视频的常用操作,比如音频切割、合并、转码,视频的切割、合并、加水印等。在讲解之前,我们需要先了解下几个名词

目录

  • 1、名词解释
    • 1.1、采样率
    • 1.2、采样位深度
    • 1.3、声道数
  • 2、音频处理常用命令
    • 2.1、转换音频
    • 2.3、合并音频
    • 2.4、调整音量
    • 2.5、提取音频
  • 3、视频处理的常用命令
    • 3.1、视频转码命令
    • 3.2、裁剪视频命令
    • 3.3、视频合并命令
    • 3.4、添加水印命令
    • 3.5、提取视频帧命令
  • 4、音视频混合
    • 4.1、合并视频文件
    • 4.2、合并音频文件
    • 4.3、合并音视频文件
  • 5、音视频分离
    • 5.1、分离视频文件
    • 5.2、分离音频文件
  • 6、音视频同步处理
    • 6.1、调整音频速率
    • 6.2、调整音频音量
    • 6.3、调整视频速率
    • 6.4、调整视频画面大小

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。

 

相关阅读

ffmpeg教程 2.命令行语法,一句话就能实现

ffmpeg教程 1.基础知识 能处理图片、音频和视频

标签: ffmpeg教程 视频切割 视频加水印 视频合并 音频切割 音频合并
最后更新:2023年3月13日

小Q

80后中年不油腻大叔,喜欢编写代码、打羽毛球、做木制玩具。目前定居浙江杭州

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2022 小Q的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

浙ICP备2022019157号-2