视频转换为8K60帧率

import tkinter as tk
from tkinter import filedialog, messagebox
import av
import os

def convert_video(input_file, output_file):
    # 打开输入视频流
    input_container = av.open(input_file)
    # 创建输出视频流
    output_container = av.open(output_file, 'w')

    # 添加视频流并设置参数
    video_stream = output_container.add_stream('h264', rate=60)
    video_stream.height = 4320
    video_stream.width = 7680
    video_stream.pix_fmt = 'yuv420p'

    # 添加音频流
    audio_stream = None
    for stream in input_container.streams:
        if stream.type == 'audio':
            audio_stream = output_container.add_stream('aac', rate=stream.rate)
            audio_stream.channels = stream.channels
            break

    # 逐帧处理视频
    for frame in input_container.decode(video=0):
        # 调整大小为8K
        frame_resized = frame.reformat(width=7680, height=4320)

        # 写入到输出容器
        for packet in video_stream.encode(frame_resized):
            output_container.mux(packet)

    # 处理未写入的视频帧
    for packet in video_stream.encode():
        output_container.mux(packet)

    # 逐帧处理音频
    if audio_stream:
        for frame in input_container.decode(audio=0):
            # 将音频帧写入输出容器
            for packet in audio_stream.encode(frame):
                output_container.mux(packet)

        # 处理未写入的音频帧
        for packet in audio_stream.encode():
            output_container.mux(packet)

    # 关闭容器
    input_container.close()
    output_container.close()

    messagebox.showinfo("完成", "视频转换成功,已维持原视频时长!")

def open_file():
    input_file = filedialog.askopenfilename(
        title="选择输入视频",
        filetypes=(("MP4 文件", "*.mp4"), ("所有文件", "*.*"))
    )
    
    if input_file:
        # 获取输入文件的基础名称和扩展名
        base_name, ext = os.path.splitext(os.path.basename(input_file))
        # 创建新的输出文件名
        output_file = filedialog.asksaveasfilename(
            title="保存输出视频",
            defaultextension=".mp4",
            initialfile=f"{base_name}_8k_60fps{ext}",
            filetypes=(("MP4 文件", "*.mp4"), ("所有文件", "*.*"))
        )
        
        if output_file:
            convert_video(input_file, output_file)

# 创建主窗口
root = tk.Tk()
root.title("视频转换器")
root.geometry("300x150")

# 创建按钮以打开文件
btn_open = tk.Button(root, text="打开视频文件", command=open_file)
btn_open.pack(pady=20)

# 启动应用程序
root.mainloop()

首先,确保安装必要的库:

pip install av tkinter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值