8.0发布!ffmpeg使用场景和指令
1 简介
FFmpeg是一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频,是一个功能强大但不可见的开源媒体引擎,可以处理 Linux 及其他版本上的大多数视频任务——本周末,开发人员推出了一项重大更新。
亮点是 FFmpeg 8.0 添加了基于 Vulkan 计算的编解码器。这些通过利用“适用于 Vulkan 1.3 的任何实现”的计算着色器,为视频解码和编码提供了基于硬件的加速器的替代方案。
Vulkan 计算编解码器提供了硬件解码和编码加速器的替代方案
现代 GPU(分立和集成)具有用于常见格式(“加速器”)的专用硬件媒体解码/编码器。FFmpeg 8.0 的 Vulkan 方法使用通用计算核心(通过着色器)来处理视频处理。
该功能不打算处理主流编解码器(因为这些编解码器可以很好地满足 GPU 上的加速器的需求),但支持专为并行处理而设计的密集型编解码器,并且可以在任何兼容 Vulkan 的 GPU 上运行。
FFmpeg 8.0 使用 Vulkan 提供 FFv1(编码和解码)和 ProRes RAW(仅解码)。下一个小更新将添加 ProRes(编码和解码)和 VC-2(编码和解码)。
本文小结ffmpeg常见的使用指令。
2 ffmpeg常用指令
不重新编码提取音频
ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
-vn 是没有视频。
-acodec copy 说使用已经在那里的相同音频流。
ffmpeg.exe -i in.mp4 -vn -c:a copy out.m4a
ffmpeg -i sample.avi -q:a 0 -map a sample.mp3
使用-q:a 0可变比特率,并且指定-map a排除视频/字幕并仅抓取音频是一种很好的做法
从视频中提取一部分音频,请使用-ss指定开始时间戳的-t选项,以及指定编码持续时间的选项,例如从 3 分 5 秒开始,持续 45 秒
ffmpeg -i sample.avi -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a sample.mp3
时间戳需要采用 HH:MM:SS.xxx 格式或以秒为单位。
如果您不指定-t选项,它将结束。
如果要指定范围,例如 45 秒,则可以使用-to选项而不是-t选项:00:03:05 + 45 = 00:03:50
提取所有音轨/流
ffmpeg -i input.mov -map 0:a -c copy output.mov
-map 0:a仅选择所有音频流。视频和字幕将被排除在外。
-c copy启用流复制模式。这会复制音频并且不会对其重新编码。-c copy如果要重新编码音频,请删除。
选择支持您的音频格式的输出格式。请参阅容器格式的比较。
提取特定的音轨/流
ffmpeg -i input.mkv -map 0:a:3 -c copy output.m4a
-map 0:a:3仅选择音频流 #4(ffmpeg从 0 开始计数)。
-c copy启用流复制模式。这会复制音频并且不会对其重新编码。-c copy如果要重新编码音频,请删除。
选择支持您的音频格式的输出格式
提取和重新编码音频/更改格式没有-c copy. 各种例子:
ffmpeg -i input.mp4 -map 0:a output.mp3
ffmpeg -i input.mkv -map 0:a output.m4a
ffmpeg -i input.avi -map 0:a -c:a aac output.mka
ffmpeg -i input.mp4 output.wav
单独提取所有音频流 输入有 4 个音频流。每个音频流将作为单个单独的文件输出
ffmpeg -i input.mov -map 0:a:0 output0.wav -map 0:a:1 output1.wav -map 0:a:2 output2.wav -map 0:a:3 output3.wav
提取某个频道 使用通道分离过滤器
ffmpeg -i stereo.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FR[right]" -map "[right]" front_right.wav
channel_layout是输入的通道布局。它不会自动检测到,因此您必须提供布局名称。channels 列出要提取的频道。
请参阅ffmpeg -layouts音频通道布局名称(对于channel_layout)和通道名称(对于channels)。
过滤时无法使用流复制模式 ( -c copy),因此必须重新编码音频
将音频和缩混提取为立体声(无需重新编码):
ffmpeg.exe -i in.mp4 -vn -c:a copy -ac 2 out.m4a
-map和 和有-vn什么区别
ffmpeg具有默认的流选择行为,将为每个流类型选择 1 个流(1 个视频、1 个音频、1 个字幕、1 个数据)。
-vn是一个旧的遗留选项。它从默认流选择行为中排除视频。所以,音频,字幕和数据仍然自动选择,除非告知不要与-an,-sn或-dn。
-map更复杂,但更灵活和有用。-map禁用默认的流选择行为,并且ffmpeg只会包含您使用-map选项告诉它的内容。-map还可用于排除某些流或流类型。例如,-map 0 -map -0:v将包括除所有视频之外的所有流。
3 小结
常见错误
- 1,无效音频流
无效的音频流。只需要一个 MP3 音频流。
MP3 仅支持 1 个音频流。该错误意味着您正在尝试将 1 个以上的音频流放入 MP3。这也可能意味着您正在尝试将非 MP3 音频放入 MP3。
-
2,WAVE 文件只有一个流
-
3,在流 #0 中找不到编解码器的标签,容器当前不支持编解码器
您正在尝试将音频格式放入不支持它的输出中,例如将 PCM (WAV) 放入 MP4。
删除-c copy,选择不同的输出格式(更改文件扩展名),或手动选择编码器(例如-c:a aac) -
4,无法为输出文件 #0 写入标头(编解码器参数不正确?):参数无效
这是一个无用的通用错误。实际的、提供信息的错误应紧跟在此一般错误消息之前。
-
参考
https://stackoverflow.com/questions/9913032/how-can-i-extract-audio-from-video-with-ffmpeg
- 点赞
- 收藏
- 关注作者
评论(0)