ffmpeg命令

本文介绍了如何使用ffmpeg工具将音频文件从原始的16000采样率、32位位深、双声道转换为8000采样率、16位位深的单声道pcm文件,以适应特定项目需求。转换过程涉及到采样率、位深和声道数的调整,并给出了具体的ffmpeg命令示例。此外,还展示了mp3转pcm的转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

音频格式转换

ffmpeg.exe -i C:\Users\Even\base\assets\voiced_005.wav -ar 8000 -ac 1 -f s16le start_record.pcm

如上命令中,voiced_005.wav是原文件,该文件的参数如下:

  • 采样率:16000
  • 位深:32位
  • 声道数:2

在公司的音视频项目中,播放声音的播放器使用的参数如下:

  • 采样率:8000
  • 位深:16位
  • 声道数:1

所以需要把音频文件转换为我们需要的参数,而且我们需要的是pcm。

  • -ar 8000,把采样率转换为8000
  • -ac 1,把声道转换为单声道
  • -f s16le,把位深转换为16位

这里没有指定保存的pcm文件的路径,则以当前路径保存。命令中的wav文件也可以替换为mp3等其他格式的文件,目标文件也可以是pcm的其他格式的文件。

mp3转pcm

ffmpeg.exe -i E:\嗨格式录音文件\start.mp3  -channels 1 -sample_rate 48000 -c:a pcm_s16le -f s16le E:\嗨格式录音文件\48000.pcm

接收AAC推流并播放

当前使用的是最新版本,为8月16日编译的版本,如下:

C:\Users\daizh>ffmpeg -version
ffmpeg version N-120750-g30e6956920-20250816 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 15.1.0 (crosstool-NG 1.27.0.79_8f49ec5)

把ffmpeg当服务器,然后在手机端实时推aac过来,ffmpeg接收并播放:

ffplay -f aac -ar 44100 -ch_layout stereo udp://@0.0.0.0:1234
  • -f aac 强制指定输入数据的格式为 ​AAC 音频流。UDP 传输的原始 AAC 数据无容器封装(如 MP4/FLV),需明确告知 ffplay 按 AAC 裸流解析,否则可能因无法自动识别格式而报错。
  • ​-ar 44100 设置音频采样率为 ​44.1kHz。
  • -ch_layout stereo 指定音频声道布局为 ​立体声​(双声道),如果是单声道,用-ch_layout mono
  • udp://@0.0.0.0:1234 定义输入源为 ​UDP 网络流,@0.0.0.0监听所有网络接口(适用于多网卡环境),1234为UDP 端口号。

刚刚试了播放本地文件,指定参数也行,不指定也行,因为aac文件里面有adts头包含了音频的各种信息,所以可以简单的命令行如下:

ffplay -f aac hello.aac

甚至这样也能播:

ffplay hello.aac

所以对于播放网络流,如果aac的网络流包含有adts头信息,也可以简化为:

ffplay -f aac udp://@0.0.0.0:1234

接收H264推流并播放

ffplay -f h264 -fflags nobuffer -max_delay 100000 udp://@0.0.0.0:1234
  • -f h264 强制指定输入数据为 ​H.264 裸流​(无容器封装),H.264 裸流无文件头信息(如 MP4 的 moov盒),需显式声明格式,否则 ffplay无法自动识别。
  • -fflags nobuffer 禁用输入缓冲区,​显著降低延迟​(从 500ms 降至 100ms 内)。适用于实时监控、视频通话等对延迟敏感的场景。
  • -max_delay 100000 设置最大解封装延迟为 ​100 毫秒​(单位:微秒)。避免因网络抖动导致卡顿,超出延迟阈值的数据包会被丢弃,确保实时性。
  • udp://@0.0.0.0:1234 监听所有网卡(0.0.0.0)的 UDP 端口 1234,接收 H.264 数据。

播放本地H264文件:

ffplay -f h264 test.h264
### FFmpeg 命令的用法与常见问题解决 FFmpeg 是一个强大的多媒体处理工具,广泛用于音视频转换、流媒体传输以及其他复杂的多媒体操作。以下是关于其命令用法以及一些常见的错误排查方法。 #### 1. 版本确认 在使用 FFmpeg 进行任何操作之前,建议先验证当前系统的 FFmpeg 安装版本是否正确无误。可以通过以下命令来检查: ```bash ffmpeg -version ``` 这会返回类似 `ffmpeg version 4.1.4` 的信息[^1]。如果未显示正确的版本号,则可能需要重新安装或更新 FFmpeg。 #### 2. 路径配置问题 当尝试运行 FFmpeg 并遇到类似于 `dyld: Library not loaded:` 或者 `image not found` 错误时,通常表明动态链接库缺失或者路径设置不正确。例如,在 macOS 上可能会提示缺少 `/usr/local/opt/freetype/lib/libfreetype.6.dylib` 文件[^2]。此时可以按照如下方式修复: - **切换到 FFmpeg 所属目录** ```bash cd /usr/local/Cellar/ffmpeg/4.1.4_1/bin/ ``` - **手动执行 FFmpeg 测试** 如果仍然报错,可能是依赖项损坏或丢失。需通过 Homebrew 更新相关依赖包: ```bash brew reinstall freetype ``` #### 3. 输入源指定 对于网络流输入场景,比如 UDP 协议下的实时数据捕获,可利用 `-i` 参数指明输入地址。下面是一个典型例子: ```bash -i 'udp://localhost:5000?fifo_size=1000000&overrun_nonfatal=1' ``` 上述选项中的附加参数(如 fifo_size 和 overrun_nonfatal)并非总是必需,但在某些特殊情况下能够有效防止缓冲区溢出等问题[^3]。 #### 4. 输出文件格式化 假设要将原始音频编码成 MP3 格式并保存至本地磁盘,可以用这样的指令完成任务: ```bash ffmpeg -i input.wav output.mp3 ``` 这里简单介绍了如何定义基本的输入输出关系;实际应用中还涉及更多高级功能设定,像比特率调整、分辨率缩放等都可通过额外开关实现。 尽管本文主要围绕 FFmpeg 展开讨论,但也提及到了其他类型的软件资源,例如约束满足求解器 Choco 及 OptaPlanner 等[^4],它们虽然不属于同一领域范畴,却同样体现了现代计算科学跨学科融合的趋势。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android_cai_niao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值