ffmpeg吧 关注:1,291贴子:4,645
  • 3回复贴,共1

来个大佬纠正一下脚本哦。。

取消只看楼主收藏回复

我想把文件夹里面mp4文件转换成mkv文件。然后用mp4里面的右声道作为第一音轨,左声道作为第二音轨。。但是老是不成功。。搞不懂。。来个大哥纠正一下哦。。看下面。。
# FFmpeg命令:转换音频声道顺序并复制视频
command = [
'ffmpeg',
'-i', input_path, # 输入文件
'-c:v', 'copy', # 视频流直接复制
'-map', '0:v:0', # 映射第一个视频流
'-map', '0:a:0', # 映射第一个音频流
'-map', '0:a:0', # 再次映射第一个音频流
'-c:a', 'aac', # 音频编码格式(可以根据需要调整)
'-ac', '2', # 音频声道数(单声道)
'-channel_layout', 'stereo',
'-af', 'pan=stereo|c0=c1|c1=c0', # 调整声道顺序(右->左,左->右)
output_path # 输出文件
这样搞出来两个音轨都是左声道的。。不管怎么修改c0=c1|c1=c0 这个,反正两个音轨都一样。。要不就两个都是左声道,要不两个都是右声道。。完全误解。。ai也是搞不好。。


IP属地:广东1楼2025-03-10 22:58回复
    有人指点一下么?


    IP属地:广东来自Android客户端2楼2025-03-10 23:04
    回复
      这样转换视频文件实在太快了,已经不能回到使用格式工厂的那些日子了


      IP属地:广东来自Android客户端3楼2025-03-10 23:05
      回复
        import os
        import subprocess
        import shutil
        def convert_videos(input_folder, output_folder):
        # 检查输入文件夹是否存在
        if not os.path.exists(input_folder):
        print(f"输入文件夹不存在: {input_folder}")
        return
        # 创建输出文件夹(如果不存在)
        os.makedirs(output_folder, exist_ok=True)
        # 遍历输入文件夹中的所有文件
        for filename in os.listdir(input_folder):
        input_path = os.path.join(input_folder, filename)
        # 检查是否是文件
        if os.path.isfile(input_path):
        # 获取文件扩展名
        file_ext = os.path.splitext(filename)[1].lower()
        # 检查是否是视频文件(可以根据需要扩展支持的格式)
        if file_ext in ['.mp4', '.avi', '.mov', '.mkv', '.flv', '.wmv']:
        # 构造输出文件路径
        base_name = os.path.splitext(filename)[0]
        output_path = os.path.join(output_folder, f"{base_name}.mkv")
        # FFmpeg命令:转换音频声道顺序并复制视频
        command = [
        'ffmpeg',
        '-i', input_path, # 输入文件
        '-c:v', 'copy', # 视频流直接复制
        '-map', '0:v:0', # 映射第一个视频流
        '-map', '0:a:0', # 映射第一个音频流
        '-map', '0:a:0', # 再次映射第一个音频流
        '-c:a', 'aac', # 音频编码格式(可以根据需要调整)
        '-ac', '2', # 音频声道数(立体声)
        '-filter_complex', '"[0:a]channelsplit=channel_layout=stereo[left][right]"', # 调整声道顺序(右->左,左->右)
        output_path # 输出文件
        ]
        # 执行FFmpeg命令
        print(f"正在转换: {filename}")
        try:
        subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        print(f"转换完成: {output_path}")
        except subprocess.CalledProcessError as e:
        print(f"转换失败: {filename}")
        print(f"错误信息: {e.stderr.decode()}")
        if __name__ == "__main__":
        # 输入和输出文件夹路径
        input_folder = "E:\\input" # 替换为你的输入文件夹路径
        output_folder = "E:\\output" # 替换为你的输出文件夹路径
        # 调用转换函数
        convert_videos(input_folder, output_folder)


        IP属地:广东5楼2025-03-11 00:26
        收起回复