使用hstack-ffmpeg合并会议视频和音频呼叫输出



具有两个视频和两个音频文件

Input #0, matroska,webm, from 'first.mkv':
Metadata:
encoder         : GStreamer matroskamux version 1.8.1.1
creation_time   : 2017-10-16 14:13:15
Duration: 00:06:01.24, start: 3.817000, bitrate: 1547 kb/s
Stream #0:0(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 16.75 tbr, 1k tbn, 1k tbc (default)
Metadata:
title           : Video
Input #1, matroska,webm, from 'second.mkv':
Metadata:
encoder         : GStreamer matroskamux version 1.8.1.1
creation_time   : 2017-10-16 14:13:24
Duration: 00:05:49.79, start: 13.509000, bitrate: 810 kb/s
Stream #1:0(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 1k tbr, 1k tbn, 1k tbc (default)
Metadata:
title           : Video
Input #2, matroska,webm, from 'first.mka':
Metadata:
encoder         : GStreamer matroskamux version 1.8.1.1
creation_time   : 2017-10-16 14:13:15
Duration: 00:06:01.30, start: 3.786000, bitrate: 46 kb/s
Stream #3:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
Metadata:
title           : Audio
Input #3, matroska,webm, from 'second.mka':
Metadata:
encoder         : GStreamer matroskamux version 1.8.1.1
creation_time   : 2017-10-16 14:13:24
Duration: 00:05:50.61, start: 13.498000, bitrate: 50 kb/s
Stream #2:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
Metadata:
title           : Audio

以上文件是视频电话会议的输出,希望将所有文件合并在一起并显示为并排的视频。

视频和音频的开始时间不同,希望分别同步视频和音频,并将视频并排合并。

最初使用以下命令合并两个视频

ffmpeg -i first.mkv -i second.mkv -filter_complex "
[0:v]scale=320:240,pad=325:240,setsar=1[l];[1:v]scale=320:240,setsar=1[r];
[l][r]hstack" -c:v libx264 -preset ultrafast -crf 0 merged.mp4

之后,按照@mulvya 的建议使用以下命令进行合并

ffmpeg -ss 00:00:09.692 -i first.mkv -i second.mkv -i first.mka -i second.mka -filter_complex "[0:v]scale=320:240,pad=325:240,setsar=1[l];[1:v]scale=320:240,setsar=1[r];[l][r]hstack=shortest=1[v];[3]adelay=9712|9712[3a];[2][3a]amerge[a]" -map '[v]' -map '[a]' -c:v libx264 -preset slower -crf 0 -c:a aac -ac 2 merged.mp4

对于取视频开始时间差的-ss值和取音频开始时间差的adelay

样本测试会议文件

  1. https://drive.google.com/open?id=0ByVMq5U43FGlbXpXR3JtSnFTaWM

  2. https://drive.google.com/open?id=0ByVMq5U43FGlbENVRWlTWktQb3M

  3. https://drive.google.com/open?id=0ByVMq5U43FGldndlZDNpNWxWY2M

  4. https://drive.google.com/open?id=0ByVMq5U43FGlei1oRjNKeXRZbE0

现在面临音频同步问题和第二音频听力低。

预期的结果是第一个视频和第二个视频并排合并,音频应该与合并的视频同步。

现在我可以使用以下命令获得所需的输出

ffmpeg -i first.mkv -i second.mkv -i first.mka -i second.mka -filter_complex "[0]scale=320:240,pad=645:240,setsar=1[l];[1]scale=320:240,setpts=PTS-STARTPTS+9.723/TB,setsar=1[1v];[l][1v]overlay=x=325[v];[3]adelay=9712|9712[1a];[2]adelay=31|31[2a];[2a][1a]amerge=inputs=2[a]" -map '[v]' -map '[a]' -c:v libx264 -preset slower -crf 0 -c:a aac -ac 2 merged.mp4

但再次面临以下问题

  1. 第二个视频没有正确编码,卡在中间播放
  2. 音频同步问题
  3. 转换过程很慢。如何使用hstack完成上述工作

有什么建议或帮助吗?

使用

ffmpeg -i first.mkv -i second.mkv -i 1st.wav -i 2nd.wav -filter_complex "
[0:v]scale=320:240,pad=325:240,setsar=1[l];[1:v]setpts=PTS+6/TB,scale=320:240,setsar=1[r];
[l][r]hstack=shortest=1,drawbox=325:0:c=black:t='max':enable='lt(t,6)'[v];
[3]adelay=6000|6000[3a];[2][1a]amerge[a]" -map '[v]' -map '[a]' -c:v libx264 -preset ultrafast -crf 0 -c:a aac -ac 2 merged.mp4

UPDATE:对于当前上传的文件集,使用下面的命令

ffmpeg -i first.mkv -i second.mkv -c:a libopus -i first.mka -c:a libopus -i second.mka
-filter_complex
"[0]fps=30,scale=320:240,pad=645:240,setsar=1[l];
[1]fps=30,scale=320:240,setpts=PTS-STARTPTS+3.981/TB,setsar=1[1v];
[l][1v]overlay=x=325[v];
[2]atrim=0.025,asetpts=PTS-STARTPTS,aresample=async=1,pan=stereo|c0=c0|c1=c1[2a];
[3]atrim=0.012,asetpts=PTS-STARTPTS,aresample=async=1,adelay=3981|3981,pan=stereo|c0=c0|c1=c1[3a];
[2a][3a]amerge=inputs=2[a]"
-map "[v]" -map "[a]" -c:v libx264 -preset fast -crf 10 -c:a aac -ac 2 merged.mp4

first.mkv开始时间为07.930
first.mka开始时间为07905
second.mkv开始时间为11.911
second.mka开始时间为11.899

这些音频文件使用了ffmpeg的原生Opus解码器中未实现的编解码器功能,因此必须使用外部解码器。

第一个视频文件fps没有检测到,所以对于两个视频,我使用fps过滤器强制相同的帧速率。

为两个音频添加心房滤波器,其值等于音频和相应视频之间的开始时间差。修剪后的音频的时间戳必须通过asetpts重置。记录中的任何间隙都必须使用aresample来填补。只有晚启动的a/v才应该有其音频adelay-ed,其值等于视频启动时间的差。添加pan过滤器以修复频道布局,这是amerge所必需的。

preset变为fast。CRF增加到CCD_ 13(CCD_。

最新更新