0

在这里,我实际上想合并两个字符串 out1 和 out2 (其中包含第一个和第二个 30 秒长的视频数据)并将其写入文件。这样我就会得到一个 1 分钟长的可播放视频文件。但我得到的只是前 30 秒的视频。我应该如何编辑这段代码来实现这一点?请帮我。提前非常感谢。

import subprocess,os

ffmpeg_command1 = ["ffmpeg", "-i", "PATH/connect.webm", "-vcodec", "copy", "-ss", "00:00:00", "-t", "00:00:30","-f", "webm", "pipe:1"]

p1 = subprocess.Popen(ffmpeg_command1,stdout=subprocess.PIPE)

out1, err = p1.communicate()

ffmpeg_command2 = ["ffmpeg", "-i", "PATH/connect.webm","-vcodec", "copy", "-ss", "00:00:31", "-t", "00:00:30","-f", "webm", "pipe:1"]

p2 = subprocess.Popen(ffmpeg_command2,stdout=subprocess.PIPE)

out2, err1 = p2.communicate()

string = out1 + out2

fname = "PATH/final.webm"

fp = open(fname,'wb')

fp.write(string)

fp.close()

请帮我。我打了。

4

2 回答 2

2

如果你想用 ffmpeg 连接两个视频,它的工作原理是这样的:

ffmpeg -vcodec copy -isync -i \
"concat:file1.mp4|file2.mp4|...|fileN.mp4" \
outputfile.mp4
于 2013-06-27T07:39:56.890 回答
0
#coding=utf-8
import os

#Function to create a file list in the folder
import os
s = os.sep
path = r"F:\folder_mp4_files\temp"
def create_file_list(path):
    return_list = []
    for filenames in os.walk(path):
        for file_list in filenames:
            for file_name in file_list:
                if file_name.endswith((".mp4")):
                    return_list.append(path+s+file_name)
    return return_list

alist = create_file_list(path)
tsString = '|'.join([i.replace('.mp4','.ts') for i in alist])
print(tsString)
# mp4 converts to ts
for i in alist:
    noExtension = i.replace('.mp4','')
    # batch processing
    os.system("ffmpeg -i %s -vcodec copy -acodec copy -vbsf h264_mp4toannexb %s.ts" % (i,noExtension))
# Remove used mp4 files
for i in alist:
    os.remove(i)
os.system("""ffmpeg -i concat:"{0}" -acodec copy -vcodec copy -absf aac_adtstoasc {1}""".format(tsString, alist[0]))
# Remove used ts files
for i in alist:
    os.remove(i.replace('.mp4','.ts'))
于 2018-05-14T06:32:50.400 回答