Video Can';t在WhatsApp上共享少量FFMPEG编码的视频

Video Can';t在WhatsApp上共享少量FFMPEG编码的视频,video,ffmpeg,whatsapp,processbuilder,Video,Ffmpeg,Whatsapp,Processbuilder,我正在使用FFMPEG将一个视频缝合到另一个视频。但是,我注意到,这些视频中很少有没有在WhatsApp上共享,并显示“无法发送此视频。请选择其他视频,然后重试” 我正在使用以下命令进行缝合: ffmpeg -y -i <input1> -i <input2> -filter_complex "color=black:input1Width x input1Height:d=(input1time + input2time -1)[base] ;[0:v]se

我正在使用FFMPEG将一个视频缝合到另一个视频。但是,我注意到,这些视频中很少有没有在WhatsApp上共享,并显示“无法发送此视频。请选择其他视频,然后重试”

我正在使用以下命令进行缝合:

ffmpeg -y -i <input1> -i
 <input2> -filter_complex "color=black:input1Width x input1Height:d=(input1time + input2time -1)[base]
;[0:v]setpts=PTS-STARTPTS[v0];[1:v] scale = iw * min(input1Width / iw\\, input1Height / ih):ih * min(input1Width/iw\\,input1Height/ih),
pad=input1Width:input1Height:(input1Width-iw*min(input1Width/iw\\,input1Height/ih))/2:(input1Height -
 ih*min(input1Width/iw\\,input1Height/ih))/2,setsar=1:1,format=yuva420p,fade=in:st=0:d=1.0:alpha=1,
setpts=PTS-STARTPTS+((input1Time - 1)/TB)[v1];[base][v0]overlay[tmp]; [tmp][v1]overlay,format=yuv420p[fv];
[0:a][1:a]acrossfade=d=1[fa]" -map [fv] -map [fa] -crf 23 -c:v libx264 -b:v 300K 
-preset slow outputvideo.mp4
ffmpeg-y-i-i
-过滤器\复合“颜色=黑色:输入1width x输入1height:d=(输入1time+输入2time-1)[base]
[0:v]设置值=PTS-STARTPTS[v0];[1:v]刻度=iw*min(输入1Width/iw\\,输入1Height/ih):ih*min(输入1Width/iw\\,输入1Height/ih),
pad=input1Width:input1Height:(input1Width iw*min(input1Width/iw\\,input1Height/ih))/2:(input1Height-
ih*min(输入1width/iw\\,输入1height/ih))/2,设定值=1:1,格式=yuva420p,淡入度=st=0:d=1.0:alpha=1,
setpts=PTS-STARTPTS+((input1Time-1)/TB)[v1];[base][v0]覆盖[tmp];[tmp][v1]覆盖,格式=yuv420p[fv];
[0:a][1:a]acrossflade=d=1[fa]“-map[fv]-map[fa]-crf 23-c:v libx264-b:v 300K
-预设慢速输出video.mp4
此处:input1Width-输入1视频的宽度,input1Height-输入2视频的高度

有趣的是,直接在终端上运行这个命令会生成一个在媒体播放器上正确播放的文件,我可以在包括WhatsApp在内的平台上共享它

然而,当从java代码触发相同的命令时,在大小、比特率方面会产生类似的文件(与直接执行时产生的文件几乎相同)。我使用ProcessBuilder从java运行相同的命令,如:

ProcessBulider stitchVideoCommandArray = new ProcessBuilder(
                        "ffmpeg", "-y",
                        "-i", <input1>,
                        "-i", <input2>,
                        "-filter_complex", "color=black:" + String.valueOf(width) + "x" + String.valueOf(height) + ":d=" +
                        String.valueOf(originalVideoTime + ASSET_VIDEOSTREAM_DURATION - CROSS_FADE_TIME_DURATION) + "[base];" +
                        "[0:v]setpts=PTS-STARTPTS[v0];[1:v]scale=iw*" + String.valueOf(minMultiplicable) + ":ih*" + String.valueOf(minMultiplicable) +
                        ",pad=" + String.valueOf(width) + ":" + String.valueOf(height) + ":(" + String.valueOf(width) + "-iw*" + String.valueOf(minMultiplicable) + "/2" +
                        "):(" + String.valueOf(height) + "-ih*" + String.valueOf(minMultiplicable) + "/2)" + ",fade=in" +
                        ":st=0:d=" + String.valueOf(CROSS_FADE_TIME_DURATION) + ":alpha=1,setpts=PTS-STARTPTS+((" + String.valueOf(originalVideoTime - CROSS_FADE_TIME_DURATION) +
                        ")/TB)[v1];[base][v0]overlay[tmp];[tmp][v1]overlay,format=yuv420p[fv];[0:a][1:a]acrossfade=d=1[fa]",
                        "-map", "[fv]",
                        "-map", "[fa]",
                        "-c:v", MP4Transcode.MP4VideoStreamEncoder.H264.videoEncoders,
                        "-b:v", "300K",
                        "-c:a", MP4Transcode.MP4AudioStreamEncoders.AAC.audioEncoders,
                        "-b:a", "128K",
                        "-crf", String.valueOf(constantRateFactor),
                        "-preset", presetRequired,
                    outputVideoPath
            );
ProcessBulider-stitchVideoCommandArray=新建ProcessBuilder(
“ffmpeg”、“-y”,
“-我”,
“-我”,
“-filter_complex”,“color=black:”+String.valueOf(width)+“x”+String.valueOf(height)+“:d=”+
String.valueOf(originalVideoTime+ASSET\u VIDEOSTREAM\u DURATION-CROSS\u FADE\u TIME\u DURATION)+“[base];”+
“[0:v]setpts=PTS-STARTPTS[v0];[1:v]scale=iw*”+String.valueOf(minmultipleable)+“:ih*”+String.valueOf(minmultipleable)+
“,pad=“+String.valueOf(width)+”:“+String.valueOf(height)+”:(“+String.valueOf(width)+”-iw*“+String.valueOf(minmultiplicatable)+”/2”+
“:”(“+String.valueOf(height)+“-ih*”+String.valueOf(minmultiplicatable)+“/2)”+”,淡入淡入”+
“:st=0:d=“+String.valueOf(交叉淡入淡出时间持续时间)+”:alpha=1,setpts=PTS-STARTPTS+(“+String.valueOf(原始视频时间-交叉淡出时间持续时间))+
”)/TB)[v1];[base][v0]overlay[tmp];[tmp][v1]overlay,format=yuv420p[fv];[0:a][1:a]acrossflade=d=1[fa]”,
“-map”、“[fv]”,
“-map”、“[fa]”,
“-c:v”,MP4Transcode.MP4VideoStreamEncoder.H264.VideoEncoder,
“-b:v”,“300K”,
“-c:a”,MP4Transcode.MP4AudioStreamEncoders.AAC.audioEncoders,
“-b:a”,“128K”,
“-crf”,字符串.valueOf(constantRateFactor),
“预设”,需要预设,
输出视频路径
);
然后我使用这个对象执行命令,使用

command.start()命令

并使用

command.waitFor()命令

这也产生了一个文件,我可以在媒体播放器上正确播放,但在WhatsApp上分享视频时没有成功

此外,通过执行上述来自java的FFmpeg命令生成的文件生成的媒体文件的响度略有增加

我无法确定是视频问题还是其他问题。这只发生在少数随机视频上

以下是有关该问题的视频链接: 输入1- 输入2-

编辑1:
要添加,在java命令中添加
-logleveldebug
需要花费很长时间,我甚至有5-6分钟没有看到它响应。但是,直接从终端使用它在处理后会很快返回。

如果视频的音频流使用EBU R.128过滤器进行规范化,WhatsApp似乎无法处理这样的视频。只有在这种情况下,发送才会失败。在我的例子中,其中一个输入视频具有EBU R.128标准化

可能不是您的问题,但您可能希望确保您没有与“moov atom”相关的问题,因为“moov atom”不在输出的开头。在diff-tack、ffprobe或仅仅查询带有“ffmpeg-i badfile”的坏文件时,应该会显示出一些问题。whatsapp是否发布了允许的格式/编码列表?恐怕我还没有看到任何已发布的允许格式/编码列表。然而,很少有人尝试过各种格式的链接,如:。我尝试使用qtfaststartpythonscript将
moovatom
移动到输出的开头。但是,这段视频仍然没有被分享。youtube上传怎么办。使用“好”和“坏”文件的结果有什么不同吗?我可以在youtube、facebook和Instagram上分享我的“好”和“坏”文件。然而,我的“坏”视频只有在WhatsApp上共享时才会失败。