1 介绍
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。
笔者偶尔会做一些音视频的简单剪辑工具,多使用Ubuntu系统,且不想下载过多的工具软件,因此整理了一些 ffmpeg 常用的音视频操作方法,方便后续用 ffmpeg 做基础的音视频剪辑。
后续也会在本文持续更新 ffmpeg 相关的操作技巧和注意事项!
2 使用方法
2.1 ffmpeg命令剪辑音视频文件
视频格式转换
从mp4 转化为avi格式
ffmpeg -i v_input.mp4 v_input.avi
将音视频输出到mpg文件中
ffmpeg -i m_input.mp -i v_input.mp4 v_input.mpg
从视频中提取图片
ffmpeg -i v_input.mp4 -r 1 -f image2 v-%03d.jpeg
每秒从视频中提取一帧图片输出,格式为v-001.jpeg
将图片合并为视频
ffmpeg -f image2 -framerate 12 -i v-%03d.jpeg v.avi
将v-001.jpeg 类别的图片合并为一个视频,每秒12帧
剪辑音乐
ffmpeg -ss 60 -i dayu.mp3 -t 10 dayu1.mp3
-ss 表示起始偏移时间,此处即从60s开始剪辑
-t 表示时间周期,此处为需要剪辑10s
最终即为剪辑 0:60 - 0:70 的音乐
剪辑视频
ffmpeg -ss 60 -i v_input.mp4 -t 10 v_input1.mp4
-ss 表示起始偏移时间,此处即从60s开始剪辑
-t 表示时间周期,此处为需要剪辑10s
最终即为剪辑 0:60 - 0:70 的视频
拼接多个音频
cat dayu.txt
file dayu1.mp3
file dayu2.mp3
将目标文件按照file filename 逐行写入到文件dayu.txt中
ffmpeg -f concat -i dayu.txt -c copy dayu60-80.mp3
通过-f concat -i dayu.txt 指定合并和文件源,并输出到 dayu60-80.mp3 中即可
2.2 python脚本剪辑音视频文件
输出视频基础信息
from __future__ import unicode_literals, print_function
import argparse
import ffmpeg
import sys
parser = argparse.ArgumentParser(description='Get video information')
parser.add_argument('in_filename', help='Input filename')
if __name__ == '__main__':
args = parser.parse_args()
try:
probe = ffmpeg.probe(args.in_filename)
except ffmpeg.Error as e:
print(e.stderr, file=sys.stderr)
sys.exit(1)
video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
if video_stream is None:
print('No video stream found', file=sys.stderr)
sys.exit(1)
width = int(video_stream['width'])
height = int(video_stream['height'])
num_frames = int(video_stream['nb_frames'])
print('width: {}'.format(width))
print('height: {}'.format(height))
print('num_frames: {}'.format(num_frames))
############################################
测试
############################################
# python3 video_info.py v_input.mp4
width: 1920
height: 1080
num_frames: 1984
水平翻转视频(对每一帧进行左右翻转)
import ffmpeg
stream = ffmpeg.input('v_input1.mp4')
stream = ffmpeg.hflip(stream)
stream = ffmpeg.output(stream, 'v_output1.mp4')
ffmpeg.run(stream)
3 注意事项
- ffmpeg 有很多命令和参数,实际中如果不是需要精细处理,可以省略掉不必要的参数。
4 说明
软件环境
Ubuntu Desktop 20.04
ffmpeg version 4.2.4-1ubuntu0.1
参考文档
百度百科–ffmpeg
ffmpeg 官方文档
FFmpeg常用命令汇总+文档汇总
ffmpeg-python 0.1.1
github.com/kkroening/ffmpeg-python