8
n8n 中文网amn8n.com

自动化 YouTube Shorts 创建器,集成 yt-dlp 和 FFmpeg

高级

这是一个Content Creation领域的自动化工作流,包含 31 个节点。主要使用 Set, Code, Limit, Aggregate, HttpRequest 等节点。 自动化 YouTube Shorts 创建器,集成 yt-dlp 和 FFmpeg

前置要求
  • 可能需要目标 API 的认证凭证
  • Google Sheets API 凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "f965aebfd140e9f9297998c9d86b807083533e05b14fd5fa88588eb7d468d3f0",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "ac0f4816-72d3-4fb2-94bb-9999c3b1085b",
      "name": "当点击\"执行工作流\"时",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -880,
        480
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "371f3ef5-358c-48ba-b11e-712c1514767a",
      "name": "获取 YouTube 视频",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -656,
        480
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1195115445,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit#gid=1195115445",
          "cachedResultName": "Video Pool"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit?usp=drivesdk",
          "cachedResultName": "DaysOfDodo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "xrsd60RjEc5ycblT",
          "name": "dodoLife"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "5d688a6e-bfed-472c-83f6-72199972d5e6",
      "name": "限制_1",
      "type": "n8n-nodes-base.limit",
      "position": [
        -432,
        480
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "952af5ed-54d3-46d4-898b-f72c1dbf82ec",
      "name": "生成文件名",
      "type": "n8n-nodes-base.set",
      "position": [
        -208,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1b8917a0-7b13-46f3-9b5a-59dbe9d33e38",
              "name": "=File Name",
              "type": "string",
              "value": "={{ Array.from({ length: 10 }, () => Math.random().toString(36)[2]).join('') }}"
            },
            {
              "id": "3dd38945-c044-486b-9e0c-4a080b62a606",
              "name": "Folder Name",
              "type": "string",
              "value": "Video Footage"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f36527c6-014f-4cff-bdee-201c053bb1b7",
      "name": "下载视频素材",
      "type": "n8n-nodes-base.executeCommand",
      "position": [
        16,
        480
      ],
      "parameters": {
        "command": "=yt-dlp -o \"./{{ $('GenrateFileName').item.json['Folder Name'] }}/{{ $('GenrateFileName').item.json['File Name'] }}.mp4\" \"{{ $('GetYTvideo').item.json['Video Path'] }}\" -f \"bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best\""
      },
      "typeVersion": 1
    },
    {
      "id": "228c5416-3c28-4dae-a731-19c6f607e7e7",
      "name": "更新视频素材详情",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        240,
        480
      ],
      "parameters": {
        "columns": {
          "value": {
            "Status": "Success",
            "row_number": "={{ $('Limit_1').item.json.row_number }}",
            "Internal Path": "=./{{ $('GenrateFileName').item.json['Folder Name'] }}/{{ $('GenrateFileName').item.json['File Name'] }}.mp4"
          },
          "schema": [
            {
              "id": "Video Path",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Video Path",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal Path",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal Path",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1195115445,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit#gid=1195115445",
          "cachedResultName": "Video Pool"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit?usp=drivesdk",
          "cachedResultName": "DaysOfDodo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "xrsd60RjEc5ycblT",
          "name": "dodoLife"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "f37f7325-bb4c-40cf-aef1-d9a30ee281e3",
      "name": "获取 YouTube 音乐",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -656,
        704
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 871997350,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit#gid=871997350",
          "cachedResultName": "Music Pool"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit?usp=drivesdk",
          "cachedResultName": "DaysOfDodo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "xrsd60RjEc5ycblT",
          "name": "dodoLife"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "1fb675f8-238d-4309-8529-110be976894f",
      "name": "限制_01",
      "type": "n8n-nodes-base.limit",
      "position": [
        -432,
        704
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a4c35406-7cf2-49f9-8020-c10aaf471eab",
      "name": "生成文件名_01",
      "type": "n8n-nodes-base.set",
      "position": [
        -208,
        704
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1b8917a0-7b13-46f3-9b5a-59dbe9d33e38",
              "name": "=File Name",
              "type": "string",
              "value": "={{ Array.from({ length: 10 }, () => Math.random().toString(36)[2]).join('') }}"
            },
            {
              "id": "3dd38945-c044-486b-9e0c-4a080b62a606",
              "name": "Folder Name",
              "type": "string",
              "value": "MusicFile"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c301bc03-25ce-48fb-b3a3-ca360b87cb9f",
      "name": "下载音乐",
      "type": "n8n-nodes-base.executeCommand",
      "position": [
        16,
        704
      ],
      "parameters": {
        "command": "=yt-dlp -x \\\n  --audio-format mp3 \\\n  --audio-quality 0 \\\n  --embed-thumbnail \\\n  -o\"./{{ $('GenrateFileName_01').item.json['Folder Name'] }}/{{ $('GenrateFileName_01').item.json['File Name'] }}.mp3\" \\\n  \"{{ $('GetYTmusic').item.json['Music Path'] }}\"\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5b81df46-443d-4f91-ab28-72d3a27b77e8",
      "name": "更新音乐详情",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        240,
        704
      ],
      "parameters": {
        "columns": {
          "value": {
            "Status": "Success",
            "row_number": "={{ $('GetYTmusic').item.json.row_number }}",
            "Internal Path": "=./{{ $('GenrateFileName_01').item.json['Folder Name'] }}/{{ $('GenrateFileName_01').item.json['File Name'] }}.mp3"
          },
          "schema": [
            {
              "id": "Music Path",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Music Path",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal Path",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal Path",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 871997350,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit#gid=871997350",
          "cachedResultName": "Music Pool"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit?usp=drivesdk",
          "cachedResultName": "DaysOfDodo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "xrsd60RjEc5ycblT",
          "name": "dodoLife"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "a37bb3ce-5f60-4ae3-a9d9-3fbf503a0786",
      "name": "计划触发器",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -880,
        704
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3ecd2d56-7eeb-4891-ba83-5b357b5ff999",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -960,
        304
      ],
      "parameters": {
        "color": 4,
        "width": 1392,
        "height": 592,
        "content": "# YouTube 视频和音乐下载器"
      },
      "typeVersion": 1
    },
    {
      "id": "498ffdbe-8a7b-4f89-b5b2-f21783008420",
      "name": "定时触发器",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        1056,
        272
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 11,
              "triggerAtMinute": 51
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e78c802f-4982-4e29-97eb-05d59379fa71",
      "name": "获取所有视频",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1280,
        272
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "Success",
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1195115445,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit#gid=1195115445",
          "cachedResultName": "Video Pool"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit?usp=drivesdk",
          "cachedResultName": "DaysOfDodo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "xrsd60RjEc5ycblT",
          "name": "dodoLife"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "aaf6e8b2-e568-41ac-a3d5-b4f413d41634",
      "name": "聚合视频",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        1504,
        272
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "Internal Path"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "735e9762-d509-46a3-9052-6f6aba176baf",
      "name": "获取所有音乐",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1728,
        272
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "Success",
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 871997350,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit#gid=871997350",
          "cachedResultName": "Music Pool"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit?usp=drivesdk",
          "cachedResultName": "DaysOfDodo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "xrsd60RjEc5ycblT",
          "name": "dodoLife"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "f7332c1b-3b9f-4e17-8f89-de5264f38fe3",
      "name": "聚合音乐",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        624,
        480
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "Internal Path"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c7783a6e-cc80-4cac-9280-e9195f1eb6c8",
      "name": "获取引用",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        848,
        480
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 739055601,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit#gid=739055601",
          "cachedResultName": "Video Logs"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit?usp=drivesdk",
          "cachedResultName": "DaysOfDodo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "xrsd60RjEc5ycblT",
          "name": "dodoLife"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "3d4c539c-fcbc-4965-915e-29269cceb58a",
      "name": "限制",
      "type": "n8n-nodes-base.limit",
      "position": [
        1072,
        480
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "4a603c0c-b734-4180-be56-1d84a73349af",
      "name": "随机选择音乐视频",
      "type": "n8n-nodes-base.set",
      "position": [
        1280,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3b028ccc-6b8d-4ed0-958a-52b0223e5dac",
              "name": "Music_Path",
              "type": "string",
              "value": "={{ $('AggregateMusic').item.json['Internal Path'][Math.floor(Math.random() * $('AggregateMusic').item.json['Internal Path'].length)] }}"
            },
            {
              "id": "b97fb3ce-cf68-46fc-81b3-774ac5e26990",
              "name": "Video_Path",
              "type": "string",
              "value": "={{ $('AggregateVideos').item.json['Internal Path'][Math.floor(Math.random()*$('AggregateVideos').item.json['Internal Path'].length)] }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e228ce95-dfeb-499f-9d0d-08ec9e4156c4",
      "name": "生成最终文件名",
      "type": "n8n-nodes-base.set",
      "position": [
        1504,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "aec988b9-f8b7-4b59-8438-f720568d4d9f",
              "name": "File Name",
              "type": "string",
              "value": "={{ Array.from({ length: 10 }, () => Math.random().toString(36)[2]).join('') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "580b2672-9d3d-45b6-9389-9c4eb7dd8755",
      "name": "为视频生成文本叠加",
      "type": "n8n-nodes-base.code",
      "position": [
        1728,
        480
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const fontColor = \"white\";\nconst fontFile = \"NotoSerif_Condensed-BlackItalic.ttf\";\nconst fontSize = 80;\nconst lineHeightMultiplier = 1.1;\nconst videoWidth = 1080;\n\nconst avgCharWidth = fontSize * 0.6;\nconst maxCharsPerLine = Math.floor(videoWidth / avgCharWidth);\n\nconst words = $('GetQuotes').item.json['Video Transcript'].split(' ');\nconst lines = [];\nlet currentLine = '';\nlet currentCharCount = 0;\n\nwords.forEach(word => {\n  const wordLength = word.length;\n  const potentialLength = currentCharCount + (currentLine ? 1 : 0) + wordLength;\n  if (potentialLength <= maxCharsPerLine) {\n    currentLine += `${currentLine ? ' ' : ''}${word}`;\n    currentCharCount = potentialLength;\n  } else {\n    lines.push(currentLine);\n    currentLine = word;\n    currentCharCount = wordLength;\n  }\n});\n\nif (currentLine) lines.push(currentLine);\n\nconst totalHeight = lines.length * fontSize * lineHeightMultiplier;\nconst lineHeight = fontSize * lineHeightMultiplier;\n\nconst drawText = lines.map((line, index) => {\n  const y = `(h/2)-${Math.ceil(totalHeight/2)}+${index * lineHeight}`;\n  return `drawtext=text='${line}':fontsize=${fontSize}:fontcolor=${fontColor}:x=(w-tw)/2:y=${y}:fontfile=${fontFile}`;\n}).join(',');\n\nreturn {\n  drawText\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "36f5d319-a960-4919-829e-eaaf43ff22b4",
      "name": "生成视频",
      "type": "n8n-nodes-base.executeCommand",
      "position": [
        624,
        704
      ],
      "parameters": {
        "command": "=ffmpeg -i \"{{ $('PickMusicVideoRandom').item.json.Video_Path }}\" \\\n    -i \"{{ $('PickMusicVideoRandom').item.json.Music_Path }}\" \\\n    -filter_complex \"\n[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920[vid];\ncolor=black@0.3:size=1080x1920:d=10[bg];\n[vid][bg]overlay[bgvid];\n[bgvid]{{ $json.drawText }}[outv];\n[1:a]volume=0.8[aout]\" \\\n    -map \"[outv]\" \\\n    -map \"[aout]\" \\\n    -t 10 -aspect 9:16 -c:v libx264 -c:a aac -shortest \\\n    \"./{{ $('GenrateFinalFileName').item.json['File Name'] }}.mp4\" -y\n\n\n",
        "executeOnce": false
      },
      "typeVersion": 1
    },
    {
      "id": "a0611b1b-cd28-46f1-91c1-195ffd482bd8",
      "name": "从磁盘读取/写入文件",
      "type": "n8n-nodes-base.readWriteFile",
      "position": [
        1072,
        704
      ],
      "parameters": {
        "options": {},
        "fileSelector": "=./{{ $('GenrateFinalFileName').item.json['File Name'] }}.mp4"
      },
      "typeVersion": 1
    },
    {
      "id": "b203af9a-1738-491a-acb0-711d7e1bd925",
      "name": "上传视频",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1280,
        704
      ],
      "parameters": {
        "url": "={{ $('CreateYoutubeLink').item.json.headers.location }}",
        "method": "PUT",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "video/webm"
            }
          ]
        },
        "inputDataFieldName": "data",
        "nodeCredentialType": "youTubeOAuth2Api"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "id": "wSoMQFZbOrX9SJi2",
          "name": "dodoLife"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8a1126d5-5380-41e1-8eb7-d6c17e2cc004",
      "name": "创建 YouTube 链接",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        832,
        704
      ],
      "parameters": {
        "url": "https://www.googleapis.com/upload/youtube/v3/videos?part=snippet,status&uploadType=resumable",
        "body": "={\n  \"snippet\": {\n    \"title\": \"{{ $('Limit').item.json['Video Title'] }}\",\n    \"description\": \"{{ $('Limit').item.json['Video Transcript'] }}\",\n    \"defaultLanguage\": \"en\",\n    \"defaultAudioLanguage\": \"en\"\n  },\n  \"status\": {\n    \"privacyStatus\": \"public\",\n    \"license\": \"youtube\",\n    \"embeddable\": true,\n    \"publicStatsViewable\": true,\n    \"madeForKids\": false\n  }\n}",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "sendBody": true,
        "contentType": "raw",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "rawContentType": "RAW/JSON",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "C-Upload-Content-Type",
              "value": "video/webm"
            }
          ]
        },
        "nodeCredentialType": "youTubeOAuth2Api"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "id": "wSoMQFZbOrX9SJi2",
          "name": "dodoLife"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "c76839aa-ea62-43d3-9672-bff1274e8785",
      "name": "更新视频帖子",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1504,
        704
      ],
      "parameters": {
        "columns": {
          "value": {
            "Status": "Success",
            "Post Time": "={{$now}}",
            "row_number": "={{ $('Limit').item.json.row_number }}",
            "Output Path": "=./{{ $('GenrateFinalFileName').item.json['File Name'] }}.mp4",
            "Youtube Link": "=https://www.youtube.com/watch?v={{ $json.id }}"
          },
          "schema": [
            {
              "id": "Video Title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Video Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Video Transcript",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Video Transcript",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Output Path",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Output Path",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Youtube Link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Youtube Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Post Time",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Post Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 739055601,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit#gid=739055601",
          "cachedResultName": "Video Logs"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/12GT5hiQBMiklbVtOtfzySwwy2gzJTaz5U6NEMXmAUzs/edit?usp=drivesdk",
          "cachedResultName": "DaysOfDodo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "xrsd60RjEc5ycblT",
          "name": "dodoLife"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "9a8a340d-5cf3-478c-807f-2e9f96d1c025",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        128
      ],
      "parameters": {
        "color": 3,
        "width": 1504,
        "height": 768,
        "content": "# YouTube 视频和音乐处理器"
      },
      "typeVersion": 1
    },
    {
      "id": "e218c900-3d62-482b-80ac-db76a7c40155",
      "name": "删除文件",
      "type": "n8n-nodes-base.executeCommand",
      "position": [
        1744,
        704
      ],
      "parameters": {
        "command": "=rm ./{{ $('GenrateFinalFileName').item.json['File Name'] }}.mp4",
        "executeOnce": false
      },
      "typeVersion": 1
    },
    {
      "id": "c7d899b9-a662-4d73-94fb-ff8acde2ad54",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -960,
        128
      ],
      "parameters": {
        "color": 3,
        "width": 1392,
        "height": 128,
        "content": "# 自动创建和上传 YouTube Shorts"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Limit": {
      "main": [
        [
          {
            "node": "PickMusicVideoRandom",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit_1": {
      "main": [
        [
          {
            "node": "GenrateFileName",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit_01": {
      "main": [
        [
          {
            "node": "GenrateFileName_01",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetQuotes": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetYTmusic": {
      "main": [
        [
          {
            "node": "Limit_01",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetYTvideo": {
      "main": [
        [
          {
            "node": "Limit_1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetAllMusic": {
      "main": [
        [
          {
            "node": "AggregateMusic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "UploadVideo": {
      "main": [
        [
          {
            "node": "UpdateVideoPost",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetAllVideos": {
      "main": [
        [
          {
            "node": "AggregateVideos",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "DownloadMusic": {
      "main": [
        [
          {
            "node": "UpdateMusicDetails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GenerateVideo": {
      "main": [
        [
          {
            "node": "CreateYoutubeLink",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AggregateMusic": {
      "main": [
        [
          {
            "node": "GetQuotes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AggregateVideos": {
      "main": [
        [
          {
            "node": "GetAllMusic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GenrateFileName": {
      "main": [
        [
          {
            "node": "DownloadVideoFootage",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "UpdateVideoPost": {
      "main": [
        [
          {
            "node": "RemoveFile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "GetYTmusic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CreateYoutubeLink": {
      "main": [
        [
          {
            "node": "Read/Write Files from Disk",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger1": {
      "main": [
        [
          {
            "node": "GetAllVideos",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GenrateFileName_01": {
      "main": [
        [
          {
            "node": "DownloadMusic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "DownloadVideoFootage": {
      "main": [
        [
          {
            "node": "UpdateVideoFootageDetails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GenrateFinalFileName": {
      "main": [
        [
          {
            "node": "GenrateTextOverlayForVideo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "PickMusicVideoRandom": {
      "main": [
        [
          {
            "node": "GenrateFinalFileName",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GenrateTextOverlayForVideo": {
      "main": [
        [
          {
            "node": "GenerateVideo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read/Write Files from Disk": {
      "main": [
        [
          {
            "node": "UploadVideo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "GetYTvideo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 内容创作

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量31
分类1
节点类型11
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
MANISH KUMAR

MANISH KUMAR

@manipritraj

Automation Architect | n8n Expert I turn repetition into magic! Building workflows for: - Content creation (YouTube/social media) - Business ops (CRM/data pipelines) - Personal productivity (AI/smart home) Superpowers: API integrations • Debugging • Scalable solutions Featured: YouTube Shorts Automator • AI Report Generator • Custom ChatGPT+n8n "Automation should adapt to humans" 📧 manipritraj@gmail.com Fun fact: Automated my coffee+news+cat feeder! ☕🐈

外部链接
在 n8n.io 查看

分享此工作流