将Mumble的多声道音轨与ffmpeg合并

时间:2017-09-13 20:47:03

标签: audio ffmpeg

我们通过Mumble记录谈话,因为Mumble有一个非常多的通道功能,我认为我们可以通过for file in *; do ffmpeg -loop 1 -r 2 -i "$img" -i "$file" -vf scale=-1:380 -c:v libx264 -preset slow -tune stillimage -crf 18 -c:a copy -shortest -pix_fmt yuv420p -threads 0 "$file".mkv; done将每个曲目分别上传到YouTube来获取YouTube的字幕,然后我可以用例如。 sed shell脚本为自动标题中的每个发言者提供昵称,即来自YouTube的字幕。像魅力一样。

合并这些跟踪ffmpeg变得棘手。我使用ffmpeg -i input1.ogg -input2.ogg -i input3.ogg -i input4.ogg -input5.ogg -filter_complex "[0:a][1:a][2:a][3:a][4:a] amerge=inputs=5[aout]" -map "[aout]" -ac 2 output.ogg

以某种方式 ffmpeg 缩短产生的音轨,我还不知道为什么。我尝试使用最长的第一个和最后一个,因为包括静音轨道甚至更短的混音。以下是警告:

  

[Parsed_amerge_0 @ 0x7f8b29f02d20]没有输入1的频道布局

     

[Parsed_amerge_0 @ 0x7f8b29f02d20]输入通道布局重叠:输出布局将由不同输入通道的数量确定

但它说

  

[Parsed_amerge_0 @ 0x7f8b29f02d20]没有输入1的频道布局

即使我更改输入的顺序

尽管根据Mumble的文档,曲目应该是相等长度的VLC媒体信息显示不同的曲目时间。 然而,曲目不同步,最后只是切断了。

我也不知道为什么ffmpeg提及FLAC,所有文件都是vorbis。

ffmpeg -i Mumble-2017-09-09-16-33-18-149.210.187.155-chrisaiki2.ogg -i Mumble-2017-09-09-16-33-18-149.210.187.155-Recorder.ogg -i Mumble-2017-09-09-16-33-18-149.210.187.155-steempowerpics.ogg -i Mumble-2017-09-09-16-33-18-149.210.187.155-Taconator.ogg -i Mumble-2017-09-09-16-33-18-149.210.187.155-fuzzynewest.ogg -filter_complex "[0:a][1:a][2:a][3:a][4:a] amerge=inputs=5[aout]" -map "[aout]" -ac 2 output5.ogg

ffmpeg version 2.8.4 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.8.4 --enable-shared --        enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-  avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-    libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, ogg, from 'Mumble-2017-09-09-16-33-18-149.210.187.155-   chrisaiki2.ogg':
  Duration: 00:40:01.19, start: 0.000000, bitrate: 17 kb/s
    Stream #0:0: Audio: vorbis, 48000 Hz, mono, fltp, 86 kb/s
    Metadata:
      ENCODER         : libsndfile
      TITLE           : chrisaiki2
Input #1, ogg, from 'Mumble-2017-09-09-16-33-18-149.210.187.155-Recorder.ogg':
  Duration: 00:33:57.88, start: 0.000000, bitrate: 1 kb/s
    Stream #1:0: Audio: vorbis, 48000 Hz, mono, fltp, 86 kb/s
    Metadata:
      ENCODER         : libsndfile
      TITLE           : Recorder
Input #2, ogg, from 'Mumble-2017-09-09-16-33-18-149.210.187.155-steempowerpics.ogg':
  Duration: 00:33:53.93, start: 0.000000, bitrate: 1 kb/s
    Stream #2:0: Audio: vorbis, 48000 Hz, mono, fltp, 86 kb/s
    Metadata:
      ENCODER         : libsndfile
      TITLE           : steempowerpics
Input #3, ogg, from 'Mumble-2017-09-09-16-33-18-149.210.187.155-Taconator.ogg':
  Duration: 00:35:36.37, start: 0.000000, bitrate: 6 kb/s
    Stream #3:0: Audio: vorbis, 48000 Hz, mono, fltp, 86 kb/s
    Metadata:
      ENCODER         : libsndfile
      TITLE           : Taconator
Input #4, ogg, from 'Mumble-2017-09-09-16-33-18-149.210.187.155-fuzzynewest.ogg':
  Duration: 00:41:53.23, start: 0.000000, bitrate: 30 kb/s
    Stream #4:0: Audio: vorbis, 48000 Hz, mono, fltp, 86 kb/s
    Metadata:
      ENCODER         : libsndfile
      TITLE           : fuzzynewest
File 'output5.ogg' already exists. Overwrite ? [y/N] y
[Parsed_amerge_0 @ 0x7f8b29f02d20] No channel layout for input 1
[Parsed_amerge_0 @ 0x7f8b29f02d20] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
[flac @ 0x7f8b2b005600] encoding as 24 bits-per-sample
Output #0, ogg, to 'output5.ogg':
  Metadata:
    encoder         : Lavf56.40.101
    Stream #0:0: Audio: flac, 48000 Hz, stereo, s32 (24 bit), 128 kb/s (default)
    Metadata:
      encoder         : Lavc56.60.100 flac
Stream mapping:
  Stream #0:0 (vorbis) -> amerge:in0
  Stream #1:0 (vorbis) -> amerge:in1
  Stream #2:0 (vorbis) -> amerge:in2
  Stream #3:0 (vorbis) -> amerge:in3
  Stream #4:0 (vorbis) -> amerge:in4
  amerge -> Stream #0:0 (flac)
Press [q] to stop, [?] for help
size=  100900kB time=00:33:53.94 bitrate= 406.4kbits/s    
video:0kB audio:100441kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.457024%

Mumble multichannel talk on reddit

2 个答案:

答案 0 :(得分:1)

amerge documentation州:

  

如果输入的持续时间不同,则输出将随之停止   最短的。

对于这种情况,

amix可能是更好的过滤器。

答案 1 :(得分:0)

我最后使用了amix,如下所示: ffmpeg -i input1.ogg -i input2.ogg -i input3.ogg -i inout4.ogg -i input5.ogg -filter_complex "[0:a][1:a][2:a][3:a][4:a] amix=inputs=5:duration=longest[aout]" -map "[aout]" -ac 2 -c:a libvorbis -b:a 128k output.ogg

ffmpeg无法识别libvorbis,所以我必须首先使用brew重新安装:brew reinstall ffmpeg --with-libvorbis

然后我使用ffmpeg -loop 1 -r 2 -i "$img" -i "$snd" -vf scale=-1:380 -c:v libx264 -preset slow -tune stillimage -crf 18 -c:a copy -shortest -pix_fmt yuv420p -threads 0 output.mkv将混合音轨上传到YouTube。

我合并了用YouTube生成的字幕,我刚刚将这些字幕添加到了生成的视频中。像魅力一样。