有两个视频和两个音频文件
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
取得音频开始时间的差异
示例测试会议文件</ p>
https://drive.google.com/open?id=0ByVMq5U43FGlbXpXR3JtSnFTaWM
https://drive.google.com/open?id=0ByVMq5U43FGlbENVRWlTWktQb3M
https://drive.google.com/open?id=0ByVMq5U43FGldndlZDNpNWxWY2M
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
但又面临以下问题
任何建议或帮助?
答案 0 :(得分:2)
使用
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
更新:对于当前上传的文件集,请使用以下命令
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
开始时间是07.905
second.mkv
开始时间是11.911
second.mka
开始时间是11.899
这些音频文件使用未在ffmpeg的原生Opus解码器中实现的编解码器功能,因此强制使用外部解码器。
第一个视频文件fps未被检测到,因此对于这两个视频,我使用fps
过滤器强制使用相同的帧速率。
为两个音频添加了atrim滤波器,其值等于音频和相应视频之间的开始时间差。修剪后的音频的时间戳必须通过asetpts
重置。必须使用aresample
填写录音中的任何空白。只有迟到的a / v应该有其音频adelay
- ed,其值等于视频开始时间的差异。添加pan
过滤器以修复amerge所需的频道布局。
preset
变为快速。 CRF增加到10
(0
是一个很大的空间浪费)。