Deepseek批量调整视频的默认音频声道

火山方舟向量数据库大模型

文件夹中有多个视频文件,默认音频声道为俄语,想调整成英语:

picture.image

picture.image

先安装 MKVToolNix软件,然后使用 mkvinfo 工具来查看 .mkv 文件的音轨信息,在命令行中输入命令:

mkvinfo "F:\aivideo\The Legend of Tarzan - 16 - Tarzan and the Leopard Men Rebellion.mkv"

picture.image

来查看轨道信息:

  • EBML 头

|+ EBML 版本: 1

|+ EBML 读取版本: 1

|+ EBML ID 最大长度: 4

|+ EBML 大小最大长度: 8

|+ 文档类型: matroska

|+ 文档类型版本: 4

|+ 文档类型读取版本: 2

  • 剪辑: 大小 556452947

|+ 定位头 (子条目将被跳过)

|+ EBML void: 大小 4027

|+ 剪辑信息

| + 时间戳缩放: 1000000

| + 混流应用程序: libebml v1.4.5 + libmatroska v1.7.1

| + 写入应用程序: mkvmerge v88.0 ('All I Know') 64-bit

| + 时长: 00:21:46.400000000

| + 日期: 2024-11-21 02:52:45 UTC

| + 标题: The Legend of Tarzan [1x06] HDTV 720p x264 [Source: ThV, Encode: GD]

| + 剪辑 UID: 0x44 0x0d 0x7e 0xac 0xb1 0xd5 0x00 0x8d 0x02 0x45 0x91 0x76 0xda 0xba 0xf2 0xf2

|+ 轨道

| + 轨道

| + 轨道编号: 1 (mkvmerge & mkvextract 的轨道 ID: 0)

| + 轨道 UID: 1

| + 轨道类型: 视频

| + 「紧缩」 标记: 0

| + 语言: und

| + 编码格式 ID: V_MPEG4/ISO/AVC

| + 编解码器私有数据: 大小 42 (H.264 档次: High @L4.0)

| + 默认帧时长: 00:00:00.040000000 (对应视频轨的 25.000 帧/场每秒)

| + 语言 (IETF BCP 47): und

| + 视频轨道

| + 像素宽度: 1280

| + 像素高度: 720

| + 显示宽度: 1280

| + 显示高度: 720

| + 轨道

| + 轨道编号: 2 (mkvmerge & mkvextract 的轨道 ID: 1)

| + 轨道 UID: 782399382

| + 轨道类型: 音频

| + 「默认轨」 标记: 0

| + 语言: rus

| + 编码格式 ID: A_AC3

| + 默认帧时长: 00:00:00.032000000 (对应视频轨的 31.250 帧/场每秒)

| + 语言 (IETF BCP 47): ru

| + 名称: 俄语

| + 音频轨

| + 采样率: 48000

| + 声道数: 2

| + 轨道

| + 轨道编号: 3 (mkvmerge & mkvextract 的轨道 ID: 2)

| + 轨道 UID: 2887079607

| + 轨道类型: 音频

| + 「默认轨」 标记: 0

| + 语言: und

| + 编码格式 ID: A_AC3

| + 默认帧时长: 00:00:00.032000000 (对应视频轨的 31.250 帧/场每秒)

| + 语言 (IETF BCP 47): und

| + 名称: 原始语言

| + 音频轨

| + 采样率: 48000

| + 声道数: 2

|+ EBML void: 大小 1133

|+ 簇

在deepseek中输入提示词:

你是一个Python编程专家,完成如下任务:

读取这个文件夹中所有的mkv视频文件:“F:\aivideo”

根据 mkvinfo 输出,mkv视频文件中有三个轨道:

视频轨道(轨道编号 1)

音频轨道 1(轨道编号 2,AC3 格式,俄语)

音频轨道 2(轨道编号 3,AAC 格式,原始语言)

将默认音轨从音频轨道 1(轨道编号 2)调整为音频轨道 2(轨道编号 3)。

索引从 0 开始,所以 --default-track 1 对应音频轨道 1, --default-track 2 对应音频轨道 2,

"--default-track", "1:no", # 禁用音频轨道 1的默认音轨

"--default-track", "2:yes", # 启用音频轨道2的默认音轨

注意:每一步都要输出信息到屏幕上

mkvmerge 工具的路径为:D:\Program Files\MKVToolNix\mkvmerge.exe

subprocess.run 在读取 mkvmerge 的输出时,默认使用 gbk 编码解码,但输出中包含无法解码的字节。我们可以通过指定 encoding='utf-8' 来解决这个问题。

源代码:

import os

import subprocess

定义文件夹路径和mkvmerge工具的路径

folder_path = r"F:\aivideo"

mkvmerge_path = r"D:\Program Files\MKVToolNix\mkvmerge.exe"

获取文件夹中的所有MKV文件

mkv_files = [f for f in os.listdir(folder_path) if f.endswith('.mkv')]

输出信息

print(f"Found {len(mkv_files)} MKV files in the folder.")

遍历每个MKV文件

for mkv_file in mkv_files:

file_path = os.path.join(folder_path, mkv_file)

print(f"Processing file: {file_path}")

构建mkvmerge命令

command = [

mkvmerge_path,

"--output", file_path + ".tmp", # 输出到临时文件

"--default-track", "1:no", # 禁用轨道2的默认音轨

"--default-track", "2:yes", # 启用轨道3的默认音轨

file_path

]

输出命令信息

print(f"Running command: {' '.join(command)}")

执行命令

result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, encoding='utf-8')

输出执行结果

print(result.stdout)

print(result.stderr)

检查命令是否成功

if result.returncode == 0:

删除原文件

os.remove(file_path)

重命名临时文件为原文件名

os.rename(file_path + ".tmp", file_path)

print(f"Successfully processed file: {file_path}")

else:

print(f"Failed to process file: {file_path}")

print("All files processed.")

picture.image

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论