gpt4 book ai didi

php - 如何使用 ffmpeg/php 在按钮单击时将 mp4 文件转换为 mp3?

转载 作者:行者123 更新时间:2023-12-04 23:13:53 25 4
gpt4 key购买 nike

我正在编写如下所示的 php 代码,我正在转换 mp4 文件转为 mp3 使用系统命令 ffmpeg (在下面的案例陈述中) .

<?php 

$mp4_files = preg_grep('~\.(mp4)$~', scandir($src_dir));

foreach ($mp4_files as $f)
{

$parts = pathinfo($f);
switch ($parts['extension'])
{
case 'mp4' :
$filePath = $src_dir . DS . $f;
system('ffmpeg -i ' . $filePath . ' -map 0:2 -ac 1 ' . $destination_dir . DS . $parts['filename'] . '.mp3', $result); // Through this command conversion happens.
}
}

$mp3_files = preg_grep('/^([^.])/', scandir($destination_dir));

?>

转换后, mp3 文件进入destination_dir .如果新的 mp4 文件到达 $src_dir ,转换通常发生在页面刷新时。

转换完成后,我将所有内容解析为表格,如下所示:
<table>
<tr>
<th style="width:8%; text-align:center;">House Number</th>
<th style="width:8%; text-align:center;">MP4 Name</th>
<th style="width:8%; text-align:center;" >Action/Status</th>
</tr>
<?php
$mp4_files = array_values($mp4_files);
$mp3_files = array_values($mp3_files);
foreach ($programs as $key => $program) {
$file = $mp4_files[$key];
$file2 = $mp3_files[$key]; // file2 is in mp3 folder
?>
<tr>
<td style="width:5%; text-align:center;"><span style="border: 1px solid black; padding:5px;"><?php echo basename($file, ".mp4"); ?></span></td> <!-- House Number -->
<td style="width:5%; text-align:center;"><span style="border: 1px solid black; padding:5px;"><?php echo basename($file); ?></span></td> <!-- MP4 Name -->
<td style="width:5%; text-align:center;"><button style="width:90px;" type="button" class="btn btn-outline-primary">Go</button</td> <!-- Go Button -->
</tr>
<?php } ?>
</table>

问题陈述:

我想知道单击 时应该在上面的 php 代码中进行哪些更改前往按钮 , 个人转换 mp4转mp3 发生。

点击 前往按钮 , 属于单个行的单个 mp3 文件(来自 mp4)应该进去 目标目录 ($destination_dir) .

enter image description here

最佳答案

最好的方法是使用 XMLHttpRequest,这里有更好的例子 AJAX - Server Response

创建一个像这样的javascript函数:

<script>
// Check if the window is loaded
window.addEventListener('load', function () {

// Function to call Ajax request to convert or move file
var go = function(key, btn) {

// Initialize request
var xhttp = new XMLHttpRequest();

// Execute code when the request ready state is changed and handle response.
// Optional but recommended.
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// Do what you want here with the response here
document.getElementById('myResponse').innerHTML = this.responseText;

// Disable the button to not clicking again
// see https://www.w3schools.com/jsref/prop_pushbutton_disabled.asp
btn.disabled = true;
}
};

// Handle error message here
// Optional but recommended.
xhttp.onerror = function(event) {
document.getElementById('myResponse').innerHTML = 'Request error:' + event.target.status;
};

// Create request to the server
// Call the page that convert .mp4 or move .mp3
xhttp.open('POST', '/your_convert_file.php', true);

// Pass key or name or something (secure) to retrieve the file
// and send the request to the server
xhttp.send('key=' + key);
}
)};
</script>

根据需要添加一些东西来处理服务器的响应;例子:

<div id="myResponse"></div>

修改按钮以调用 javascript 函数 onclick="go('<?php echo $key; ?>', this); return false;" :

<button style="width:90px;" type="button" class="btn btn-outline-primary" onclick="go('<?php echo $key; ?>', this); return false;">Go</button>

花点时间了解 Ajax 调用的工作原理,如果您不使用表单,与服务器通信非常重要

您可以使用 JQuery,但最好不使用 ;)

编辑

使用表单,您可以这样做:

<form id="formId" action="your_page.php" method="post">

<!-- your table here -->

<input type="hidden" id="key" name="key" value="">
</form>

<script>
var go = function(key) {
document.getElementById('key').value = key;
document.getElementById('formId').submit();
}
</script>

编辑 :

用门牌号 $key 替换 basename($file, ".mp4")
以及 Ajax 调用所需的 page.phpyour_encoder.php :

// EXAMPLE FOR AJAX CALL

<?php
// Get the unique name or key
$key = $_POST['key'];

// If key is empty, no need to go further.
if(empty($_POST['key'])) {
echo "File name is empty !";
exit();
}

// Can be secure by performing string sanitize
$filePath = $src_dir . DS . $key . '.mp4';

// Check if file exists
// echo a json string to parse it in javascript is better
if (file_exists($filePath)) {
system('ffmpeg -i ' . $filePath . ' -map 0:2 -ac 1 ' . $destination_dir . DS . $parts['filename'] . '.mp3', $result);
echo "The file $filePath has been encoded successfully.";
. "<br />"
. $result;
} else {
echo "The file $filePath does not exist";
}
?>

如果你使用 form ,你必须:
  • 检查$_POST['key']是否存在
  • 如果 key 存在则进行编码
  • 发送您的新 html 表。

  • // EXAMPLE FOR FORM CALL

    <?php
    // Get the unique name or key
    $key = $_POST['key'];

    // If key is not empty.
    if(!empty($_POST['key'])) {
    // do the encoding here like above
    // set message success | error
    }

    // display your html table and message here.
    ?>

    编辑 :

    我知道这是根据您的 preview question 改编的,但是此代码“不正确”,可以正常工作,没问题,但是可以像这样进行优化:

    从...

    <?php 
    // Here, you list only .mp4 in the directory
    // see: https://www.php.net/manual/en/function.preg-grep.php
    $mp4_files = preg_grep('~\.(mp4)$~', scandir($src_dir));

    // Here you loop only on all .mp4
    foreach ($mp4_files as $f)
    {
    $parts = pathinfo($f);

    // Here, you check if extension is .mp4
    // Useless, because it is always the case.
    // see : https://www.php.net/manual/en/control-structures.switch.php
    switch ($parts['extension'])
    {
    case 'mp4' :
    $filePath = $src_dir . DS . $f;
    system('ffmpeg -i ' . $filePath . ' -map 0:2 -ac 1 ' . $destination_dir . DS . $parts['filename'] . '.mp3', $result); // Through this command conversion happens.
    }
    }

    $mp3_files = preg_grep('/^([^.])/', scandir($destination_dir));
    ?>

    ... 至

    <?php
    // Here, you list only .mp4 on the directory
    $mp4_files = preg_grep('~\.(mp4)$~', scandir($src_dir));

    // Here you loop only on all .mp4
    foreach ($mp4_files as $f)
    {
    $filePath = $src_dir . DS . $f;

    // No more need to switch, preg_reg do the job before looping
    // Through this command conversion happens.
    system('ffmpeg -i ' . $filePath . ' -map 0:2 -ac 1 ' . $destination_dir . DS . pathinfo($f, 'filename') . '.mp3', $result);
    }

    $mp3_files = preg_grep('/^([^.])/', scandir($destination_dir));
    ?>

    关于php - 如何使用 ffmpeg/php 在按钮单击时将 mp4 文件转换为 mp3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56430459/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com