Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php FFmpeg可以连接来自不同域的文件吗?_Php_Ffmpeg - Fatal编程技术网

Php FFmpeg可以连接来自不同域的文件吗?

Php FFmpeg可以连接来自不同域的文件吗?,php,ffmpeg,Php,Ffmpeg,我正在尝试将各种.ts视频剪辑连接到一个视频中,然后将该视频转换为.mp4文件。我知道我可以制作一个.txt文件,格式如下: file '/path/to/file1' file '/path/to/file2' file '/path/to/file3' 然后像这样连接它们: ffmpeg -f concat -i mylist.txt -c copy all.ts 然后像这样转换文件: ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4

我正在尝试将各种.ts视频剪辑连接到一个视频中,然后将该视频转换为.mp4文件。我知道我可以制作一个.txt文件,格式如下:

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'
然后像这样连接它们:

ffmpeg -f concat -i mylist.txt -c copy all.ts
然后像这样转换文件:

ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4
我的问题是,我的.txt文件可以是其他域的URL吗?e、 g:

http://somewebsite.com/files/videoclip1.ts
http://somewebsite.com/files/videoclip2.ts
http://somewebsite.com/files/videoclip3.ts

或者,我必须先下载所有这些剪辑,将它们本地存储在我的域中,然后制作一个指向它们的.txt文件吗?我正在使用PHP。谢谢。

是的,这是可能的。请注意,在下面的示例中,我使用了您问题中的URL和文件名,在测试时,我在自己的web服务器上使用了一些测试文件

使用您提供的示例文本文件尝试此操作将给出一条非常清楚的错误消息:

[concat@0x7f892f800000]第1行:未知关键字'

mylist.txt:处理输入时发现无效数据

通过在
mylist.txt
中重新引入'file'关键字,可以很容易地解决这个问题:

file 'http://somewebsite.com/files/videoclip1.ts'
file 'http://somewebsite.com/files/videoclip2.ts'
file 'http://somewebsite.com/files/videoclip3.ts'
更新后的文件将给出不同的错误消息:

[concat@0x7fa467800000]不安全的文件名“”

mylist.txt:不允许操作

原因是ffmpeg默认情况下不允许http URL。这可以通过在ffmpeg调用中
-i
参数之前包含
-safe 0
参数来绕过:

ffmpeg -f concat -safe 0 -i mylist.txt -c copy all.ts
这在您的安装中可能是开箱即用的,在我的安装中,这给出了另一个错误消息:

[http@0x7faa68507940]协议“http”不在白名单“文件,加密”中

[concat@0x7faa69001200]无法打开“”

mylist.txt:参数无效

这是因为,在我的安装中,ffmpeg的默认协议白名单只包括
文件
加密
。为了允许
http
协议,我们需要在命令中显式地提供允许的协议白名单。事实证明,
tcp
也是必需的:

ffmpeg -f concat -safe 0 -protocol_whitelist file,http,tcp -i mylist.txt -c copy all.ts

这使我的安装可以下载并连接视频文件。

当然,尝试一下看会发生什么会比在一个问题中键入所有这些内容花费更少的时间吗?@rickdenhaan,嗯,我确实尝试过,但它不起作用。但是,我不确定是因为文件在另一个域上,还是因为我的代码有其他问题,所以它不起作用。在我花几个小时编写代码下载所有文件之前,我想知道是否可以合并其他域中的文件。共享您尝试的完整日志。我在共享服务器上使用PHP,因此需要使用shell_exec()。最终起作用的是shell_exec($ffmpeg-f concat-safe 0-i$fileList-c copy$combinedFile);谢谢你的帮助。