ffmpeg -i 4k_360_square.jpg -vf "pad=3840:2160:0:120:black" 4k_360_square_.jpg
ffmpeg -i input.jpg -vf "scale=640:-1" output.jpg
ffmpeg -i output.png -q:v 2 output.jpg
import os
import subprocess
import shutil
import sys
def convert_png_to_jpg(input_dir, output_dir, quality=2):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for filename in os.listdir(input_dir):
if filename.lower().endswith(".png"):
input_path = os.path.join(input_dir, filename)
output_filename = os.path.splitext(filename)[0] + ".jpg"
output_path = os.path.join(output_dir, output_filename)
cmd = [
"ffmpeg",
"-i", input_path,
"-q:v", str(quality),
output_path
]
print(f"Converting {filename} to {output_filename}")
try:
subprocess.run(cmd, check=True)
except subprocess.CalledProcessError as e:
print(f"Error converting {filename}: {e}")
def move_jpg_and_delete_png(input_dir, output_dir):
# 移动所有 jpg 文件到 input_dir
for filename in os.listdir(output_dir):
if filename.lower().endswith(".jpg"):
src = os.path.join(output_dir, filename)
dst = os.path.join(input_dir, filename)
print(f"Moving {filename} back to input directory...")
shutil.move(src, dst)
# 删除 input_dir 中的所有 png 文件
for filename in os.listdir(input_dir):
if filename.lower().endswith(".png"):
file_path = os.path.join(input_dir, filename)
print(f"Deleting {filename}")
os.remove(file_path)
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage: python convert.py ")
sys.exit(1)
input_directory = sys.argv[1]
output_directory = sys.argv[2]
if not os.path.isdir(input_directory):
print(f"Error: Input directory '{input_directory}' does not exist.")
sys.exit(1)
print("Starting PNG to JPG conversion...")
convert_png_to_jpg(input_directory, output_directory)
print("\nOptions:")
print("Enter 1 to: Move all converted JPGs back to input folder and delete original PNGs")
choice = input("Do you want to proceed? (Enter 1 or any other key to skip): ")
if choice.strip() == "1":
move_jpg_and_delete_png(input_directory, output_directory)
print("\nOperation completed.")
else:
print("\nSkipped moving and deleting files.")
print("\nAll done.")
ffmpeg -i input.jpg -vf "transpose=1" output.jpg
import os
import subprocess
import shutil
import sys
# 支持的图像格式列表
SUPPORTED_EXTENSIONS = ('.png', '.jpg', '.jpeg', '.bmp', '.tiff', '.gif')
def rotate_images(input_dir, output_dir, clockwise=True):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 设置旋转角度:顺时针 90 度
rotation_angle = "transpose=1"
for filename in os.listdir(input_dir):
if filename.lower().endswith(SUPPORTED_EXTENSIONS):
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir, filename)
cmd = [
"ffmpeg",
"-i", input_path,
"-vf", rotation_angle,
"-q:v", "2", # 保持高质量
"-y", # 自动覆盖已有文件
output_path
]
print(f"Rotating {filename}...")
try:
subprocess.run(cmd, check=True)
except subprocess.CalledProcessError as e:
print(f"Error rotating {filename}: {e}")
def move_rotated_back(input_dir, output_dir):
# 将旋转后的图片移回原目录(覆盖)
for filename in os.listdir(output_dir):
if filename.lower().endswith(SUPPORTED_EXTENSIONS):
src = os.path.join(output_dir, filename)
dst = os.path.join(input_dir, filename)
print(f"Moving and replacing: {filename}")
shutil.move(src, dst)
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage: python rotate.py ")
sys.exit(1)
input_directory = sys.argv[1]
output_directory = sys.argv[2]
if not os.path.isdir(input_directory):
print(f"Error: Input directory '{input_directory}' does not exist.")
sys.exit(1)
print("Starting image rotation (90 degrees clockwise)...")
rotate_images(input_directory, output_directory)
# 判断是否为同一目录
input_abs = os.path.abspath(input_directory)
output_abs = os.path.abspath(output_directory)
if input_abs == output_abs:
print("\nInput and output directories are the same. Automatically replacing original images.")
move_rotated_back(input_directory, output_directory)
print("\nAll files have been replaced with rotated versions.")
else:
print("\nImages have been rotated and saved to the output directory.")
print(f"You can find them in: {output_directory}")
print("\nAll done.")
水平翻转
ffmpeg -i input.mp4 -vf "hflip" output.mp4
垂直翻转
ffmpeg -i input.mp4 -vf "vflip" output.mp4
顺时针旋转180度
ffmpeg -i input.mp4 -vf "hflip,vflip" output.mp4
ffmpeg -i input.mp4 -an -c:v copy output.mp4
ffmpeg -i input.mp4 -vf "scale=640:360" -c:a copy output.mp4
保证清晰度
ffmpeg -i input.mp4 -vf "scale=640:360:flags=lanczos" -c:v libx264 -preset slow -crf 18 -c:a copy output.mp4
ffmpeg -i 2025_5_28_12_00_d9_3f.mp4 -vf "scale=640:360" -c:v libx264 -an 2025_5_28_12_00_d9_3f_640_360.mp4
ffmpeg -i input.avi -vcodec libx264 -acodec aac output.mp4
-vcodec libx264:指定使用 H.264 视频编码器。
-acodec aac:指定使用 AAC 音频编码器。
生成的文件通常具有较高的兼容性,适用于大多数播放器和设备。
ffmpeg -i input.avi -an -vcodec libx264 output.mp4
ffmpeg -i input.avi -vcodec libx264 -crf 23 -preset medium -an output_without_audio.mp4
-i input.avi:指定输入的 AVI 文件。
-vcodec libx264:将视频编码为 H.264 格式(适合 MP4 文件)。
-crf 23:设置视频质量,23 是默认值,范围是 0(无损)到 51(最低质量),数值越小质量越高。
-preset medium:设置编码速度与压缩效率的平衡,medium 是默认值(可选值包括 ultrafast, fast, slow, veryslow 等)。
-an:移除音频流。
output_without_audio.mp4:指定输出的 MP4 文件名。
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "hstack" output.mp4