如何将多个视频连续转换为 AVI

如何将多个视频连续转换为 AVI

我有许多文件夹,每个文件夹包含 6 个或更多视频。我目前正在使用此代码将它们转换为 avi:

ffmpeg -i input.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output.avi

我不用为每个视频都输入代码,有没有一个代码可以让我依次转换文件夹中的所有视频?我使用的是 Windows。

答案1

这是使用当前方法将 .mp4 转换为 .avi 的 shell 循环。如果您有其他格式和文件扩展名,则必须对其进行改进:

for i in *.mp4; do ffmpeg -i "$i" -vcodec mpeg4 -qscale:v 1 -aspect 16:9 "$(basename "$i" .mp4).avi"; done

因此在包含一些空格的文件中:

#!/bin/sh

for i in *.mp4; do
    ffmpeg -i "$i" -vcodec mpeg4 -qscale:v 1 -aspect 16:9 "$(basename "$i" .mp4).avi"
done

i 是遍历所有匹配 *.mp4 的文件的变量。basename 命令删除了 .mp4 扩展名,然后我们可以添加 .avi。所有引号都用于处理任何类型的文件,包括带有空格或其他特殊字符的文件,而不会破坏整个过程。$() 代表命令的输出,可以将其括起来,并且仍然包含引号而不会出现问题。

答案2

这是我用来转换一个文件夹中尚未转换的所有视频的代码。如果它发现文件已存在于目标文件夹中,它将跳过该文件。我结合自己的知识、网络和 chatgtb 制作了 bat 文件。

设计用于从 Windows 中的 .bat 文件运行。

确保将源文件夹和目标文件夹更改为您的文件夹路径。

设置“文件扩展名=”可让您选择任意数量的视频格式进行转换。输入格式时,中间留有空格,例如设置“文件扩展名= .mkv .mov .avi”

h264_nvencffmpeg 命令中的部分使用您的显卡 (GPU) 而不是 CPU。还有另一篇文章列出了不同的选项这里

我的示例也是以相对较低的质量转换为 mp4。您可以将 mp4 更改为 avi,然后它会转换为 avi。您还可以根据自己的喜好调整质量设置。

@echo off

REM Set the source folder path
set "source_folder=C:\source\folder"

REM Set the destination folder path
set "destination_folder=C:\destination\folder"

REM Set the list of file extensions to include
set "file_extensions=.mp4 .mkv"

REM Loop through each file extension in the list
for %%x in (%file_extensions%) do (
    REM Loop through each video file with the current extension in the source folder
    for %%a in ("%source_folder%\*%%x") do (
        REM Extract the filename with extension
        set "filename=%%~nxa"

        REM Check if the output file already exists
        if not exist "%destination_folder%\%%~na.mp4" (
            REM Convert video to MP4 using FFmpeg
            ffmpeg -i "%%~a" -c:v h264_nvenc -preset medium -crf 23 -c:a aac -b:a 128k "%destination_folder%\%%~na.mp4"


        ) else (
            echo Skipping conversion of "%%~nxa" - Output file already exists.
        )
    )
)

相关内容