精华内容
下载资源
问答
  • Linux中ffmpeg批量压缩音频 安装ffmpeg sudo apt-get install ffmpeg 压缩音频代码 ffmpeg -i input.mp3 -codec:a libmp3lame -b:a 128k output.mp3 其中-b:a 128k 表示恒定压缩比特率为128k 示例 现在有一个music...

    Linux中ffmpeg批量压缩音频

    安装ffmpeg

    sudo apt-get install ffmpeg
    

    压缩音频代码

    ffmpeg -i input.mp3 -codec:a libmp3lame -b:a 128k output.mp3
    

    其中-b:a 128k 表示恒定压缩比特率为128k

    示例

    现在有一个music文件夹,里面有10首格式为.flac的音频文件

    批量处理

    for file in *.flac; do ffmpeg -threads 16 -i "$file" -codec:a libmp3lame -b:a 128k "$file".mp3; done
    
    

    -thread是CPU线程,根据CPU来定
    根据文件夹深度,可以自行更改条件,如

    for file in ./*.flac
    for file in ./*/*.flac
    …
    

    现在ffmpeg会输出10个*.flac.mp3的文件,这时只要批量删除原文件(ffmpeg貌似不能直接输出替换),并且重命名一下就行了。

    find . -name "*.flac.mp3" -exec rename -d -e 's/\.flac//g' '{}' ';'
    find . -name "*.flac" -exec rm '{}' ';'
    
    展开全文
  • 于是乎出现过测试人员通过winzip分批压缩(part1, part2, part3), 再通过微信传输视频压缩包的"乱象": 作为测试总监,手底下的人这么"压缩视频“我是觉得丢人的, (1).视频文件已经是二进制文件了,其实winzip已经...

    案例故事:测试过程中录制的Bug视频太大,导致无法在微信客户端传输,也无法作为附件上传到Bug系统问题,
    曾经出现过测试人员通过winzip分批压缩(part1, part2, part3), 再通过微信传输视频压缩包的 " 高端操作 ":

    作为测试总监,手底下的人这么"压缩视频“我是觉得丢人的,

    作为测试总监,手底下的人这么"压缩视频“我是觉得丢人的,
    (1).视频文件已经是二进制文件了,其实winzip已经压缩不了什么,
    winzip压缩软件一般只适合压缩文本数据文件。
    (2).视频压缩应该使用Video的编码技术实现二次编码压缩,业界最常用的肯定是ffmpeg.exe工具。

    会做视频压缩是合格的测试人员的必备能力之一,
    本篇主要介绍如何通过ffmpeg 来实现批量压缩视频。


    视频的基本知识点
    1. 视频文件是由视频流,音频流组成的将一系列图片快速播放产生的动态图像,音频的聚合体, 视频文件的音频流一般非常小,但是视频流非常大,视频流的大小主要取决于编码技术,分辨率,帧率这3个因素。

    2. 编码技术Codec,是压缩多张图片的编码技术,比如多张图片组成的一个视频,
      如果相连图片的像素相差不大,则只记录差异像素点即可,
      从而实现了不影响画质的情况下,将视频文件最小化,
      ffmpeg的默认的编码格式是:H.264, 其实还有很多编码格式,
      比如Mpeg4, WMV10,H.263等等。

    3. 分辨率Resolution, 是视频每一帧(每张图片)的图片大小,是由一个一个像素点(pixel)组成的。

    4. 帧率是fps, 每秒钟的图片数,一般每秒4张图片以上(>4fps)就可以有明显的视频动画效果。

    5. 视频容器是Container, 是用于封装视频流,音频流的一个容器格式,一般有.mp4, .3gp, .avi, .mov等等。

    6. 比特率bitrate,是每秒钟的数据量,其数据量大小基本是受视频编码格式,分辨率,帧率3者因素影响的。

    7. 视频每做一次压缩,视频的数据量就会减少,且不可逆!

    准备阶段
    1. ffmpeg的下载地址可以去:ffmpeg - 音视频图像编解码工具这篇文章查看。
      视频压缩的常用命令模板是:
      ffmpeg -i input.mp4 -s 640x480 -r 12 -y output.mp4
      以上命令模板可以将input.mp4进行重编码(按帧率12fps,分辨率640x480),
      并另存为output.mp4 , -y的意思是如果已经有这个文件,不询问直接覆盖。

    2. 如果要批量压缩视频,我们还是用输入输出模式,文件结构如下:

    	+---Input_Video    #批量放入待压缩的视频
    	|       1.mp4
    	|       2.mp4
    	|       
    	+---Output_Video   #批量输出已压缩的视频, 加一个后缀_c,代表以及转换完。
    	|       1_c.mp4
    	|       2_c.mp4
    	|
    	\convert_video.py  #Python视频转码脚本,双击运行即可
    
    1. 记得将ffmpeg.exe 丢到系统Path环境变量路径下去。

    Python批处理脚本形式

    记住批处理脚本的精髓:批量顺序执行语句

    # coding=utf-8
    
    import os
    
    NEW_RESOLUTION = "640x480"  # 目标分辨率,常量
    NEW_FPS = 12  # 目标帧率,常量
    
    curpath = os.getcwd()  # 获取当前路径
    input_dir = os.path.join(curpath, "Input_Video")
    output_dir = os.path.join(curpath, "Output_Video")
    input_video_list = os.listdir(input_dir)  # 获取视频列表
    
    # 如果没有Output_Video这个文件夹,则创建这个文件夹
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)
    
    # 开始批量二次编码压缩视频转码
    for each_video in input_video_list:
        video_name, _ = os.path.splitext(each_video)  # _是没意义,就只是一个无用代号,占个坑而已
        ffmpeg_command = ("ffmpeg -i %s%s%s -s %s -r %s -y %s%s%s_c.mp4" % (
            input_dir, os.sep, each_video, NEW_RESOLUTION, NEW_FPS, output_dir, os.sep, video_name))
        print(ffmpeg_command)
        os.system(ffmpeg_command)
    
    os.system("pause")
    

    Python面向过程函数形式

    面向过程函数的编程思维应该是这样的:
    你需要多少个功能(函数),才能做成这个事。
    最好把功能(函数)都尽量封装好,只暴露一些的参数接口即可。

    # coding=utf-8
    
    import os
    
    
    def convert_video(input_video_path, new_resolution, new_fps, output_video_path):
        ffmpeg_command = ("ffmpeg -i %s -s %s -r %s -y %s" % (
            input_video_path, new_resolution, new_fps, output_video_path))
        print(ffmpeg_command)
        os.system(ffmpeg_command)
    
    
    curpath = os.getcwd()  # 获取当前路径
    input_dir = os.path.join(curpath, "Input_Video")
    output_dir = os.path.join(curpath, "Output_Video")
    input_video_list = os.listdir(input_dir)  # 获取视频列表
    
    # 如果没有Output_Video这个文件夹,则创建这个文件夹
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)
    
    # 开始批量二次编码压缩视频转码
    for each_video in input_video_list:
        video_name, _ = os.path.splitext(each_video)  # _是没意义,就只是一个无用代号,占个坑而已
        input_video_path = input_dir + os.sep + each_video
        output_video_path = output_dir + os.sep + video_name + "_c.mp4"
        convert_video(input_video_path, "640x480", "12", output_video_path)
    os.system("pause")
    

    Python面向对象类形式

    面向对象类的编程思维应该是这样的:
    如果给你一个空白的世界,在这个世界里你需要哪些种类的事物,
    这些种类的事物都具备哪些共有的属性与方法,
    这些种类(类)的事物(对象),和其他种类(其他类)的事物(其他对象)有什么关系。
    尽量把这些类封装好,只暴露对外的属性(变量)和方法(函数)即可。

    # coding=utf-8
    
    import os
    
    
    class VideoConverter(object):
        def __init__(self, input_video_path, new_resolution, new_fps, output_video_path):
            self.input_video_path = input_video_path
            self.new_resolution = new_resolution
            self.new_fps = new_fps
            self.output_video_path = output_video_path
    
        def convert_video(self):
            ffmpeg_command = ("ffmpeg -i %s -s %s -r %s -y %s" % (
                self.input_video_path, self.new_resolution, self.new_fps, self.output_video_path))
            print(ffmpeg_command)
            os.system(ffmpeg_command)
    
    
    if __name__ == '__main__':
        curpath = os.getcwd()  # 获取当前路径
        input_dir = os.path.join(curpath, "Input_Video")
        output_dir = os.path.join(curpath, "Output_Video")
        input_video_list = os.listdir(input_dir)  # 获取视频列表
    
        # 如果没有Output_Video这个文件夹,则创建这个文件夹
        if not os.path.exists(output_dir):
            os.mkdir(output_dir)
    
        # 开始批量二次编码压缩视频转码
        for each_video in input_video_list:
            video_name, _ = os.path.splitext(each_video)  # _是没意义,就只是一个无用代号,占个坑而已
            input_video_path = input_dir + os.sep + each_video
            output_video_path = output_dir + os.sep + video_name + "_c.mp4"
            v_obj = VideoConverter(input_video_path, "640x480", "12", output_video_path)
            v_obj.convert_video()
        os.system("pause")
    

    本案例素材下载

    包括:Input_Video(含一个H.264_1280x720_24fps.mp4视频),Python脚本
    跳转至官网下载
    武散人出品,请放心下载!

    小提示以上3种形式,只是为了训练培养编程思维,其实主要的核心代码就是ffmpeg命令那么一条,
    如果不涉及批量处理,直接敲ffmpeg原始命令即可实现转码,
    以上基本可以实现将100M的视频压缩到10M左右。


    更多更好的原创文章,请访问官方网站:www.zipython.com
    自拍教程(自动化测试Python教程,武散人编著)
    原文链接:https://www.zipython.com/#/detail?id=52f5f5ed29a14614bc522754af3b7b4e
    也可关注“武散人”微信订阅号,随时接受文章推送。

    展开全文
  • 1:提前安装好ffmpeg 2:有Linux系统 Linux(Ubuntu)安装ffmpeg请看这里 Linux(centos)安装ffmpeg请看这里 Windows安装请看这里 ffmpeg转码时间长(CPU性能越强越短),假如想在服务器上操作可以看这里配置云...

    写在前面
    要求
    1:提前安装好ffmpeg
    2:有Linux系统
    Linux(Ubuntu)安装ffmpeg请看这里
    Linux(centos)安装ffmpeg请看这里
    Windows安装请看这里
    ffmpeg转码时间长(CPU性能越强越短),假如想在服务器上操作可以看这里配置云服务器

    1. ffmpeg压制视频
      举例
    ffmpeg -i s.avi -c:v libx264 -crf 24 s.mp4
    
    ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4 #采用H.264视频压缩算法和AAC音频压缩算法,视频帧率10fps,音频码率32k
    
    ffmpeg -i input.mp4 -r 10 -b:a 32k output.mp4 #对它降低fps和音频码率的方法大大压缩文件大小,而清晰度不变。
    

    注意 -i 后面可以是任意视频文件
    用linus批量压缩视频代码

    while true
    do
    for i in ./*.mp4
    do
    ffmpeg -re -i "$i" -vcodec libx264 -crf 35 $i.mp4
    done
    done
    

    使用方法:用winscp在Linus所需压缩
    用Windows批量压缩视频代码

    for %%a in ("*.ts") do ffmpeg -i "%%a"  -vcodec  libx264 -crf 35 "\%%~na.mp4
    pause
    

    解释:-i后面跟任意常见视频文件都可以 后面转换封装为任意常见视频容器(任意视频文件后缀名)都可以
    -crf 后面的数字是压缩的参数 越小越快转码出来体积越大,反之越大转码时间越长体积越小,
    20~30是不错的兼顾速度与码率的参数
    p.s CPU越强速度越快
    举例
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可以看到这里参数为24时压缩为原来的36%,清晰度基本上看不出变化。
    —————————————————结束分割线—————————————————————
    每一分我都当作是你十分的喜欢(❤ ω ❤)在这里插入图片描述

    展开全文
  • ffmpeg 图片压缩成视频

    2016-06-08 09:47:50
    利用ffmpeg将图片压缩成视频,c++源码
  • 利用ffmpeg批量转码视频

    千次阅读 2017-09-10 18:17:15
    for %a in ("*.TS") do ffmpeg -i "%a" -f mp4 -codec copy "\%~na.mp4 因上面是TS->mp4 所以可直接生成在原始位置 如果同格式转码 需要在当前位置预先创建文件夹末尾语句改为 "newfiles\%~na.mp4" 中间的转码...
    for %a in ("*.TS") do ffmpeg -i "%a" -f mp4 -codec copy "\%~na.mp4


    因上面是TS->mp4  所以可直接生成在原始位置


    如果同格式转码  需要在当前位置预先创建文件夹末尾语句改为  

    "newfiles\%~na.mp4"

    中间的转码代码可根据自己需求转换

    展开全文
  • ffmpeg -i input.avi -vf scale=-1:720 -b:v 2000K -c:v h264_videotoolbox output.mp4 -i input.avi 需要压缩转码的视频文件 -vf scale=-1:720 压缩成720P -b:v 2000K 参考B站上的视频,配合720P设置,直接影响...
  • ffmpeg视频转码压缩

    万次阅读 多人点赞 2018-02-05 19:26:49
    1、准备工作: http://ffmpeg.org/download.html 下载之后,正常安装,然后将bin目录加入全局环境变量;...压缩视频之前,我们要了解原视频的详细信息,利用MediaInfo可以查看视频的详细信息; 具体如下:
  • 图像x265压缩编码2.1 单命令2.2 裁剪预处理2.3 批量压缩编码3. 视频x265压缩编码3.1 单命令3.2 批量压缩编码 上一篇博文详细讲解了【FFmpeg命令】使用x264库进行图像视频(批量)压缩编码,本文介绍FFmpeg里x265库...
  • 1.增加手动输入视频码率和自动压缩视频码率功能。 2.增加子文件夹视频处理,输出视频原子文件夹目录不变。 源码如下: @echo off&setlocal enabledelayedexpansion&title ffmpeg batch if not ...
  • 1:提前安装好ffmpeg 2:有Linux系统 如何安装ffmpeg可以看这里 ffmpeg转码时间长(CPU性能越强越短),假如想在服务器上操作可以看这里配置云服务器 https://editor.csdn.net/md/?articleId=104009520 ...
  • ffmpeg命令行批量转换视频

    万次阅读 2016-10-21 12:57:59
    for %a in ("*.mp4") do ffmpeg -i "%a"-threads 2 -vcodec libx264 -preset slow -crf 20 -y "newfiles\%~na.mp4...将当前目录下的mp4批量压缩,并保存至当前目录下的newfiles文件夹(必须先建好),沿用原来文件名。
  • 在安装FFMPEG SDK的前提下,在cmd命令行种调用如下命令。其中srcfile和dstfile分别根据自身情况进行路径的修改。 for %a in ("srcfile\*.mp4") do ffmpeg -i "%a" -vcodec libx264 -b:v 200k -y "dstfile\%~na.mp4...
  • 从官方文档可以看出,目前FFmpeg已支持非常多的视频编码器解码器,其中编码有包括libx264和libx265。往下拉,我们可以看到FFmpeg提供了非常丰富的配置选项,每一个都附有精简的说明,如: > b (bitrate) > - Set bit...
  • FFmpeg框架系列:批量处理视频操作批量压缩视频命令执行效果完整代码 批量压缩视频命令 windows下FFmpeg安装目录:F:\ffmpeg\ffmpeg\bin\ffmpeg.exe 原视频:F:\ffmpeg_yasuo\compress3\91.mp4 生成后的压缩视频:F:\...
  • 本脚本是个人工作上常用的一个脚本类,有需要的可以下载下来参考参考,参考完即可再编译别的类型的FFmpeg批量处理脚本 我常用的工作环境(微信或者网页上要用的音视频):正常压缩视频,压缩视频为固定的分辨率...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,284
精华内容 513
关键字:

ffmpeg批量压缩