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

编程入门 行业动态 更新时间:2024-10-21 05:45:20
本文介绍了如何使用 ffmpeg/php 在单击按钮时将 mp4 文件转换为 mp3?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在处理如下所示的 php 代码,我正在使用系统命令 ffmpeg 将 mp4 文件转换为 mp3 (在下面的 case 语句中).

I am working on a php code as shown below where I am converting mp4 files into mp3 using system command ffmpeg (in the case statement below).

<?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,转换通常发生在页面刷新时.

After conversion, mp3 files goes into destination_dir. If new mp4 file arrives in $src_dir, the conversion usually happen on refresh of a page.

转换完成后,我将所有内容解析到表中,如下所示:

Once the conversion is complete, I am parsing everything into table as shown below:

<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 代码中进行哪些更改,以便单击 Go 按钮,将单个 mp4 转换为 mp3.

I am wondering what changes I should make in the php code above that on click of a Go button, conversion of individual mp4 into mp3 happen.

点击开始按钮后,属于单个行的单个 mp3 文件(来自 mp4)应该进入目标目录 ($destination_dir)强>.

On clicking of Go button, individual mp3 file (from an mp4) belonging to an individual row should go inside destination directory ($destination_dir).

推荐答案

最好的方法是使用 XMLHttpRequest 这里有更好的例子 AJAX - 服务器响应

The best way is to use XMLHttpRequest with better example here AJAX - Server Response

像这样创建一个javascript函数:

Create a javascript function like this :

<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 www.w3schools/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>

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

Add somewhere something to handle the response of the server as you want; example:

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

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

Modify the button to call the javascript function 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,但最好不要使用 ;)

You can use JQuery but it's better without ;)

编辑

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

Using form, you can do this:

<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")

和 page.php 或 your_encoder.php 用于 Ajax 调用:

and the page.php or your_encoder.php as you want for an Ajax call :

// 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存在就进行编码

    do the encoding if key exists

    发送您的新 html 表格.

    send your new html table.

    // 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. ?>

    编辑:

    我知道这是改编自您的 预览问题 但此代码不正确",它有效,没问题,但可以像这样优化:

    I know this adapted from your preview question but this code is "uncorrect", it works, no problem, but it can be optimized like this :

    来自...

    <?php // Here, you list only .mp4 in the directory // see: www.php/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 : www.php/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)); ?>
  • 更多推荐

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

    本文发布于:2023-11-24 21:07:11,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1626827.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:转换为   如何使用   时将   单击   按钮

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!