如果需要体积比较小,可以将h265格式的mp4封装。60M转为40M,花了583.61s
,太慢了。
#
# ffmpeg -i test.flv -c:v libx265 -c:a copy -crf 20 test.mp4
把coderStr 的值改成下面这个。
coderStr = " -c:v libx265 -c:a copy -crf 20 "
如果需要速度快,直接复制原数据。速度最快。体积没多大变化。
# ffmpeg -i test.flv -vcodec copy -acodec copy test3.mp4
用命令行批量转时,遇到了一些文件名含空格出错的事情。所以,这里通过python循环来批量执行命令。
脚本如下
import os
from os import path as mpath
import time
def ffmpeg_updatefile(path ,coderStr ,oldFormat ,newFormat ):
# 获取文件路径,获取文件名称列表
source = mpath.normpath(path)
videoList = os.listdir(source)
videoListTemp = [];
# 只选择目录下的mkv文件
for Sname in videoList:
if Sname.endswith(oldFormat):
videoListTemp.append(Sname)
# 执行ffmpeg命令
for i in videoListTemp:
oldname = i
oldname = os.path.join(path,oldname)
output = i[0:-4]
newname = output + newFormat
newname = os.path.join(path,newname)
otherStr = " "
cmd = "ffmpeg -i "+ otherStr +"\""+ oldname +"\" "+ coderStr +" \""+ newname + "\""
#os.system(cmd)
#time.sleep(12)
print(cmd)
pass
if __name__ == '__main__':
#path = r'F:\result\video2'
#当前目录
path = os.getcwd()
oldFormat = '.flv'
newFormat = '.mp4'
coderStr = " -vcodec copy -acodec copy "
ffmpeg_updatefile(path,coderStr,oldFormat,newFormat)
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
参数选项:
(1) -an: 去掉音频
(2) -vn: 去掉视频
(3) -acodec: 设定音频的编码器,未设定时则使用与输入流相同的编解码器。音频解复用在一般后面加copy表示拷贝
(4) -vcodec: 设定视频的编码器,未设定时则使用与输入流相同的编解码器,视频解复用一般后面加copy表示拷贝
(5) –f: 输出格式(视频转码)
(6) -bf: B帧数目控制
(7) -g: 关键帧间隔控制(视频跳转需要关键帧)
(8) -s: 设定画面的宽和高,分辨率控制(352*278)
(9) -i: 设定输入流
(10) -ss: 指定开始时间(0:0:05)
(11) -t: 指定持续时间(0:05)
(12) -b: 设定视频流量,默认是200Kbit/s
(13) -aspect: 设定画面的比例
(14) -ar: 设定音频采样率
(15) -ac: 设定声音的Channel数
(16) -r: 提取图像频率(用于视频截图)
(17) -c:v: 输出视频格式
(18) -c:a: 输出音频格式
(18) -y: 输出时覆盖输出目录已存在的同名文件
-vcoder 设定视频的编码器,未设定时则使用与输入流相同的编解码器