在 ASP.Net 中,我使用 FFMPEG 将 Flash Media Server 上的 flv 文件转换为需要混合到单个 MP3 文件中的 wav。我最初完全使用 FFMPEG 进行了尝试,但最终放弃了混合步骤,因为我认为不可能将仅音频轨道合并到单个结果文件中。我愿意犯错。
我现在使用 FFMPEG 访问 FLV 文件并将音轨提取到 wav,以便SOX可以混合它们。问题是我必须将其中一个音轨偏移几秒钟,以便它们同步。每个文件都是学生和老师之间对话的一半。例如,teacher.wav 可能需要在 student.wav 之后 3.3 秒开始。我只能弄清楚如何将两个曲目同时开始的 SOX 文件混合在一起。
在这一点上,我最好的尝试是:
ffmpeg -y -i rtmp://server/appName/instance/student.flv -ac 1 student.wav
ffmpeg -y -i rtmp://server/appName/instance/teacher.flv -ac 1 teacher.wav
sox -m student.wav teacher.wav combined.mp3 splice 3.3
Run Code Online (Sandbox Code Playgroud)
这些工具 (FFMEG/SoX) 是根据我的最佳研究选择的,但不是必需的。任何可行的解决方案都将允许 ASP.Net 服务输入两个 FMS flv 并使用开源或免费工具创建组合的 MP3。
编辑:
我能够使用delaySOX 中的开关来抵消文件。
sox -M student.wav teacher.wav combined.mp3 delay 2.8
Run Code Online (Sandbox Code Playgroud)
如果有人有比 FFMPEG/SOX 组合解决方案更好的方法,我将问题悬而未决。
好的,
我进行了一些创造性的搜索,但有点遇到障碍。
我正在尝试使用 linux 程序“sox”。我试图从我的 PHP 脚本中调用它。如果我使用命令行,脚本确实可以工作。但是,当我使用 PHP exec 时,它不起作用。
例子:
sox file1.mp3 file2.mp3 tempfile.mp3 -V3
Run Code Online (Sandbox Code Playgroud)
(“V3”指定详细输出)
在命令行中以“用户 X”或 root 身份执行时,我能够创建新文件。但是,当我执行命令时:
<?php
exec('sox file1.mp3 file2.mp3 tempfile.mp3 -V3', $output);
foreach($output as $line){
print $line;
}
Run Code Online (Sandbox Code Playgroud)
它不会生成新文件。此外,应该返回命令结果的数组是空白的。
我做了一个简单的文字
exec(ls,$output);
Run Code Online (Sandbox Code Playgroud)
我得到了根目录的内容。
我使用了 PHP 命令get_current_user(),它返回了作为网站根目录的目录的所有者。
但是,当我使用 linux 命令时,whoami我发现它将当前人员视为“apache”。我是否需要授予 apache 使用该程序的权利?
我将继续在线搜索并进行反复试验,以找出我做错了什么。任何帮助表示赞赏。
澄清
我想在Linux中使用SOX混合音频。这是我的剧本。我是这个东西的初学者。
time sox --buffer 128000 --combine mix audio1.mp3 audio_recorded.wav -C 64.0 "./Mixed.mp3"
time ffmpeg -loglevel warning -i ./Output.wav -c:a libfdk_aac -b:a 64k -map 0:0 -f segment -segment_time 10 -segment_list ./Output.m3u8 -segment_format aac './stream%03d.aac'
cd ..
Run Code Online (Sandbox Code Playgroud)
但是结果是这样的。
sox FAIL formats: can't open input file `audio_recorded.wav': WAVE: RIFF header not found
real 0m0.003s
user 0m0.000s
sys 0m0.002s
Run Code Online (Sandbox Code Playgroud)
该audio_recorded.wav是Android的一个录制的音频文件。
[已删除的ANDROID代码:不再需要]
更新:我试图将我的录音机..set比特率和采样率修改为audio1.mp3。然后我尝试将其混合。现在发生了什么:
[root@app complete]# bash test_mix.sh
sox WARN mp3-util: MAD lost sync
sox WARN mp3-util: recoverable MAD error
sox WARN mp3-util: recoverable …Run Code Online (Sandbox Code Playgroud) 我正在使用 SoX 将几种不同格式的音频文件转换为 mp3。根据docs,您可以使用-C参数来指定压缩选项,如比特率和质量,质量在小数点后,例如:
sox input.wav -C 128.01 output.mp3 (最高质量,较慢)
sox input.wav -C 128.99 output.mp3 (最低质量,更快)
我预计第二个听起来很糟糕,但是,两个声音之间的音频质量完全相同。如果是这种情况,我不明白为什么一个人的执行速度如此之慢,或者我不明白将压缩设置为更高的“质量”会得到什么。
有人可以告诉我使用高质量压缩与使用低质量压缩是否有真正的区别或优势?
PS我还检查了每个输出文件的文件大小,两者的大小完全相同。但是当散列时,每个文件都有不同的散列。
我打算使用我的整个音乐收藏并将音高从原始录制的 a=440hz 更改为更自然的声音/感觉 a=432hz。
对于那些不熟悉这个概念或“为什么”这样做的人,我强烈建议您进行谷歌搜索并了解它的全部内容。但这并不完全相关。
我知道我什至可以将 Audacity 和一个一个,转换和重新导出具有新音高的文件。我试过这个,是的,它确实有效。但是,我的收藏非常大,我很高兴找到更合适的命令行选项 SOX。任何的想法 ?
我的服务器抛出了这个错误
Sox::Error (sox FAIL formats: no handler for file extension `mp3'
)
Run Code Online (Sandbox Code Playgroud)
这个人(https://superuser.com/questions/421153/how-to-add-a-mp3-handler-to-sox)也有类似的问题。那里列出的解决方案是
sudo apt-get install libsox-fmt-mp3
Run Code Online (Sandbox Code Playgroud)
运行此命令后,我仍然遇到相同的错误,因此我卸载了sox(sudo apt-get remove sox),然后重新安装了它。在这一点上,我有信心他们都已安装了最新版本,因为任何尝试安装它们都会产生此问题。
libsox-fmt-mp3 is already the newest version.
sox is already the newest version.
Run Code Online (Sandbox Code Playgroud)
但是,我仍然收到相同的错误。
知道我缺少什么吗?
编辑:
我正在使用ruby-sox gem(https://github.com/TMXCredit/ruby-sox),它表示以下内容就足够了。
apt-get install libsox-fmt-all sox libchromaprint-dev
Run Code Online (Sandbox Code Playgroud)
但是所有这些都已安装,仍然没有骰子。
编辑:
我能弄清楚这种情况发生的唯一方法是,如果sox在错误的位置寻找lib文件。考虑到这些细节可能会有所帮助,
sudo find / -name sox
/usr/bin/sox
/usr/lib/x86_64-linux-gnu/sox
/usr/lib/mime/packages/sox
/usr/share/doc/sox
/home/deployer/apps/eko/shared/bundle/ruby/2.1.0/gems/ruby-sox-0.0.1/lib/sox
sudo find / -name libsox-fmt-mp3
/usr/share/doc/libsox-fmt-mp3
Run Code Online (Sandbox Code Playgroud)
当我卸载sox(apt-get remove sox)时,当我搜索sox时得到了这个
ubuntu@ip-10-0-0-9:~$ sudo find / -name sox
/usr/lib/x86_64-linux-gnu/sox
/home/deployer/apps/eko/shared/bundle/ruby/2.1.0/gems/ruby-sox-0.0.1/lib/sox
Run Code Online (Sandbox Code Playgroud)
为了摆脱这种袜子,希望回到除了宝石体验之外的任何地方都没有袜子,我尝试了
sudo apt-get …Run Code Online (Sandbox Code Playgroud) 我如何调用sox将2秒音频文件转换为加速,以使文件的结果长度为1.5秒(75%)?我是否必须通过论证来进行音高修正?我必须通过哪些论据才能保持文件大小?
我目前有一个需要更改采样率的文件列表。
我最近意识到这可以使用sox 但是当我尝试这样做时,我不断收到一条错误消息 sox wav: Premature EOF on .wav input file并导致音频文件为空..似乎 sox 无法重新采样输入的音频文件=输出...我有点需要,如果我必须转换音频文件的整个目录...
目前使用的命令:
~/kaldi-trunk/egs/yesno/s5_k_added$ sox 0_0_0_0_1_1_1_1.wav -r 8000 0_0_0_0_1_1_1_1.wav
sox WARN wav: Premature EOF on .wav input file
:~/kaldi-trunk/egs/yesno/s5_k_added$ play 0_0_0_0_1_1_1_1.wav
0_0_0_0_1_1_1_1.wav:
File Size: 44
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 8000Hz
Replaygain: off
Duration: unknown
In:0.00% 00:00:00.00 [00:00:00.00] Out:0 [ | ] Clip:0
Done.
Run Code Online (Sandbox Code Playgroud)
如何重新采样音频文件目录?
我想要使用 Google Cloud Speech 进行实时流式传输
我正在 Google Cloud Speech to text 文档中运行一些示例代码,
但出现此错误
sox has exited with error code 1.
Enable debugging with the environment variable DEBUG=record.
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情
安装 sox (14.4-1, 14-4-2) => 后设置 Sox 环境变量不起作用
更改recordProgram记录选项的值(recordProgram:'rec'=>'sox')但它不起作用。
我找到了一个将-t,添加raw到cmdArgsin 的解决方案node_modules/node-record-lpcm16/index.js,但我无法应用它,因为代码现在不同了。
使用node-micphone库但未被识别
操作系统:window10
language: node js
dependencies: {
"@google-cloud/speech": "^4.1.5",
"express": "^4.17.1",
"node-microphone": "^0.1.5",
"node-record-lpcm16": "^1.0.1"
}
Run Code Online (Sandbox Code Playgroud)
Codesandbox:简单的源代码