欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Youtube扒视频+ffmpeg批量将 png图像转换为avi、MP4以及将avi、MP4转换为单帧图像

程序员文章站 2022-05-28 15:18:28
...

Youtube扒视频+ffmpeg批量将 png图像转换为avi、MP4以及将avi、MP4转换为单帧图像

最近有科研需求,需要去youtube上扒视频来制作数据集,遇到了如何将avi及mp4转换为png 以及 将png图像转换为视频的操作。

选择的工具为ffmpeg,由于需要超大量的转换过程,因此还学习了一下如何写bat命令批量处理。

将如何youtube扒视频、批量转换的代码分享给大家,希望能用上

  1. Youtube扒视频。

    Python有一个库叫Pytube,该库用来扒视频非常的方便。可直接用pip安装
    
    pip install pytube
    

    然后我们可以登陆上youtube选择自己需要的视频,复制下链接。建立一个txt文档,存下这些链接如图所示
    Youtube扒视频+ffmpeg批量将 png图像转换为avi、MP4以及将avi、MP4转换为单帧图像
    接着用python写个脚本批量下载就行:

from pytube import YouTube
from urllib.error import HTTPError
from urllib import request
import os
import sys
proxies={
    'http': 'socks5://127.0.0.1:1080',
    'https': 'socks5://127.0.0.1:1080'   //这里是需要好挂vpn的
}

videopath = '这里写存放txt文档的路径,挑选的时候可以分个类'
save_path = '这里存放视频保存的位置'   
files = os.listdir(videopath)
for file in files:
    if os.path.exists(save_path+file[:-4]) == False:
        os.mkdir(save_path+file[:-4])
    saving = save_path+file[:-4]+'//'
    txts = open(videopath+file,'r')
    lines = txts.readlines()
    for line in lines:
        url = line
        tag = 22 			//这里可以用print(video.streams)查看有哪些tag你可以使用,可以选择视频or音频
        video = YouTube(url,proxies=proxies)
        video.streams.get_by_itag(tag).download(saving)
        print("file = {}, url={} have finished".format(file,url))

脚本文件可以根据自己的存储需求进行修改,这里就不过多赘述了

  1. 写bat命令用ffmpeg批量将视频转成帧:
@echo off
set a=195 //这里是视频的名字,我这里因为视频重命名为数字了,所以循环的时候用数字
set b=86 //这里是要存储帧文件夹的名字,我这里也变成数字了,可以自行修改
:loop
md 0%b%  //创建文件夹
ffmpeg -i %a%.avi -r 60 %b%\img%%04d.png //这里可更改为绝对路径
set /a a+=1
set /a b+=1
if %a% == 239 goto end 
goto loop
:end
  1. 写bat命令用ffmpeg批量将帧合成为视频 (这种方式是无损的,其实也有损,因为RGB转YUV会有损)
@echo off
set a=195 //存放所有帧的文件夹名字
:loop
ffmpeg -r 120 -i 绝对路径\%a%\%%08d.png -c:v libvpx-vp9 -lossless 1  放视频的绝对路径\%a%.avi //这里可*更改合成视频的名字
set /a a+=1
if %a% == 240 goto end //有多少个文件夹就合成几个视频
goto loop
:end

最后还有参考的一个批量修改文件夹名字的脚本:

set a=62 //想要改成的名字
setlocal EnableDelayedExpansion

FOR /f "tokens=*" %%i IN ('dir /a:d /b') DO (

set /A a+=1

ren "%%i" "0!a!" //前者是当前文件名,后者是要修改成为的名字

)

已经制作完一半数据集了 真的非常头疼了!!!!!!

相关标签: ffmpeg