本帖最后由 苏紫方璇 于 2024-6-24 11:52 编辑
某网站故弄玄虚,下载后一个为视频 [00].mp4, 一个为音频[01].mp4,懂得都懂,不多赘述和评价。下面做了一个小python程序,完成整个目录下面将音频和视频合并为一个可以自由播放的视频。
原理大概如下:将当前目录下的所有"[00].mpg"结尾的文件和所有"[01].mpg"结尾的文件,执行一下操作。 举例 aa[00].mpg 和 aa[01].mpg文件: 执行 ffmpeg.exe -i aa[00].mpg -i aa[01].mpg -acodec copy -bcodec copy aa.mpg。
代码如下
注意:
在这个脚本中,我使用了正则表达式来匹配和构建文件名对。
我假设了ffmpeg.exe在系统路径中。如果不是这样,你需要在ffmpeg_cmd列表中提供ffmpeg.exe的完整路径。
脚本使用subprocess.run()来执行ffmpeg命令,并检查是否有任何错误发生(通过check=True)。
脚本将输出文件命名为与输入文件的基本名称相同,但扩展名为.mpg(去除了[00]或[01])。
[Python] 纯文本查看 复制代码 import os
import subprocess
import re
def find_file_pairs(directory, pattern1, pattern2):
pairs = []
for filename in os.listdir(directory):
if re.match(pattern1, filename):
base_name = re.sub(pattern1, '', filename)
pair_file = base_name + pattern2
if os.path.exists(os.path.join(directory, pair_file)):
pairs.append((filename, pair_file))
return pairs
def execute_ffmpeg(input_files, output_file):
\# 这里假设ffmpeg.exe在系统路径中,否则需要提供完整路径
ffmpeg_cmd = ["ffmpeg", "-i", input_files[0], "-i", input_files[1], "-acodec", "copy", "-vcodec", "copy", output_file]
subprocess.run(ffmpeg_cmd, check=True)
def main():
current_directory = os.getcwd() # 获取当前目录
pattern1 = r'.*\[00\].mpg' \# 匹配[00].mpg结尾的文件
pattern2 = r'\1\[01\].mpg' \# 匹配与第一个文件名除了[00]替换为[01]外的文件
file_pairs = find_file_pairs(current_directory, pattern1, pattern2)
for pair in file_pairs:
base_name = os.path.splitext(pair[0])[0] \# 去掉扩展名以获取基本文件名
output_file = base_name + '.mpg' \# 输出文件名
input_files = [os.path.join(current_directory, f) for f in pair]
execute_ffmpeg(input_files, os.path.join(current_directory, output_file))
if __name__ == "__main__":
main()
|