像使用CURL for ffmpeg一样下载浏览器

时间:2011-08-11 10:05:25

标签: php curl download ffmpeg

我想在ffmpeg参数中输入HTTP文件,我已经尝试过这段代码

<?php

    $fname=time().'_myfile.mp3';
    $cmd = "/usr/local/bin/ffmpeg -i 'http://tinyurl.com/url' -vn -b 64k -f mp3 -acodec libmp3lame - $fname"; 
    header('Content-type: audio/mpeg');
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$fname\"");
    passthru($cmd);

>?

我尝试传递tinyurl网址,但ffmpeg无法创建文件。 如果我将一些其他直接URL传递给参数,此代码可以正常工作。

我想创建一个PHP文件并使用正确的标头使用CURL并在输入参数中传递该PHP文件将有效吗? 简单来说,如果输入不是直接链接,则ffmpeg会失败。我该怎么办?

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

基于http://getsatisfaction.com/soup/topics/reverse_lookup_for_tinyurls的评论 您可以使用下面的curl函数来获取您应该按计划进行的真实URL。

function resolve($url)
{
    $options = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING => "",
        CURLOPT_USERAGENT => "spider",
        CURLOPT_AUTOREFERER => true,
        CURLOPT_CONNECTTIMEOUT => 120,
        CURLOPT_TIMEOUT => 120,
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_NOBODY => 1
    );

    $ch = curl_init($url);
    curl_setopt_array($ch, $options);
    $content = curl_exec($ch);
    $err = curl_errno($ch);
    $errmsg = curl_error($ch);
    $header = curl_getinfo($ch);
    curl_close($ch);
    return $header['url'];
}