当前位置: 代码网 > it编程>编程语言>C/C++ > 使用ffmpeg压缩视频

使用ffmpeg压缩视频

2024年07月28日 C/C++ 我要评论
视频每压缩一次,会小一点点,我这里的来源只是到2分钟内的视频,所以可以多次压缩。太大的视频就不要这样了,根据实际情况来吧。请注意,压缩视频可能会导致视频质量的损失,但可以减小视频文件的大小。使用 libx265 编码器进行压缩,质量级别为 28,并将压缩后的视频保存为。如下ps脚本实现了对文件夹中的未压缩过的视频或者大于12MB的视频进行压缩。执行该命令后,将生成一个经过压缩处理的输出视频文件。综合起来,这条命令的作用是将输入视频文件。进行压缩,并将压缩后的视频保存为。参数来平衡视频质量和文件大小。

一、到ffmpeg官网下载文件包:

download ffmpeg

下载后找到 bin 下的3个exe文件,复制到自己本机的某个目录下, 如:

二、使用命令行压缩:

ffmpeg -i input.mp4 -c:v libx265 -crf 28 -y output.mp4

这条命令使用 ffmpeg 工具对输入视频文件 input.mp4 进行压缩,并将压缩后的视频保存为 output.mp4 文件。以下是对命令中各个参数的详细解释:

  • ffmpeg: ffmpeg 是一个开源的音视频处理工具,可以用于处理、转换和编辑音视频文件。
  • -i input.mp4: 指定要处理的输入视频文件为 input.mp4-i 是 ffmpeg 中用于指定输入文件的参数。
  • -c:v libx265: 指定视频编码器为 libx265,这表示使用 h.265/hevc 编码器进行视频压缩。-c:v 是用于指定视频编码器的参数。
  • -crf 28: 指定视频的质量级别,数值越小表示质量越高,压缩率越低。在这里,-crf 28 表示使用 crf(constant rate factor)为 28 进行压缩,这是一个常用的视频质量控制参数。
  • -y: 在输出文件存在时自动覆盖。如果不加 -y 参数,在输出文件已存在时,ffmpeg 会提示是否覆盖输出文件。
  • output.mp4: 指定压缩后的视频文件名为 output.mp4

综合起来,这条命令的作用是将输入视频文件 input.mp4 使用 libx265 编码器进行压缩,质量级别为 28,并将压缩后的视频保存为 output.mp4 文件。执行该命令后,将生成一个经过压缩处理的输出视频文件。

请注意,压缩视频可能会导致视频质量的损失,但可以减小视频文件的大小。您可以根据需要调整 -crf 参数来平衡视频质量和文件大小。

三、使用ffmpeg对文件夹下的所有mp4文件进行批量压缩处理的powershell脚本:

如下ps脚本实现了对2个文件夹中的未压缩过的视频或者大于12mb的视频进行压缩。

视频每压缩一次,会小一点点,我这里的来源只是到2分钟内的视频,所以可以多次压缩。太大的视频就不要这样了,根据实际情况来吧。

function compressvideosinfolder($folder) {
    $ffprobepath = "d:\program\ffmpeg\ffprobe.exe"
    $ffmpegpath = "d:\program\ffmpeg\ffmpeg.exe"

    get-childitem -path $folder -filter *.mp4 | foreach-object {
        $filename = $_.name
        $tempoutputpath = join-path $folder "temp_$filename"
        $codec = (& $ffprobepath -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1 $_.fullname).trim()
        $filesize = $_.length / 1mb  # 文件大小转换为mb

        write-host "codec of file $filename is: $codec"
        write-host "file size of $filename is: $filesize mb"

        if ($codec -ne "codec_name=hevc" -or $filesize -gt 12) {
            write-host "file $filename needs compression..."
            write-host "compressing file $filename..."
            & $ffmpegpath -i $_.fullname -c:v libx265 -crf 30 -y $tempoutputpath
            move-item -path $tempoutputpath -destination $_.fullname -force
        } else {
            write-host "file $filename does not need compression, skipping..."
        }
    }
}

$folder1 = "e:\uploads\video"
$folder2 = "e:\uploads\testvideo"

compressvideosinfolder $folder1
compressvideosinfolder $folder2

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com