我有许多文件夹,每个文件夹包含 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.
)
)
)