FFmpeg命令行音视频处理
命令行工具
FFmpeg 的 bin 目录下有三个工具,可在终端直接输入命令执行
- ffmpeg ( https://ffmpeg.org/ffmpeg.html )是一个通用的媒体转换器。它可以读取各种输入,包括实时抓取/录制设备-过滤,并将它们转码为多种输出格式。
- ffplay ( https://ffmpeg.org/ffplay.html )是一款基于 FFmpeg 库和 SDL 库的简单媒体播放器。它主要用作各种 FFmpeg API 的测试平台。
- ffprobe ( https://ffmpeg.org/ffprobe.html )是一个多媒体分析器,并以人类和机器可读的方式打印出从多媒体中收集的信息。
ffmpeg 命令
终端直接输入 ffmpeg,可以获得用法提示
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
可以看到它有 5 个参数,简化一下就是:ffmpeg {1} {2} -i {3} {4} {5},5 个参数含义分别如下:
- 全局参数
- 输入文件参数
- 输入文件
- 输出文件参数
- 输出文件
详细用法可以查阅官方文档,或者查阅 man page,或者输入下面命令查阅说明:
- ffmpeg -h:简易版说明
- ffmpeg -h long:详细版说明
- ffmpeg -h full:完整版说明
部分参数解释:
- -i input_file:指定输入文件的路径和名称。示例:-i input.mp4
- -ss position:指定从输入文件的哪个时间位置开始处理,格式为 HH:MM:SS.xxx(小时:分钟:秒.毫秒)。示例:-ss 00:01:30.500 表示从 1 分 30.5 秒开始处理。
- -t duration:指定处理的持续时间,格式为 HH:MM:SS.xxx(小时:分钟:秒.毫秒)。示例:-t 00:00:45 表示处理 45 秒的内容。
- -vf filtergraph:指定视频过滤器图形,用于对视频进行各种处理,如调整大小、裁剪、旋转、滤镜等。示例:-vf “scale=640:480” 表示将视频调整为 640x480 的大小。
- -af filtergraph:指定音频过滤器图形,用于对音频进行各种处理,如音频增益、降噪、混音等。示例:-af “volume=2.0” 表示将音频增益调整为原来的 2 倍。
- -c:v codec:指定视频编解码器。示例:-c:v libx264 表示使用 libx264 编码器进行视频编码。
- -c:a codec:指定音频编解码器。示例:-c:a aac 表示使用 AAC 编码器进行音频编码。
- -b:v bitrate:指定视频的比特率,即视频的质量。较高的比特率通常意味着更好的视频质量,但文件大小也会增加。示例:-b:v 1000k 表示视频比特率为 1000kbps。
- -b:a bitrate:指定音频的比特率,即音频的质量。较高的比特率通常意味着更好的音频质量,但文件大小也会增加。示例:-b:a 128k 表示音频比特率为 128kbps。
- -r framerate:指定视频的帧率,即每秒播放的画面数量。较高的帧率可以获得更流畅的视频,但也会增加文件大小。示例:-r 30 表示视频帧率为 30 帧每秒。
查看设备
ffmpeg -devices
当前电脑输出的可用设备如下:
Devices:
D. = Demuxing supported
.E = Muxing supported
--
E audiotoolbox AudioToolbox output device
D avfoundation AVFoundation input device
D lavfi Libavfilter virtual input device
E sdl,sdl2 SDL2 output device
D x11grab X11 screen capture, using XCB
在多媒体处理中,”demuxer”(解封装器)和”muxer”(封装器)是两个常用的概念,用于描述多媒体文件的解封装和封装操作。
1、Demuxer(解封装器) 是一个用于将多媒体文件(如音频或视频文件)解封装为原始音频流、视频流和其他相关数据的组件。它读取多媒体文件的容器格式(如 MP4、AVI、MKV)并解析其中的音频、视频和其他流,将它们提供给后续处理的组件(如解码器)进行解码和处理。Demuxer 将多媒体文件中的不同媒体流分离开来,以便进行独立的处理。
2、Muxer(封装器) 是一个用于将音频流、视频流和其他相关数据封装到容器格式中的组件。它接收来自解码器或其他处理组件的音频流、视频流等数据,并将它们合并到指定的容器格式中(如 MP4、AVI、MKV),生成一个包含音视频数据的完整多媒体文件。Muxer 负责将不同的音频和视频流合并,并添加必要的容器元数据和索引信息。
AVFoundation 对于 iOS 开发者来说再熟悉不过了,输入如下命令可以查看支持 avfoundation 支持的设备:
在多媒体处理中,"demuxer"(解封装器)和"muxer"(封装器)是两个常用的概念,用于描述多媒体文件的解封装和封装操作。
1、Demuxer(解封装器) 是一个用于将多媒体文件(如音频或视频文件)解封装为原始音频流、视频流和其他相关数据的组件。它读取多媒体文件的容器格式(如 MP4、AVI、MKV)并解析其中的音频、视频和其他流,将它们提供给后续处理的组件(如解码器)进行解码和处理。Demuxer 将多媒体文件中的不同媒体流分离开来,以便进行独立的处理。
2、Muxer(封装器) 是一个用于将音频流、视频流和其他相关数据封装到容器格式中的组件。它接收来自解码器或其他处理组件的音频流、视频流等数据,并将它们合并到指定的容器格式中(如 MP4、AVI、MKV),生成一个包含音视频数据的完整多媒体文件。Muxer 负责将不同的音频和视频流合并,并添加必要的容器元数据和索引信息。
AVFoundation 对于 iOS 开发者来说再熟悉不过了,输入如下命令可以查看支持 avfoundation 支持的设备:
```c
ffmpeg -f avfoundation -list_devices true -i ''
输出结果如下:
[AVFoundation indev @ 0x7fd0621043c0] AVFoundation video devices:
[AVFoundation indev @ 0x7fd0621043c0] [0] FaceTime HD Camera (Built-in)
[AVFoundation indev @ 0x7fd0621043c0] [1] Capture screen 0
[AVFoundation indev @ 0x7fd0621043c0] AVFoundation audio devices:
[AVFoundation indev @ 0x7fd0621043c0] [0] Built-in Microphone
对于 Windows 平台则是查看 dshow(DirectShow)输入支持的设备:
ffmpeg -f dshow -list_devices true -i dummy
使用以下命令查看 FFmpeg 是否支持特定设备:
ffmpeg -sources DEVICE
其中,DEVICE 是要查询的设备名称,例如 alsa、pulse、v4l2 等。
音频处理
1、录制音频在 Mac OS 使用 FFmpeg 录制音频,可以使用如下命令:
ffmpeg -f avfoundation -i ":0" output.wav
这个命令使用了 FFmpeg 的 avfoundation 输入设备,从 Mac 的音频输入设备(通常是麦克风)录制音频。”:0”参数表示默认的音频输入设备,output.wav 是要保存音频的文件名和格式。可以将其更改为所需的文件名和扩展名。
执行命令后,FFmpeg 将开始录制音频,并在后台显示进度信息。要停止录制,可以按下 Ctrl+C。
2、查看音频信息
ffmpeg -i output.wav
输出结果如下:
Input #0, wav, from 'output.wav':
Metadata:
encoder : Lavf60.3.100
Duration: 00:00:19.56, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
当然,该命令也可以查看视频文件信息,例如查看前几天在 YouTube 上下载的一个视频信息:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2023-10-13T02:00:12.000000Z
Duration: 00:12:11.92, start: 0.000000, bitrate: 1134 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 1003 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
Metadata:
creation_time : 2023-10-13T02:00:12.000000Z
handler_name : ISO Media file produced by Google Inc. Created on: 10/12/2023.
vendor_id : [0][0][0][0]
Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2023-10-13T02:00:12.000000Z
handler_name : ISO Media file produced by Google Inc. Created on: 10/12/2023.
vendor_id : [0][0][0][0]
3、提取音频
比如,从上面的 test.mp4 视频中提取音频:
ffmpeg -i test.mp4 -vn test.mp3
-vn 表示去除视频流,处理信息如下:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2023-10-13T02:00:12.000000Z
Duration: 00:12:11.92, start: 0.000000, bitrate: 1134 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 1003 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
Metadata:
creation_time : 2023-10-13T02:00:12.000000Z
handler_name : ISO Media file produced by Google Inc. Created on: 10/12/2023.
vendor_id : [0][0][0][0]
Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2023-10-13T02:00:12.000000Z
handler_name : ISO Media file produced by Google Inc. Created on: 10/12/2023.
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:1 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to 'test.mp3':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
TSSE : Lavf60.3.100
Stream #0:0(eng): Audio: mp3, 44100 Hz, stereo, fltp (default)
Metadata:
creation_time : 2023-10-13T02:00:12.000000Z
handler_name : ISO Media file produced by Google Inc. Created on: 10/12/2023.
vendor_id : [0][0][0][0]
encoder : Lavc60.3.100 libmp3lame
size= 11437kB time=00:12:11.89 bitrate= 128.0kbits/s speed=58.3x
video:0kB audio:11437kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.002946%
4、转换音频格式
将上面的 output.wav 转换成 output.mp3:
ffmpeg -i output.wav -c:a libmp3lame output.mp3
5、调整音频音量
将上面的 output.mp3 调成 2 倍音量并保存为 output_dvolume.mp3:
ffmpeg -i output.mp3 -af "volume=2.0" output_dvolume.mp3
6、合并音频
将上面的 output.mp3 与 output_dvolume.mp3 两个音频文件合并成一个新的音频文件并保存 merge_output.mp3:
ffmpeg -i output.mp3 -i output_dvolume.mp3 -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1[out]" -map "[out]" merge_output.mp3
7、剪切音频
从输入文件 test.mp3 中剪切出从 1 分 30 秒到 2 分 30 秒的部分,并保存为 test_cut.mp3:
ffmpeg -i test.mp3 -ss 00:01:30 -to 00:02:30 -c copy test_cut.mp3
-c copy 表示不改变音频和视频的编码格式,直接拷贝,提升效率
8、添加音频效果
将对输入文件 test_cut.mp3 应用音频效果,包括加速 2 倍(atempo)、高通滤波器(highpass)和低通滤波器(lowpass),并保存为 test_cut_ahl.mp3:
ffmpeg -i test_cut.mp3 -af "atempo=2.0, highpass=f=200, lowpass=f=3000" test_cut_ahl.mp3
9、添加封面
ffmpeg -i test.mp3 -i test.jpeg -map 0 -map 1 -c copy -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" test_cover.mp3
从 test.mp3 音频文件中提取音频流,并从 test.jpeg 图像文件中提取封面图像。然后,它将使用-map 选项将音频流和封面图像流映射到输出文件。-c copy 选项用于直接复制音频流和封面图像流,而不进行重新编码。-id3v2_version 3 选项用于设置 ID3 标签版本为 3,以确保兼容性。-metadata:s:v 选项用于指定封面图像的元数据,如标题和注释。
添加封面后,文件变大了,这是意料之中的。下面的打印信息中也可表明标题和注释添加成功了。
Input #0, mp3, from 'test_cover.mp3':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
encoder : Lavf60.3.100
Duration: 00:12:11.95, start: 0.025056, bitrate: 129 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc60.3.
Stream #0:1: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 1024x1024 [SAR 96:96 DAR 1:1], 90k tbr, 90k tbn (attached pic)
Metadata:
title : Album cover
comment : Cover (front)
视频处理
视频有很多跟音频类似的处理操作,这里只简单列举几种用法,更多用法需要时再查阅文档。
1、录制视频
ffmpeg -f avfoundation -i “1:0” out.avi
将视频设备 1 中的视频和音频设备 0 中的音频录制到 out.avi
2、视频转码
ffmpeg -i out.avi out.mp4
将视频 out.avi 转为 out.mp4
3、视频截图
ffmpeg -i out.mp4 -ss 00:00:10 -vframes 1 output.jpg
从上面的 out.mp4 中提取第 10 秒的视频帧,并将其保存为输出文件 output.jpg。参数-vframes 1表示只提取一帧。
ffplay 命令
其实,在上面音视频的处理过程中,经常用到了 ffplay 命令,以测试一部分音视频处理是否成功。相比 ffmpeg 命令,ffplay 就简单多了。
ffplay [options] [input_url]
这个命令会打开一个窗口,并播放指定的输入文件。常用的参数:
- -i input_file:指定输入文件的路径和名称。
- -ss position:指定从输入文件的哪个时间位置开始播放,格式为 HH:MM:SS.xxx(小时:分钟:秒.毫秒)。
- -t duration:指定播放的持续时间,格式为 HH:MM:SS.xxx(小时:分钟:秒.毫秒)。
- -vf filtergraph:指定视频过滤器图形,用于对视频进行各种处理,如调整大小、裁剪、旋转、滤镜等。
- -af filtergraph:指定音频过滤器图形,用于对音频进行各种处理,如音频增益、降噪、混音等。
- -volume volume:指定播放音量的大小,取值范围为 0.0 到 1.0。
- -nodisp:禁用显示窗口,只进行音频的播放。
- -an:禁用音频播放。
- -vn:禁用视频播放。
- -stats:显示播放统计信息,如帧率、比特率等。
- -loop n:循环播放输入文件 n 次。
也可以使用键盘上的一些快捷键进行控制,例如:
- 空格键:暂停/恢复播放。
- 左方向键:后退 10 秒。
- 右方向键:快进 10 秒。
- 上方向键:增加音量。
- 下方向键:减小音量。
- q 键:退出播放。
ffprobe 命令
ffprobe 是 FFmpeg 提供的一个命令行工具,用于分析媒体文件的详细信息。它可以提供音视频流的元数据、编解码器信息、时长、帧率等数据。语法如下:
ffprobe [options] input_url
常用的参数:
-i input_file:指定输入文件的路径和名称。
- -show_format:显示媒体文件的格式信息。
- -show_streams:显示媒体文件中的音视频流信息。
- -show_packets:显示媒体文件中的数据包信息。
- -show_frames:显示媒体文件中的帧信息。
- -show_programs:显示媒体文件中的节目信息。
- -show_chapters:显示媒体文件中的章节信息。
- -show_data:显示媒体文件中的数据信息。
- -show_error:显示错误信息。
- -of format:指定输出格式,默认为 default。可以选择的输出格式有 default、json、xml、csv 等。
- -select_streams stream_specifier:选择特定的音视频流进行分析。stream_specifier 可以是 a(音频流)、v(视频流)、s(字幕流)等。
- -sexagesimal:以时分秒格式显示时间相关信息。
- -count_frames:计算媒体文件中的帧数。
- -count_packets:计算媒体文件中的数据包数。
简单举个例子,ffprobe -show_format out.mp4,输出部分信息如下:
filename=out.mp4
nb_streams=2
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.000000
duration=23.966667
size=18413363
bit_rate=6146324
probe_score=100
TAG:major_brand=isom
TAG:minor_version=512
TAG:compatible_brands=isomiso2avc1mp41
TAG:encoder=Lavf60.3.100
- 分享
- 举报
-
浏览量:925次2024-01-17 11:25:11
-
2024-01-17 10:40:55
-
浏览量:4395次2021-04-25 16:35:51
-
浏览量:4905次2021-04-26 17:29:53
-
浏览量:7420次2021-07-02 15:09:39
-
浏览量:5900次2021-12-10 16:15:34
-
浏览量:1952次2022-11-21 17:11:41
-
浏览量:5448次2021-04-27 16:31:59
-
浏览量:2077次2020-08-14 18:20:33
-
浏览量:3471次2020-08-03 19:28:14
-
浏览量:6278次2020-08-30 12:34:17
-
浏览量:2045次2020-08-04 20:27:13
-
浏览量:1050次2023-12-26 16:33:04
-
浏览量:556次2023-10-24 17:47:15
-
浏览量:6102次2017-12-12 21:37:12
-
浏览量:1338次2024-02-27 17:03:43
-
浏览量:11683次2022-06-10 21:26:04
-
浏览量:1181次2024-02-22 15:52:02
-
浏览量:639次2023-10-30 15:06:52
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
ladoo
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明