FFmpeg常用基本命令行

FFmpeg实战指南
本文详细介绍FFmpeg命令在音视频处理中的应用,包括视频转码、剪切、倒放、拼接及添加水印等操作,适合程序员快速掌握音视频处理技巧。

        本文收集记录了笔者使用过的FFmpeg命令,亲测可用,并不是简单的copy别人的FFmpeg大全,下面的命令大部分都是本人测试成功过的,大家可以放心使用。

        音视频技术是程序员日常生活中经常用到的,比如转码需求,同事下载的avi视频,电脑上没有播放器可以播放此格式的视频文件,那你就可以帮他把avi转成mp4格式,你两个就可以愉快的观看了;截取视频需求,录制视频后,可能不需要前面3秒和后面5秒,那就需要剪切或者拼接视频;想提取视频中的某一帧画面出来;不想看到视频画面,只想听到里面的声音,那就提取视频中的音频转为mp3;出于某种特殊的需求,你想倒着播放一段视频等等,太多太多了,再比如视频中加GIF,视频中加文字,抖音合拍功能,视频加速播放。上面的这些需求或者是想法,都可以用命令行轻松搞定,FFmpeg的强大,只有你想不到,没有他做不到。下面就列举了一些常用的简单命令,让我们一起看一下吧,另外看完后,最好是动手去实践一番。

欢迎大家关注文明的iOS开发公众号: 
方式1、搜索:“iOS开发by文明” 
方式2、扫描下方二维码 

一、获取视频信息

ffmpeg -i video.avi //查看本地的视频信息

ffmpeg -i http://static.tripbe.com/videofiles/20121214/9533522808.f4v.mp4//查看远程http视频信息

二、分离视频音频流

ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流

ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流

ffmpeg -i input.mp4 -an output.mp4             //去掉视频中的音频

ffmpeg -i test.avi -vcodec copy -an output.avi //去掉视频中的音频

三、视频转码相关

ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 output.mp4//ts视频流转mp4

ffmpeg -i test.h264 -vcodec copy -f mpegts output.ts//h264视频转ts视频流

ffmpeg -i test.h264 -vcodec copy -f mp4 output.mp4//h264视频转mp4

ffmpeg -i test.mp4 -b:v 640k output.flv //mp4转flv

ffmpeg -i test.mp4 -acodec copy -vcodec copy -f flv output.flv //mp4转flv

ffmpeg -i test.flv -b:v 640k output.mp4 //flv转mp4

ffmpeg -i test.mp4 -s 176x144 -vcodec h263 -r 25 -b 12200 -ab 12200 -ac 1 -ar 8000 output.3gp //mp4转3gp

ffmpeg -i test.avi -s aqif -vcodec -acodec mp3 -ac 1 -ar 8000 -r 25 -ab 32 -y output.3gp //avi转3gp

ffmpeg -i test.3gp -f avi -vcodec xvid -acodec mp3 -ar 22050 output.avi //3gp转flv

ffmpeg -i test.flv -s 176x144 -vcodec h263 -r 25 -b 200 -ab 64 -acodec mp3 -ac 1 -ar 8000 output.3gp //flv转3gp

ffmpeg -i test.mp4 output.avi //mp4转avi

ffmpeg -i test.flv -vcodec h264 -r 25 -b 200 -ab 128 -acodec mp3 -ac 2 -ar 44100 output.mp4 //flv转mp4

ffmpeg -i test.mp4 -c:v libx264 -ar 22050 -crf 28 output.flv //mp4转flv

ffmpeg -i test.avi -c copy -map 0 output.mp4 //avi转mp4

ffmpeg -i  http://vfile1.grtn.cn/2018/1542/0254/3368/154202543368.ssm/154202543368.m3u8 -c copy -bsf:a aac_adtstoasc -movflags +faststart test.mp4 //m3u8转mp4

ffmpeg -i test.mkv -y -vcodec copy -acodec copy output.mp4 //mkv转mp4

ffmpeg -i test.mkv -vcodec copy -acodec copy output.avi  //mkv转avi

四、图像处理相关

ffmpeg –i test.mp4 -y -f image2 -ss 8 -t 0.001 -s 350x240 testImage.jpg //截取指定时间的缩略图,-ss后跟的时间单位是秒

ffmpeg -i input.mp4 -vf "movie=logo.png [logo]; [in][logo] overlay=10:10:1 [out]" output.mp4//添加图片水印

ffmpeg -i input.mp4 -i logo.png -filter_complex overlay test1.mp4//添加图片水印

ffmpeg –i input.mp4 -acodec copy-vcodec copy -vf "movie=test.png[watermark];[in][watermark]overlay=10:10:1[out]" output.mp4//添加图片水印

ffmpeg -y -i test2.mp4 -ignore_loop 0 -i test.gif -filter_complex overlay=0:H-h test_out2.mp4//添加GIF

ffmpeg -i input.flv -vf "drawtext=fontfile=simhei.ttf: text='抖音':x=100:y=10:fontsize=24:fontcolor=yellow:shadowy=2" drawtext.mp4//添加文字水印

五、视频方向处理相关

ffmpeg -i test.mp4 -metadata:s:v rotate="90" -codec copy out.mp4//旋转90°

ffmpeg -i test.mp4 -vf "transpose=1" out.mp4//顺时针旋转90°

ffmpeg -i test.mp4 -vf "transpose=2" out.mp4//逆时针旋转90°

ffmpeg -i test.mp4 -vf "transpose=3" out.mp4//顺时针旋转90°后再水平翻转

ffmpeg -i test.mp4 -vf "transpose=0" out.mp4//逆时针旋转90°后再水平翻转

ffmpeg -i test.mp4 -vf hflip out.mp4//水平翻转视频画面

ffmpeg -i test.mp4 -vf vflip out.mp4//垂直翻转视频画面

六、视频剪切相关

ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg//提取图片

ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi    //-r 提取图像的频率,-ss 开始时间,-t 持续时间
//从10s处开始剪切,持续15秒(此方法有时候会遇到视频第一帧黑屏,就是未播放时候的封面是黑色的,原因是未定位到关键帧I帧)
ffmpeg -i test.mp4 -ss 10 -t 15 -codec copy cut.mp4
//从10s处开始剪切,持续15秒(此方法为优化后的方法,此剪切视频的方法可以解决第一帧黑屏问题,但是可能切割的时间落点稍稍的有一丢丢的不准确,但是应该可以落在误差范围之内)

ffmpeg -ss 10 -t 15 -i test.mp4 -codec copy cut.mp4

 

七、倒放音视频&加速视频&减速视频

ffmpeg.exe -i inputfile.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast reversed.mp4 //视频倒放,无音频

ffmpeg.exe -i inputfile.mp4 -vf reverse reversed.mp4//视频倒放,音频不变

ffmpeg.exe -i inputfile.mp4 -map 0 -c:v copy -af "areverse" reversed_audio.mp4//音频倒放,视频不变

ffmpeg.exe -i inputfile.mp4 -vf reverse -af areverse -preset superfast reversed.mp4//音视频同时倒放

ffmpeg -i inputfile.mp4 -vf setpts=PTS/2 -af atempo=2 output.mp4//视频加速,帧速率变为2倍,调整倍速范围【0.25,4】

ffmpeg -i input.mkv -an -filter:v "setpts=0.5*PTS" output.mkv//视频减速播放

八、视频拼接

 

这里全部以mp4文件为例子,介绍两种方法,如果不是mp4文件,可以尝试先转码为mp4后再拼接起来

1、将 mp4 先转码为 mpeg文件,mpeg是支持简单拼接的,然后再转回 mp4。

ffmpeg -i 1.mp4 -qscale 4 1.mpg 
 
ffmpeg -i 2.mp4 -qscale 4 2.mpg 

cat 1.mpg 2.mpg | ffmpeg -f mpeg -i - -qscale 6 -vcodec mpeg4 output.mp4             

 

2、使用ts拼接

先将 mp4 转化为同样编码形式的 ts 流,因为 ts流是可以 concate 的,先把 mp4 封装成 ts ,然后 concate ts 流, 最后再把 ts 流转化为 mp4。

ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts  

ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts

ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4             

九、视频的合并

下面通过动手实现抖音合拍功能来演示命令行的使用,首先准备好两个文件input1和input2,都是用手机拍摄的,高度相同;

1、两个视频的合并(注意参数hstack代表是横向合并,也就是左右合并,横向合并的形象类比为“川”;如果是竖向合并,也就是上下合并,用参数vstack,竖向或者纵向合并的形象类比为“三”)

ffmpeg -i input1.mp4 -i input2.mp4 -lavfi hstack output.mp4

注意:经过此命令处理后的视频output.mp4只会保留input1的音频

2、提取视频中的音频并合并音频

ffmpeg -i input1.mp4 -vn -y -acodec copy audio1.m4a

ffmpeg -i input2.mp4 -vn -y -acodec copy audio2.m4a

ffmpeg -i audio1.m4a -i audio2.m4a -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 audio3.mp3

3、把audio3.mp3文件合并到output.mp4中去

    ffmpeg -i output.mp4 -i audio3.mp3 -c:v copy -c:a aac -strict experimental success.mp4

最后我们得到的success.mp4就是合拍视频,包含了两个视频的音频。

 

三个视频合并(input=3表示希望合并的视频的个数)

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3 output.mp4

常用参数说明:

命令格式:
    ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
    ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
    (1) h264: 表示输出的是h264的视频裸流
    (2) mp4: 表示输出的是mp4的视频
    (3)mpegts: 表示ts视频流

主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器,一般后面加copy表示拷贝

音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器,一般后面加copy表示拷贝

-an 不处理音频

 

本文章未取得本人同意情况下禁止转载。

<think>嗯,用户现在要求获取FFmpeg命令行的详细说明。之前用户问过关于去除视频字幕的免费软件,其中提到了FFmpeg命令行用法,现在用户显然是想深入了解这个工具。 从对话历史看,用户应该是个有一定技术背景的人,可能是个视频编辑爱好者或者开发者。ta先是询问去字幕软件,现在又专门追问FFmpeg的详细用法,说明对命令行工具接受度很高。不过要注意用户可能只是需要实用命令示例,而非底层原理。 我提供的三个引用很有价值:引用[1]说明FFmpeg的多功能性;引用[2]提到它的广泛应用和命令行特性;引用[3]则涉及实时流处理等高级功能。这些正好能支撑后续的详细说明。 用户最后特别强调要获取“详细说明”,意味着这次回答需要: - 全面覆盖基础命令结构 - 包含具体场景的实用案例 - 保持技术准确性 - 特别注意数学公式的LaTeX格式要求 考虑到用户之前关注视频字幕处理,应该重点突出视频相关的命令示例,比如裁剪、模糊、转码等操作。同时要遵守系统指令:所有公式必须用$...$包裹,独立公式单独成段。 回复结构可以设计为:先精要概括FFmpeg是什么(引用[1][2]),接着拆解命令行基本框架,然后分类展示常用场景命令,最后附上动态字幕处理方案(呼应之前提问)。每个技术点都要配具体示例代码,比如用: ```bash ffmpeg -i input.mp4 -vf "crop=iw:ih-100" output.mp4 ``` 演示底部字幕裁剪 需要特别注意模糊动态字幕的进阶命令,这是用户之前问过的子问题。要用$$包裹变量表达式如$blur_height=ih*0.1$,并添加关键帧跟踪说明。 最后生成的相关问题要延续技术深度,比如探询HLS流处理或GPU加速,保持与用户技术兴趣的一致性。 对了,所有引用标记必须自然插入,像“支持实时流处理[^3]”这样的位置就很合适。现在准备用清晰的中文技术文档风格来组织这些内容。 </think>以下是FFmpeg命令行的详细说明(基于引用内容整理): ### 一、FFmpeg核心结构 ```bash ffmpeg [全局选项] {[输入文件选项] -i 输入文件} ... {[输出文件选项] 输出文件} ... ``` - **输入/输出流指定**:通过 `-i` 指定输入源,支持多个输入文件 - **流选择规则**:自动选择每个文件的最佳流(视频/频/字幕) - **流映射控制**:用 `-map` 手动指定流处理顺序(例如 `-map 0:v:0` 选择第1个文件的视频流)[^1] ### 二、常用视频处理命令 1. **基础转码**(H.264编码) ```bash ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4 ``` 2. **字幕处理**(以动态模糊为例) ```bash ffmpeg -i input.mp4 -vf \ "split[orig][blur]; \ [blur]crop=iw:ih*0.1:0:ih*0.9,boxblur=10[blurred]; \ [orig][blurred]overlay=0:H*0.9" \ output.mp4 ``` > 其中:$blur\_height = ih*0.1$ 控制模糊区域高度,$overlay\_y = H*0.9$ 设置覆盖位置 3. **复杂滤镜链**(裁剪+旋转+水印) ```bash ffmpeg -i input.mp4 -vf \ "crop=w=1280:h=720:x=100:y=50, \ rotate=a=-0.1*PI:t=ow:oh:fillcolor=black, \ movie=logo.png[wm];[in][wm]overlay=10:10" \ output.mp4 ``` ### 三、关键参数说明 | 类别 | 参数 | 作用 | 示例值 | |------|------|------|--------| | 视频编码 | `-c:v` | 编码器选择 | `libx265`, `vp9` | | 质量控制 | `-crf` | 恒定质量 (0-51) | `23`(默认) | | 分辨率 | `-s` | 设置分辨率 | `1280x720` | | 帧率 | `-r` | 强制输出帧率 | `30` | | 比特率 | `-b:v` | 视频比特率 | `2M` | ### 四、高级应用场景 1. **实时流处理**(RTSP推流) ```bash ffmpeg -re -i input.mp4 -c:v copy -f rtsp rtsp://server/live.sdp ``` 2. **硬件加速**(NVIDIA GPU编码) ```bash ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4 ``` 3. **批量处理脚本**(结合find命令) ```bash find . -name "*.mov" -exec ffmpeg -i {} -vcodec libx265 {}.mp4 \; ``` > **注意事项**: > 1. 所有滤镜参数需遵循 FFmpeg 的数学表达式语法,例如:`ih*0.85`(原始高度的85%)[^3] > 2. 动态字幕处理可能需要逐帧分析,建议先用 `ffprobe` 分析时间戳 > 3. 复杂操作建议分步骤执行,避免单命令过长导致错误[^2]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值