Python moviepy 在导出时破坏视频颜色

问题描述 投票:0回答:1

我正在尝试自动化从一千多个视频中删除所有音频的过程。 因为这个过程是重复性的,而且像 Adobe Premier Rush 这样的软件要求我每次都必须手动将它们静音。 由于静音(或删除音频)的操作是重复进行的。 我知道这完全可以由计算机完成。

问题是我正在使用Python的moviepy来尝试自动化该过程并减轻工作量。 我用函数来消除声音。 问题是,当我使用函数编写新视频时,我查看了测试视频。 颜色与原件不符。 输出的视频看起来已经饱和了。

我尝试了不同的编解码器,但它们没有解决问题。 视频格式为MOV。

原色 导出后的颜色

我只包含了部分视频,因为这是机密,所以我无法透露它是什么。

我写的代码是:

from os import listdir
from os.path import isfile, join
from moviepy.editor import VideoFileClip

source_path = '...' # source path where the original video files is
dest_path = '...' # destination path where I want the videos without audio to go and retain the same color as the original

onlyfiles = [f for f in listdir(source_path) if isfile(join(source_path, f))]

# We need to test to verify that it will work.
# Use testing folders for it.
for file in onlyfiles:
    videoclip = VideoFileClip(join(source_path, file))
    new_clip = videoclip.without_audio()
    new_clip.write_videofile(join(dest_path, file), codec="libx264")

我尝试过使用不同的 MPEG4,同样的问题。 MOV 使用的是 LIBX264。 我尝试用谷歌搜索如何修复颜色。 我尝试使用色彩空间参数,但编写视频的功能没有这个功能。 我尝试了 colorsys 论证。 同样的问题。 我尝试更改线数,更改预设,但都没有解决颜色问题。

我希望获取原始视频,删除所有音频,并获得完全相同的视频,但其中没有音频。

音频已成功删除,但降低了视频色彩质量。 差异是显而易见的。 就好像原作的丰富色彩在没有音频的视频中消失了。 虽然还有一些颜色,但是就像被洗掉了一样。

python video-processing moviepy
1个回答
0
投票

我认为这是因为您同时删除了音频并重新编码。 您可以直接从终端使用

ffmpeg
,它会更快并且根本不会影响视频:

for file in *.mov; do ffmpeg -i "$file" -c copy -an "noaudio_$file"; done

如果你真的想用 python 来实现,你可以使用脚本的修改:

import os
import ffmpeg

source_path = 'vids'  # path where the original video files are located
dest_path = 'done'  # path where you want to save the videos without audio

onlyfiles = [f for f in os.listdir(source_path) if os.path.isfile(os.path.join(source_path, f))]

for file in onlyfiles:
    input_file = os.path.join(source_path, file)
    output_file = os.path.join(dest_path, file)

    # Use ffmpeg-python to remove audio and copy video without re-encoding
    (
        ffmpeg
        .input(input_file)
        .output(output_file, an=None, c='copy', map_metadata=0)  # Remove audio, copy video, keep metadata
        .run(overwrite_output=True)  # Automatically overwrite if file exists
    )

通过这两种解决方案,我能够保持 MOV 视频 100% 的完整性。

© www.soinside.com 2019 - 2024. All rights reserved.