首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FFMPEG从list.txt连接X视频

FFMPEG从list.txt连接X视频
EN

Stack Overflow用户
提问于 2019-10-24 10:17:21
回答 1查看 1K关注 0票数 0

我正在尝试从一个list.txt连接3个视频,我可以将列表中的所有视频连接在一个长视频中,但我希望将列表中的x视频连接到一个输出中,然后将来自同一列表的下一个x视频连接到另一个输出中,以此类推。

我正在开发的脚本是用python编写的,它从服务器上获取一些视频,并将它们保存在本地的一个文件夹中并编写我的concat.txt,然后ffmpeg读取concat.txt并创建一个output.mp4

代码语言:javascript
运行
复制
#this merge all video in concat file in a single output
os.system("ffmpeg -f concat -i downloaded/concat.txt -safe 1 -r 30 -fflags +genpts -c:a copy downloaded/output.mp4")

我正在寻找一种方法,使ffmpeg从concat.txt读取第一个x行,将它们连接到output1.mp4中,然后从cancat.txt读取下一个x行,在output2.mp4中连接它们等等。

谢谢你抽出时间来帮我,我真的很感激!

-编辑感谢@Tejas的回复,我解决了如何分割concat.txt文件,现在我正在尝试对每个剪辑应用一个过滤器

代码语言:javascript
运行
复制
import os
x = 3 #Number of files you want to concatenate

#Making directories so that the working directory stays organized
txtFileName = "./splits/output{}.txt"
outputFile = "./clip/output{}.mp4"
postFile = "./media/post{}.mp4"
os.makedirs(os.path.dirname(txtFileName), exist_ok=True)
os.makedirs(os.path.dirname(outputFile), exist_ok=True)
os.makedirs(os.path.dirname(postFile), exist_ok=True)


#While splitting the files store their path to a list
listofSplitFiles = []
with open('./downloaded/concat.txt','r') as concat:
    lines = concat.readlines()
    for i in range(0,lines.__len__()//x):
        with open(txtFileName.format(i+1),'w') as split:
            listofSplitFiles.append(txtFileName.format(i+1))
            for j in range(0,x):
                if( (i*x)+j < lines.__len__() ):
                    split.write(lines[(i*x)+j])

#Call ffmpeg on the list
for i in listofSplitFiles:
    outputBaseName = os.path.basename(i)
    outputFileName = os.path.splitext(outputBaseName)[0]
    postFileName = os.path.splitext(outputBaseName)[0]
    os.system("ffmpeg -f concat -i {} -safe 1 -r 30 -fflags +genpts -c:a copy ./clip/{}.mp4".format(i,outputFileName))
    os.system('''ffmpeg -loglevel error -r 30 -i sfondo/bkg.png -i ./clip/output{}.mp4 -b:v 1M -filter_complex ''' + '''"[1:v]scale=''' + "750" + ''':''' + "1080" + ''' [ovrl], [0:v][ovrl]overlay=(main_w-overlay_w)/2:((main_h-overlay_h)/2)"''' + ''' ./media/{}.mp4''' .format(outputFileName,postFileName)) 

不幸的是,我有一个错误./clip/{}.mp4: No such file or directory

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-24 14:41:53

从ffmpeg的文档中可以看出,它将读取txt文件中的整个文件列表,并将它们连接到一个文件中。所以,您可以使用python读取concat.txt,将三行代码放入不同的文本文件中,然后在这些文件上运行ffmpeg。就像这样:

代码语言:javascript
运行
复制
import os
x = 3 #Number of files you want to concatenate

#Making directories so that the working directory stays organized
txtFileName = "./splits/output{}.txt"
outputFile = "./output/output{}.mp4"
os.makedirs(os.path.dirname(txtFileName), exist_ok=True)
os.makedirs(os.path.dirname(outputFile), exist_ok=True)

#While splitting the files store their path to a list
listofSplitFiles = []
with open('./concat.txt','r') as concat:
    lines = concat.readlines()
    for i in range(0,lines.__len__()//x):
        with open(txtFileName.format(i+1),'w') as split:
            listofSplitFiles.append(txtFileName.format(i+1))
            for j in range(0,x):
                if( (i*x)+j < lines.__len__() ):
                    split.write(lines[(i*x)+j])

#Call ffmpeg on the list
for i in listofSplitFiles:
    outputBaseName = os.path.basename(i)
    outputFileName = os.path.splitext(outputBaseName)[0]
    os.system("ffmpeg -f concat -i {} -safe 1 -r 30 -fflags +genpts -c:a copy ./output/{}.mp4".format(i,outputFileName))

不过,需要注意的是,有better ways来读取文件,但据我所见,我认为您需要一个快速脚本将多个文件连接在一起。所以f.readlines()不应该是问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58539173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档