FFMPEG 导出的视频全黑

0 投票
1 回答
57 浏览
提问于 2025-04-14 18:14

我正在尝试使用ffmpeg生成一个包含4个视频的视频墙,效果像下面的图片。

这里插入图片描述

我执行了下面的脚本来达到想要的效果。

def merge_videos(output_file):
    command = [
        'path_to_ffmpeg/ffmpeg.exe',
        '-i', 'path/playblasts/front.mp4',
        '-i', 'path/playblasts/side.mp4',
        '-i', 'path/playblasts/persp1.mp4',
        '-i', 'path/playblasts/persp2.mp4',
        '-filter_complex', '[0:v][1:v][2:v][3:v]xstack=inputs=4:layout=0_0|w0_0|0_h0|w0_h0[v]',
        '-map', '[v]',
        output_file
    ]
    subprocess.run(command)

我在传递输出文件路径作为参数,但得到的结果却是下面这样的。

这里插入图片描述

如果有人能帮忙就太好了。谢谢!

1 个回答

1

我用你提供的脚本(ffmpeg 6.1.1)成功得到了想要的结果,所以这个Python脚本和给定的ffmpeg参数是没问题的。问题可能出在你输入的视频文件和/或你的设置上,所以你需要在自己的机器上进一步调查。以下是一些可能有帮助的建议:

  • 一般来说,当你在调试涉及多个组件的问题时(比如Python、ffmpeg、编码器、解码器、你的视频播放器等),尽量将问题隔离开来会更有效。你是在Python中运行ffmpeg。如果你直接在命令行中运行ffmpeg时问题依然存在,那就不是Python的问题了,这样就省心多了 :) 如果任何输入视频都出现问题,那就不是输入文件的问题,等等。
  • 首先检查你的ffmpeg版本,如果需要的话更新一下。可能之前的某个bug已经修复了。
  • 可能是播放器兼容性的问题。试着通过在输出前加上 -r 10 来强制设置输出帧率(注意顺序,ffmpeg对顺序很讲究),因为有些播放器处理太低的帧率会有问题。你还可以试试 -pix_fmt yuv420p,并用 -vf scale=1920:-2缩小视频(输出分辨率可能太高了)。这个方法对其他人有帮助
  • 注意ffmpeg输出中的警告和错误,尝试搜索这些信息。
  • 试试其他编码器,比如libx265、libvpx-vp9等。如果这样能解决问题,但编码速度太慢,而你更看重编码速度而不是每比特的感知质量,可以看看你是否有硬件编码器可用,比如hevc_nvenc。

希望这些建议能帮到你!

撰写回答