FFMPEG 导出的视频全黑
我正在尝试使用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。
希望这些建议能帮到你!