从 ffmpeg 手册页,我应该能够使用 -map_channel 来分割/静音通道,但是,除非流确实包含 2 个通道,否则映射不起作用。
01.mp3:
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
ffmpeg -threads 1 -i 01.mp3 -map_channel 0.0.1 -map_channel -1 01R.mp3
不会起作用:
Stream #0:0 -> #0:0 [ch: 1 M] (mp3 -> libmp3lame)
然而,01R.mp3 仍然是包含 L 和 R 通道的立体声流。
如果我将 mp3 转换为 wav,那么它就变成了双通道流:
ffmpeg -threads 1 -i 01L.mp3 01LR.wav
Stream mapping:
Stream #0:0 -> #0:0 (mp3 -> pcm_s16le)
ffprobe 01LR.wav
Input #0, wav, from '01LR.wav':
Duration: 00:40:20.42, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
我可以静音/分割 wav 文件。
如何在不先将立体声流转换为双声道 wav 文件的情况下将其静音/分割?
谢谢
[编辑]根据@LordNeckbeard:
$ ffmpeg -threads 1 -i 01.mp3 -map_channel 0.0.1 -map_channel -1 01R.mp3
ffmpeg version 0.10.12-7:0.10.12-1~precise1 Copyright (c) 2000-2014 the FFmpeg developers
built on Apr 26 2014 09:49:36 with gcc 4.6.3
configuration: --arch=amd64 --disable-stripping --enable-pthreads --enable-runtime-cpudetect --extra-version='7:0.10.12-1~precise1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
libavutil 51. 35.100 / 51. 35.100
libavcodec 53. 61.100 / 53. 61.100
libavformat 53. 32.100 / 53. 32.100
libavdevice 53. 4.100 / 53. 4.100
libavfilter 2. 61.100 / 2. 61.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 6.100 / 0. 6.100
libpostproc 52. 0.100 / 52. 0.100
[mp3 @ 0x115f6e0] max_analyze_duration 5000000 reached at 5015510
Input #0, mp3, from '01.mp3':
Metadata:
title : VTS_01_1
author : BT
copyright : Happy@2006
comment :
encoder : Lavf53.32.100
Duration: 00:40:20.42, start: 0.000000, bitrate: 128 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
Output #0, mp3, to '01R.mp3':
Metadata:
TIT2 : VTS_01_1
author : BT
TCOP : Happy@2006
comment :
TSSE : Lavf53.32.100
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 [ch: 1 M] (mp3 -> libmp3lame)
Press [q] to stop, [?] for help
Truncating packet of size 1024 to 189ate= 128.0kbits/s
Truncating packet of size 1024 to 1
size= 37820kB time=00:40:20.45 bitrate= 128.0kbits/s
video:0kB audio:37820kB global headers:0kB muxing overhead 0.001381%
[编辑2]:
如上所述,ffmpeg -i 01.mp3 -map_channel 0.0.1 01R.wav
或者ffmpeg -i 01.wav -map_channel 0.0.1 01R.mp3
可以工作。但ffmpeg -i 01.mp3 -map_channel 0.0.1 01R.mp3
不起作用。
我找到了一种通过添加 -ac 1 来制作单声道 mp3 的方法:
ffmpeg -i 01.mp3 -ac 1 -map_channel 0.0.1 01R.mp3
但是,使用-map_channel -1
静音立体声输出流中的一个通道仍然不起作用。
答案1
静音频道
此示例采用立体声输入并将左声道静音。输出仍为立体声:
ffmpeg -i stereo.wav -map_channel -1 -map_channel 0.0.1 output.wav
- 此示例来自FFmpeg Wiki:音频通道操作。
-map_channel
请参阅FFmpeg 文档。
立体声道转单声道
此示例从立体声输入的左声道创建单声道输出:
ffmpeg -i stereo.mp3 -map_channel 0.0.0 left.wav
-map_channel 0.0.1
如果您想要正确的频道,请使用。
或者你可以使用平移音频过滤器:
ffmpeg -i stereo.m4a -af "pan=1:c0=c0" left.flac
pan=1:c0=c1
如果您想要正确的频道,请使用。