python --Batch dimensiona o tamanho da imagem (vídeo)

método um:

No Pillow, o método resize() forçará a imagem a ser dimensionada para o tamanho especificado, o que pode causar deformação ou distorção da imagem; enquanto o método thumbnail() irá reduzir a imagem, mantendo a proporção original sem deformação ou distorção.

Especificamente, o método thumbnail() calculará uma proporção de escala apropriada com base na largura e altura máximas especificadas e, em seguida, reduzirá a imagem de acordo com essa proporção, para que a largura e a altura da imagem final não excedam o tamanho especificado. O método resize() redimensiona diretamente a imagem para o tamanho especificado. Se o tamanho especificado for diferente da proporção da imagem original, ela será deformada ou distorcida.

Portanto, se você quiser manter a proporção original da imagem e reduzi-la, é recomendado usar o método thumbnail(); se você precisar forçar a escala da imagem para um tamanho especificado, você pode usar o redimensionamento (), mas esteja ciente de que ele pode causar distorção ou deformação.

from PIL import Image
import os

dir = r'C:\Users\1\Desktop\ffmpeg\bin\final_results'
out = r'C:\Users\1\Desktop\ffmpeg\bin\results'
def resize_image():
    for path in os.listdir(dir):
        img = os.path.join(dir, path)
        print(f'缩放图:【{img}】')
        with Image.open(img) as img:
            img.thumbnail((1280, 720))
            img.save(os.path.join(out, path))

# 调用示例
resize_image()

Método dois

import cv2

def resize_image(input_path, output_path, size):
	img = cv2.imread(input_path)
	height, width, _ = img.shape
	if width > height:
		scale = size / width
	else:
		scale = size / height
		img = cv2.resize(img, (int(width * scale), int(height * scale)))
		cv2.imwrite(output_path, img)
	
	# 调用示例
input_path = 'input.jpg'
output_path = 'output.jpg'
size = 640 # 宽度或高度为 640
resize_image(input_path, output_path, size)

Neste código de exemplo, a função resize_image recebe três parâmetros: caminho do arquivo de entrada input_path, caminho do arquivo de saída output_path e tamanho do tamanho de destino. Dentro da função, primeiro use a função cv2.imread para ler o arquivo de entrada e use a propriedade shape para obter a largura e a altura da imagem. Em seguida, calcule a taxa de zoom de acordo com a relação de tamanho entre a largura e a altura. Finalmente, use a função cv2.resize para dimensionar a imagem para o tamanho especificado e use a função cv2.imwrite para salvar a imagem dimensionada no arquivo de saída.

Deve-se observar que o uso da biblioteca OpenCV pode exigir a instalação primeiro de dependências relacionadas, e o método de instalação específico pode ser encontrado em documentos relevantes. Além disso, ao usar a biblioteca OpenCV para dimensionar imagens, deve-se tomar cuidado para manter a proporção e evitar distorções ou distorções. Especificamente, de acordo com a relação de aspecto da imagem, a relação de escala pode ser calculada e a imagem pode ser reduzida para um tamanho apropriado.

método três

from PIL import Image

def resize_image(input_path, output_path, max_size):
    img = Image.open(input_path)
    width, height = img.size
    if max(width, height) > max_size:
        if width > height:
            new_width = max_size
            new_height = int(height * (max_size / width))
    else:
        new_width = int(width * (max_size / height))
        new_height = max_size
        img = img.resize((new_width, new_height))
        img.save(output_path)

# 调用示例
input_path = 'input.jpg'
output_path = 'output.jpg'
max_size = 640 # 最大边长为 640
resize_image(input_path, output_path, max_size)

Neste código de exemplo, a função resize_image recebe três parâmetros: o caminho do arquivo de entrada input_path, o caminho do arquivo de saída output_path e o comprimento lateral máximo max_size. Dentro da função, primeiro use a função Image.open para ler o arquivo de entrada e use a propriedade size para obter a largura e a altura da imagem. Em seguida, calcule a taxa de zoom com base na relação entre o comprimento lateral máximo e o tamanho da imagem. Finalmente, use a função de redimensionamento para dimensionar a imagem para o tamanho especificado e use a função salvar para salvar a imagem dimensionada no arquivo de saída.

Deve-se observar que ao utilizar o método de redimensionamento da biblioteca Pillow, você também deve prestar atenção em manter a proporção da imagem para evitar deformação ou distorção. Especificamente, de acordo com a relação de aspecto da imagem, a relação de escala pode ser calculada e a imagem pode ser reduzida para um tamanho apropriado.

Método 3 (FFmpeg)

O formato do comando para dimensionar o tamanho do vídeo usando ffmpeg é o seguinte:

ffmpeg -i input.mp4 -vf scale=: output.mp4

Entre eles, representam respectivamente a largura e a altura do vídeo ampliado, que pode ser especificado como um valor de pixel específico ou uma porcentagem, como 50%.

input.mp4Por exemplo, para dimensionar um arquivo de vídeo de entrada para um arquivo de vídeo de saída com largura de 640 pixels e altura de 360 ​​pixels output.mp4, o seguinte comando pode ser usado:

ffmpeg -i input.mp4 -vf scale=640:360 output.mp4

Se quiser dimensionar automaticamente de acordo com a proporção do vídeo original, você pode especificar apenas a largura ou a altura e manter a proporção do vídeo original:

# 指定宽度为 640 像素,高度按原始比例缩放
ffmpeg -i input.mp4 -vf scale=640:-1 output.mp4

# 指定高度为 360 像素,宽度按原始比例缩放
ffmpeg -i input.mp4 -vf scale=-1:360 output.mp4

Você também pode permitir que o ffmpeg preserve a proporção do vídeo original durante o dimensionamento para evitar distorção, scaleadicionando opções antes do parâmetro :force_original_aspect_ratio

ffmpeg -i input.mp4 -vf "scale=640:360:force_original_aspect_ratio=decrease,pad=640:360:(ow-iw)/2:(oh-ih)/2" output.mp4

Neste exemplo, pado filtro é usado para preencher o vídeo dimensionado para um tamanho de 640x360 pixels enquanto o centraliza.

Acho que você gosta

Origin blog.csdn.net/weixin_44634704/article/details/129713362
Recomendado
Clasificación