ffmpeg命令大全(音视频拆分、倒放、拼接、绿幕变透明、位置截取)

构建堡垒机存放文件路径

output_file = 'sort.mp4'
output_folder = '/home/bmxm/FFmpeg_134/split/' + username + '/' + modelname + '/' + str(timestamp)
cmd = 'mkdir -p ' + output_folder
os.system(cmd)
# 构建输入文件、输出文件的完整路径
output_path = os.path.join(output_folder, output_file)

1.音视频文件倒放:

构建倒放命令ffmpeg -i input.mp4 -vf reverse -af areverse -preset superfast output.mp4

cmd = 'ffmpeg ' + '-i ' + input_path + ' -vf ' + 'reverse ' + '-af ' + 'areverse ' + '-preset ' + 'superfast ' + output_path + ' -y'
# 执行命令
os.system(cmd)

2.音视频文件拼接:

音频、视频拼接在一起:

#  构建输出文件的完整路径
out_file = 'output.mp4'
output_folder = '/home/bmxm/FFmpeg_134/join/' + + username + '/' + modelname + '/' + str(timestamp)
cmd = 'mkdir -p ' + output_folder
os.system(cmd)
output_path = os.path.join(output_folder, out_file)

# 构建命令ffmpeg -i <video_file> -i <audio_file> -c:v copy -c:a aac -strict experimental <output_file>
cmd = 'ffmpeg -i ' + wav2lip_mp4_path + ' -i ' + wav2lip_mp3_path +\
      ' -c:v copy -c:a aac -strict experimental ' + output_path
# 执行命令
os.system(cmd)

# 返回结果目录
logger.debug(f'{
      
      output_path}音视频拼接成功!')
return output_path

两个音视频文件拼接:

cmd1 = 'ffmpeg ' + '-i ' + input_path + ' -vcodec ' + 'copy ' + '-acodec ' + 'copy ' + '-vbsf ' + 'h264_mp4toannexb ' + '1.ts ' + ' -y'
# 构建第二个命令
cmd2 = 'ffmpeg ' + '-i ' + output_path + ' -vcodec ' + 'copy ' + '-acodec ' + 'copy ' + '-vbsf ' + 'h264_mp4toannexb ' + '2.ts ' + ' -y'
# 构建第三个命令
cmd3 = 'ffmpeg ' + '-i ' + '"concat:1.ts|2.ts" ' + '-acodec ' + 'copy ' + '-vcodec ' + 'copy ' + '-absf ' + 'aac_adtstoasc ' + output_path + ' -y'
# 执行命令
os.system(cmd1)
os.system(cmd2)
os.system(cmd3)
cmd = 'rm -f 1.ts 2.ts'
os.system(cmd)

多个音视频文件拼接:

#  遍历该地址下的所有文件名
files = file_exists(output_134_result)
if files is not None:
	mp4_files = [file for file in files if file.endswith(".mp4")]
    #  拼接视频(创建TXT、视频拼接命令)
    cmd = ""
    for p in mp4_files:
    	cmd += r"echo file \''{}/{}'\' >> file.txt ;".format(output_134_result, p)
    os.system(cmd)
    cmd = 'ffmpeg -f concat -safe 0 -i file.txt -y ' + output_134_result + '/over.mp4'
    os.system(cmd)
    cmd = 'rm -f file.txt'
    os.system(cmd)
    return send_file(output_134_result + '/over.mp4', mimetype='video/mp4')

3.音视频文件拆分:

‘ffmpeg -ss 00:00:00 -iinput.mp4 -t 20.56 -c:v copy -c:a copy output.mp4’

按时长将音视频拆分

def result_for_seconds(seconds, input_path):
    #  需要换文件名,也就是时间戳,生成新的文件
    filename = input_path.split("/")[-1]
    name = int(time.time())
    new_filename = str(name) + "." + filename.split(".")[-1]  # 在时间戳和后缀名之间添加点号
    output_path = input_path.replace(filename, new_filename)
    cmd_audio = 'ffmpeg ' + '-i ' + input_path + ' -ss ' + '00:00:00 ' + '-t ' + str(seconds) + ' ' +\
                output_path + ' -y'
    exit_code = os.system(cmd_audio)
    if exit_code == 0:
        logger.debug(f'{input_path}音视频按时长截取成功!{output_path}')
        return output_path
    else:
        return None

绿幕视频变透明背景

#(将没有透明通道的mp4格式转换为带透明通道的mov)
'ffmpeg -i input.mp4 -vf "chromakey=0x00FF00:0.2:0.3" -c copy -c:v png output.mov'
#(这一行的输出结果在web端播放是透明的,在本地播放是 绿幕)
'ffmpeg -y -i output.mov -vf "chromakey=0x00FF00:0.25:0.1" -c copy -c:v libvpx-vp9 -c:a libopus output.webm'

参数说明:
-vf: 指定应用于视频的视频过滤器。
chromakey: 指定要应用的视频过滤器名称,即绿幕抠图。
0x00FF00: 指定绿幕背景的颜色值,这里是绿色(RGB颜色值)。
0.2: 指定要抠图的颜色范围宽度,即相似度阈值。范围在0到1之间,数值越小则颜色抠图越精确。
0.3: 指定抠图时所使用的平滑因子,范围在0到1之间,数值越大则抠图结果越平滑。

按指定尺寸对视频进行裁剪

查看原视频尺寸
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4

例如,如果你想从一个1280x720的视频中裁剪出一个宽度为640,高度为480的视频片段,并且裁剪区域的左上角起始于位置(200, 100),命令应该这样写:
ffmpeg -i input.mp4 -filter:v “crop=640:480:200:100” output.mp4

最后附带自己整理命令行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/douliyoufeng/article/details/131806765