- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Laravel 5.3
我正在使用 youtube-dl
下载 YouTube 视频,使用 Symfony
Process
:
$command = '/usr/local/bin/youtube-dl -o '.$new_file_path.' '.$youtube_id;
$process = new Process($command);
$process->setTimeout(null);
$process->run();
Process
运行后,我将下载的文件放在预期位置。现在我可以将它存储到 S3,如下所示:
\Storage::disk('s3')->putFile($s3_location, new File($new_file_path));
如您所见,我正在将文件下载到本地存储,然后上传到 S3。如果我能直接写到 S3 就太好了。特别是因为两个组件都支持流式传输——Process 类可以流式输出输出,而 S3 Storage 可以存储流,如下所示:
// Process class supports streamed output
// https://symfony.com/doc/current/components/process.html
// note the '-' after '-o' parameter - it asks youtube-dl to give a stream output, which can be piped in a shell
$process = new Process('/usr/local/bin/youtube-dl -o - '.$youtube_id;);
$process->start();
foreach ($process as $type => $data) {
if ($process::OUT === $type) {
echo "\nRead from stdout: ".$data;
} else { // $process::ERR === $type
echo "\nRead from stderr: ".$data;
}
}
还有,
// S3 Storage supports streams
// https://laravel.com/docs/5.3/filesystem#storing-files
Storage::put('file.jpg', $resource);
我的问题是 - 有没有办法将 Process
类的流式输出包装为 Resource/Stream 对象,并将其传递给 S3 存储?
最佳答案
更正:脚本实际上上传了所有可用的 block ,因为 file_get_contents
将继续到达 EOF
您需要确保有足够的可用内存,因为脚本不会处理可用内存的总大小与视频总大小的关系。
请注意我没有实际测试这个,因为我没有 s3 帐户,如果有任何问题请告诉我以更正答案。
// create ramdrive
// bash $ mkdir /mnt/ram_disk
// bash $ mount -t tmpfs -o size=1024m new_ram_disk /mnt/ram_disk
$array_of_youtube_ids = ['abc001', 'abc002' , 'abc003'];
$storage_path = '/mnt/ram_disk/';
// start all downloads
$index = 0;
foreach ($array_of_youtube_ids as $id){
$youtube_dls$index] = new YouTubeDlAsync($storage_path.$id, $id);
$youtube_dls[$index]->start();
$index ++;
}
// upload all downloads
$index = 0;
foreach ($array_of_youtube_ids as $id){
$s3uploads[$index] = new UploadToS3($storage_path.$id, $resource);
$s3uploads[$index]->start();
$index ++;
}
// Wait for all downloads to finish
foreach ($youtube_dls as $youtube_dl)
$youtube_dl->join();
// Wait for all uploads to finish
foreach ($s3uploads as $s3upload)
$s3upload->join();
class YouTubeDlAsync extends Thread {
public function __construct($new_file_path, $youtube_id) {
$command = '/usr/local/bin/youtube-dl -o '.$new_file_path.' '.$youtube_id;
exec($command);
}
}
class UploadToS3 extends Thread {
public function __construct($new_file_path, $resource) {
Storage::put(file_get_contents('file.jpg'), $resource);
}
}
关于php - 使用 Laravel 将 youtube-dl 输出流式传输到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54366889/
所以我有一个类似这样的 dl 列表: .title { display: inline-block; padding-bottom: 20px; } dd { -moz-margin-st
我想使用代理并运行它youtube-dl --proxy socks5://127.0.0.1:1080 这是下面的错误 Usage: youtube-dl [OPTIONS] URL [URL...
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 2年前关闭。 Improve thi
[Windows 10] 我有一个包含 128 个项目的视频播放列表 URL,我已经从同一个播放列表 URL 下载了 25 个视频。现在我想从 26 索引开始下载剩余的视频,但我无法使用 --paly
我正在使用 youtube-dl 从 youtube 下载播放列表。我使用自动编号功能对视频进行编号,这可以通过格式化输出文件的名称来实现,如下 -o "%(autonumber)s-%(title)
我正在显示 的列表tags 我页面中的标签。我想要 当标签的内容足够长以超出 的高度时不换行. 什么 css 可以防止这种情况发生? 最佳答案 我会使用 margin-left在 上等于 的宽
此命令下载视频并将自动生成的 youtube 字幕嵌入到文件中 youtube-dl.exe -ci -f "bestvideo[ext=mp4]"+"bestaudio[ext=m4a]" --wr
我在fedora 116上使用gcc/g++,我的想法是: c program -> load c++ dynamic library A -> load c++ dynamic library B
嗯,我可以在终端中使用它直接获取视频格式 - $ youtube-dl -F "some youtube url" 输出: [youtube] Setting language [youtube] P
我的 youtube-dl 库 ( https://rg3.github.io/youtube-dl/ ) 有问题。我使用 youtube-dl 不是通过这个库直接下载视频,而是我首先使用这样的命令生
关闭。这个问题需要details or clarity .它目前不接受答案。 想要改进这个问题吗? 通过 editing this post 添加详细信息并澄清问题. 关闭 8 年前。 Improve
我是 Android Studio 的新手,每次我尝试将项目与 gradle 同步时都会收到此错误。例如,我提供了对三个文件的引用。 1)项目级build.gradle文件 plugins {
更新 Gradle 后出现以下问题。我找不到任何解决方案。所以请帮我解决以下问题。提前致谢... (问题 ----- 无法获取“https://dl.google.com/dl/android/mav
我最近开始使用 react native,但是根据伊朗人的制裁,gradle 不能构建我的第一个项目,所以我使用了 VPN 和 shecan service但我收到以下错误: 我阅读了 React n
在Firebase身份验证(助手)中使用将Firebase身份验证添加到您的应用程序时出错。 该错误在“同步”标签中显示为: Could not GET 'https://dl.google.com/
我无法在 Android Studio 中构建项目,并且收到以下错误。 Gradle 同步失败。 无法获取“https://dl.google.com/dl/android/maven2/com/an
我正在尝试将 youtube 视频保存为我的下载文件夹中的 MP3。但是,这最终会将文件保存在与 youtube-dl 相同的目录中。 youtube-dl --extract-audio --aud
我正在使用 youtube-dl用于从 YouTube 下载视频。但是在我的办公室,互联网会每隔 20Mb 断开一次。的下载。 [错误:连接被远程服务器强行关闭]。 我必须再次输入 URL 才能继续下
好的,我知道要在您使用的python程序中从Youtube-DL获取Mp3文件 from __future__ import unicode_literals import youtube_dl yd
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我是一名优秀的程序员,十分优秀!