【发布时间】:2013-06-23 10:42:22
【问题描述】:
在这里,我尝试将第一个和第二个 30 秒长的视频文件从“path/connect.flv”剪切到文件 output1.flv 和 output2.flv。有用。我能够连接这两个文件以形成一个 60 秒长的新文件“final.flv”。所以这行得通,我得到了输出 output1.flv [30sec]、output2.flv[30sec] 和 final.flv[1min]。
这是python代码:
import subprocess
ffmpeg_command1 = ["ffmpeg", "-i", "/home/xincoz/test/connect.flv", "-acodec", "copy", "-ss", "00:00:00", "-t", "00:00:30", "/home/xincoz/test/output1.flv"]
ffmpeg_command2 = ["ffmpeg", "-i", "/home/xincoz/test/connect.flv", "-acodec", "copy", "-ss", "00:00:30", "-t", "00:00:30", "/home/xincoz/test/output2.flv"]
ffmpeg_command3 = ["mencoder", "-forceidx", "-ovc", "copy", "-oac", "pcm", "-o", "/home/xincoz/test/final.flv", "/home/xincoz/test/output1.flv", "/home/xincoz/test/output2.flv"]
subprocess.call(ffmpeg_command1)
subprocess.call(ffmpeg_command2)
subprocess.Popen(ffmpeg_command3)
但我真正想要的是连接两个字符串 out1 和 out2 并将这两个字符串连接到一个文件而不是连接“/home/xincoz/test/output1.flv”和“/home/xincoz/test/output2.flv ”。那么如何将字符串 out1 和 out2 解析为 mencoder 的输入呢?请编辑我的代码以实现结果。
import subprocess,os
ffmpeg_command = ["ffmpeg", "-i", "/home/xincoz/test/connect.flv", "-acodec", "copy", "-ss", "00:00:00", "-t", "00:00:30","-f", "flv", "pipe:1"]
p = subprocess.Popen(ffmpeg_command,stdout=subprocess.PIPE)
out1, err = p.communicate()
ffmpeg_command1 = ["ffmpeg", "-i", "/home/xincoz/test/connect.flv", "-acodec", "copy", "-ss", "00:00:30", "-t", "00:00:30","-f", "flv", "pipe:1"]
p1 = subprocess.Popen(ffmpeg_command1,stdout=subprocess.PIPE)
out2, err1 = p1.communicate()
ffmpeg_command2 = ["mencoder", "-forceidx", "-ovc", "copy", "-oac", "pcm", "-o", "/home/xincoz/test/final.flv", out1, out2 ]
p2=subprocess.Popen(ffmpeg_command2)
请帮助我。提前非常感谢。
【问题讨论】:
-
你能告诉我们out1和out2的内容是什么吗?
-
感谢@TomP 的回复。它是 output1.flv 和 output2.flv 中的二进制数据(即 connect.flv 的第一个和第二个 30 秒二进制数据)。这里我们没有创建 output1.flv 和 output2.flv,而是将二进制数据放入字符串 out1 和 out2。
-
我相信 Tom P 在询问视频和音频格式是什么,因为格式类型可以决定如何继续加入。很明显,它是“二进制数据”。
-
谢谢兄弟@LordNeckbeard。
-
-forceidx选项可能需要一个真实文件,即通过标准输入管道数据,命名管道可能不起作用。无论如何你都可以测试它。 Here's an example that shows how to pass data using stdin, named pipe, NamedTemporaryFile。一个临时文件应该可以工作(它与您的第一个代码示例基本相同,除了当您并行启动多个脚本时文件名不会冲突)。
标签: python ffmpeg subprocess stdin