视频制作思路
●STEP1:视频源
间接搬运修改MD5等,背景音乐侵权
因此,我的思路比较简单,在自媒体百家齐放的这几年,最不愁的就是自媒体文章,一堆自媒体人每天不停的瞎编文章,公众号也是一堆人不停的写文章吸粉,那么这些就是源头。
操作上,采集文章,标题+内容
内容有够多的文字就行了。图片太少或者文章没图片怎么办?
这个好解决,直接跟进标题,去google或者百度搜索即可 得到的图片下载一些下来即可。
声音怎么处理?
腾讯AI 百度AI有这样的 文章转语音接口。
STEP2:有一个已经开启了盈利的账号
不能做的人,总是为自己的能力找借口,或者自己压根喜欢伸手党,不去自己找这块资源。
STEP3:VPS批量跑
一个号跑赚那么点钱,一批号跑就赚的很多了。
VPS 这里量化推荐阿里云国际版,真的稳
采集自媒体文章入库
因为涉及到量化,因此,我考虑的是首先,文章源要够,每一个YOUTUBE频道传的视频内容要做到不一样,如何解决这个问题呢?
很简单
我用PHP简单的配合MYSQL做一个接口文件
— ——————————————————–
—
— 表的结构 `ytb`
—
CREATE TABLE `ytb` (
`id` int(11) NOT NULL,
`url` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`used` int(11) NOT NULL,
`type` text CHARACTER SET utf8 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
—
— 转存表中的数据 `ytb`
—
入库的PHP脚本
<?php
error_reporting(E_ALL);
ini_set(“display_errors”, 1);
$url=base64_decode($_GET[“url”]);
$type=$_GET[“source”];
$c = mysqli_connect(“127.0.0.1”, “affadsense.com”, “affadsense.com”,”affadsense.com”);
$insertdata=”insert into ytb(url,used,type) values(‘$url’,0,’$type’);”;
if($c->query($insertdata)==true){
echo “插入数据成功”;
}else{
echo “Error insert data: ” . $c->error;
}
mysqli_close($c);
提取URL的脚本
<?php
error_reporting(E_ALL);
ini_set(“display_errors”, 1);
$type=$_GET[“source”];
$c = mysqli_connect(“127.0.0.1”, “affadsense.com”, “affadsense.com”,”affadsense.com”);
$sql=”select * from ytb where type=’$type’ and used =0 order by id desc limit 1″;
$obj =$c->query($sql);
while($row = mysqli_fetch_assoc($obj)){
$id=$row[‘id’];
$url=$row[‘url’];
echo $url;
$sql2=”update ytb set used=1 where id=$id”;
if($c->query($sql2)==true)
{}
}
mysqli_close($c);
这里懂脚本的应该知道,入库的时候,我设置used=0,提取的时候used=0的URL,然后提取后就设置used=1
这样,每一个URL就不会重复被使用了。
自媒体文章转视频
从接口提取url就不说了。
URL提前文章标题,文章内容以及文章中的配图也很简单,
主要是文章怎么转视频这块
把提取的内容部分,通过百度AI文字转语音或者腾讯文字转语音,转为MP3文件。当然,调用系统的也行,不过略显生涩。
然后有了MP3文件,就知道整个视频的长度,然后根据图片的数量,把每一张图片的播放时间计算好,再进行MP3 视频的合并。
视频加工:
画中画,视频播放前的播放头视频
视频加滚动文字的代码:
总之,这里涉及到了ffmpeg这个工具,费了不少时间去研究命令,并且买了本书
然并软,书压根没咋看,还是靠google baidu sogou soso等等等
视频上传
上传部分,早期用的是youtube的官方api,但是发现,API上传默认是不开启盈利功能的,还是得配合浏览器插件,手动写了一下开启盈利的动作后,定期去滚动执行去获取的。
后来我直接改用selenium这个东西,
ChromeOptions options = new ChromeOptions();
options.AddArgument(“–user-/data”);
ChromeDriver driver = new ChromeDriver(options);
try
{
driver.Navigate().GoToUrl(“https://www.youtube.com/upload”);
string htmlcode = driver.FindElement(By.TagName(“body”)).GetAttribute(“innerHTML”);
// video = fileDir + “/”+
try
{
//
driver.FindElement(By.XPath(“//input[@type=’file’])[2]”)).SendKeys(video);
}
catch
{
try
{
driver.FindElement(By.XPath(“//*[@id=”upload-prompt-box”]/div[2]/input”)).SendKeys(video);
}
catch { }
}
text = suoxie.StringTruncat(richTextBox1.Text + text, 5007, “…”);
Thread.Sleep(2000);
driver.FindElement(By.XPath(“//*[@id=”upload-item-0″]/div[3]/div[2]/div/div/div[1]/div[3]/form/div[1]/fieldset[1]/div/label[1]/span/input”)).Clear();
driver.FindElement(By.XPath(“//*[@id=”upload-item-0″]/div[3]/div[2]/div/div/div[1]/div[3]/form/div[1]/fieldset[1]/div/label[1]/span/input”)).SendKeys(title);
driver.FindElement(By.XPath(“//*[@id=”upload-item-0″]/div[3]/div[2]/div/div/div[1]/div[3]/form/div[1]/fieldset[1]/div/label[2]/span/textarea”)).SendKeys(text);
Thread.Sleep(10000);
htmlcode = driver.FindElement(By.TagName(“body”)).GetAttribute(“innerHTML”);
if (htmlcode.Contains(“您的视频将出现在以下位置”) || htmlcode.Contains(“Your video will be live at”))
{
ress = GlobalRegex.RegexMatch(htmlcode, @”(?<=https://youtu.be/).*?(?=””)”);
ress = “https://youtu.be/” + ress;
try
{
driver.FindElement(By.XPath(“//*[@id=”upload-item-0″]/div[3]/div[2]/div/div/div[1]/div[3]/form/div[1]/fieldset[3]/div/span[3]/div[2]/div[1]/div/div/input”)).SendKeys(thumbfile);//图片所旅途
}
catch(Exception EEE)
{
var log = new LogManager();
log.WriteLog(EEE.StackTrace);
}
}
for (int i = 0; i < 1200; i++)
{
Thread.Sleep(1000);
htmlcode = driver.FindElement(By.TagName(“body”)).GetAttribute(“innerHTML”);
if (driver.Title.Contains(“已上传 1 个视频”))
{
try
{
driver.FindElement(By.ClassName(“save-cancel-buttons”)).Click();
i = 1201;
}
catch(Exception ez)
{
MessageBox.Show(ez.Message);
}
try
{
htmlcode = driver.FindElement(By.TagName(“body”)).GetAttribute(“innerHTML”);
if (htmlcode.Contains(“要在视频中投放广告,您现在需要在每次上传视频时为其启用广告获利功能”))
{
try
{
driver.FindElement(By.XPath(“//*[@id=”upload-item-0″]/div[3]/div[2]/div/div/div[1]/div[1]/ul/li[2]/div[1]/a/sub/span”)).Click();
Thread.Sleep(5000);
driver.FindElement(By.XPath(“//*[@id=”monetize-with-ads”]”)).Click();
Thread.Sleep(1000);
driver.FindElement(By.CssSelector(“#upload-item-0 > div.upload-item-main > div.upload-state-bar > div.metadata-actions > div > div > button”)).Click();
i = 1201;
}
catch (Exception ee) {
var log = new LogManager();
log.WriteLog(ee.StackTrace);
}
}
}
catch (Exception eee) {
var log = new LogManager();
log.WriteLog(eee.StackTrace);
}
break;
}
}
try
{
DelectDir(Environment.CurrentDirectory + “\images”);
DelectDir(Environment.CurrentDirectory + “\mv”);
DelectDir(Environment.CurrentDirectory + “\wav”);
}
catch (Exception ee)
{
// MessageBox.Show(ee.Message);
var log = new LogManager();
log.WriteLog(ee.StackTrace);
}
Thread.Sleep(1000);
}
最后 软件界面
End
说下软件的操作方法:
点下
会弹出YOUTUBE,登陆下,然后记得最下角的浏览器语言选择中文
note是默认的YOUTUBE视频介绍的文章头部
dahua.mp4 是画中画的素材 可以上国外去购买其他的素材去操作修改
back.mp3 是文章的背景音乐 可以改成你喜欢的不侵权的
start.mp4 是片头音乐
安装chrome浏览器最新版是必须的
软件第一次在VPS上登陆,要登陆,或自动设置一个缓存文件夹,后续就不要登陆了。
登陆后,选择采集源,点一下上次就行了。
至于采集问题,我是单独一台VPS每天采集。其他要铺的YOUTUBE的VPS,统统只点采集