【问题标题】:How to merge two video parts and get a playable video file using Python?如何使用 Python 合并两个视频部分并获得可播放的视频文件?
【发布时间】:2018-05-14 14:32:50
【问题描述】:

在这里,我实际上想合并两个字符串 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()

请帮助我。我打了。

【问题讨论】:

  • @sean 兄弟,我问如何合并两个视频文件。但在这里我问如何合并包含该视频数据的字符串。这样我们就可以实现不创建和读取文件。为此,我不幸投了反对票:(。

标签: subprocess


【解决方案1】:

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

ffmpeg -vcodec copy -isync -i \
"concat:file1.mp4|file2.mp4|...|fileN.mp4" \
outputfile.mp4

【讨论】:

  • 我做到了,效果很好兄弟。在这里我已经得到了答案stackoverflow.com/questions/17311708/…。但我想做的不是读取两个文件并连接。相反,我想合并两个包含视频数据的字符串而不创建文件。
【解决方案2】:
#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'))

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2023-04-04
    • 2018-04-23
    • 2019-03-01
    相关资源
    最近更新 更多