FFMPEG 将两个视频合并为一个并排相同质量的输出

Fil*_*rik 6 video ffmpeg

我已经在处理 3d 视频项目,但我遇到了问题,我需要将视频的左右通道并排合并。我已经阅读了一些关于这个问题的博客,我得到了这个代码:

ffmpeg -i avatar35l.avi -vf "movie=avatar35r.avi [in1]; [in]pad=1920*2:1080[in0]; [in0][in1] overlay=1920:0 [out]" avatar35sbs.avi
Run Code Online (Sandbox Code Playgroud)

它有效,但我的质量损失很大,我需要与输入视频相同的输出视频质量,30fps,1080p,相同的长度,我是 ffmpeg 的新手,我需要一个具体的例子

有谁能够帮助我?

llo*_*gan 16

无损

如果您需要“与输入视频质量相同的输出视频质量”,则必须使用真正的无损格式。ffv1 使用hstack过滤器代替电影+pad+overlay 的示例:

ffmpeg -i left.avi -i right.avi -filter_complex hstack -c:v ffv1 output.avi
Run Code Online (Sandbox Code Playgroud)

FFmpeg 支持几种额外的无损压缩格式,例如:

  • 无损 H.264: -c:v libx264 -crf 0
  • 胡夫尤夫: -c:v huffyuv
  • 噗噗: -c:v ffvhuff
  • UT视频: -c:v utvideo
  • 当然还有无损未压缩格式,包括 rawvideo。

由于它是无损的,因此输出文件会很大,您的播放器或设备可能不喜欢它。

视觉无损

当然,您可能真正想要的是“有损,但'视觉上无损',但不是像真正无损提供的巨大的、巨大的文件”。在这种情况下使用:

ffmpeg -i left.avi -i right.avi -filter_complex "hstack,format=yuv420p" -c:v libx264 -crf 18 output.mp4
Run Code Online (Sandbox Code Playgroud)

你没有提到音频。如果您还想合并来自每个输入的音频,请使用amerge过滤器:

ffmpeg -i left.avi -i right.avi -filter_complex "[0:v][1:v]hstack,format=yuv420p[v];[0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -c:v libx264 -crf 18 -ac 2 output.mp4
Run Code Online (Sandbox Code Playgroud)

请参阅FFmpeg Wiki:H.264 视频编码