我正在尝试自动化从一千多个视频中删除所有音频的过程。 因为这个过程是重复性的,而且像 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 论证。 同样的问题。 我尝试更改线数,更改预设,但都没有解决颜色问题。
我希望获取原始视频,删除所有音频,并获得完全相同的视频,但其中没有音频。
音频已成功删除,但降低了视频色彩质量。 差异是显而易见的。 就好像原作的丰富色彩在没有音频的视频中消失了。 虽然还有一些颜色,但是就像被洗掉了一样。
我认为这是因为您同时删除了音频并重新编码。 您可以直接从终端使用
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% 的完整性。