对于 FFMPEG,‘force_style’ 是否与‘subtitles=video.mkv’ 一起使用?

对于 FFMPEG,‘force_style’ 是否与‘subtitles=video.mkv’ 一起使用?

我正在使用此脚本对整个文件夹的刻录字幕进行编码:

for filepath in newFiles:
    video = os.path.basename(filepath)
    videoName = os.path.splitext(video)[0]
    newFile = '%s.mp4' % videoName
    i = filepath
    o = os.path.join(destinationDirectory, newFile)
    if os.path.isfile(o):
        continue
    encodeCommand = f'ffmpeg -i "{i}" -vf "scale=-2:480, subtitles="{video}":force_style='PrimaryColour=&H0300FFFF&'" -c:v libx264 -profile:v baseline -level 3.0 -preset fast -crf 23 -pix_fmt yuv420p "{o}"'
    print('Encoding %s' % newFile)
    encode = os.popen(encodeCommand).read()

但是,force_style='PrimaryColour=&H0300FFFF&'不起作用,只是保持原始文件中内置的字幕不变。我之所以使用,subtitles="{video}"是因为它使用了视频文件中保存的字幕。'force_style'只有当我提供单独的字幕文件时才有效?

我尝试了多种引号组合来查看问题是否出在这里,但脚本却无法运行。这个脚本仍然运行,只是没有改变字幕的颜色。

编辑:突然它不运行了。说 PrimaryColour 是无效语法。我没有做任何更改

答案1

问题出在 f 字符串上。它用单引号打开和关闭,因此里面的任何单引号都会导致语法问题。它用三重引号打开和关闭,因此单引号可用于样式设置。

encodeCommand = f'''ffmpeg -i "{i}" -vf "scale=-2:480,subtitles={video}:force_style='PrimaryColour=&H0300FFFF&,MarginV=50'" -c:v libx264 -profile:v baseline -level 3.0 -preset fast -crf 23 -pix_fmt yuv420p "{o}"'''

相关内容