ffmpeg 本人常用命令
索尼相机拍摄的mp4顺时针转90度
不转码,速度快。(注意索尼的文件不能转普通的mp4,要转mov,不然会报错。一定是copy output.mov,不要copy output.mp4,否则会报错!)
ffmpeg -i "D:\Personal\Desktop\2\C0001.MP4" -metadata:s:v:0 rotate=-90 -codec copy output.mov
--逆时针旋转90度
ffmpeg -i input.mp4 -metadata:s:v rotate="90" -codec copy output.mp4
--顺时针旋转90度
ffmpeg -i input.mp4 -metadata:s:v rotate="-90" -codec copy output.mp4
其他普通的mp4旋转,可以直接转后辍名mp4。
合并多个视频
有些视频网站会分段加载视频,导致下载器下载到一系列视频。这个时候需要合并这些视频才可以。
可以新建一个filelist.txt的文件,按顺序列出系列视频如下:
file '1.mp4'
file '2.mp4'
file '3.mp4'
file '4.mp4'
通过以下命令,合并成一个视频
ffmpeg -f concat -i filelist.txt -c copy output.mp4
字幕转换
经常下载一些网络视频的字幕,如youtube等,字幕文件是webvtt文件,后缀为vtt。ffmpeg也可以将其转化成标准的字幕格式。
ffmpeg -i input.vtt output.ass
ffmpeg -i input.vtt output.srt
ffmpeg 将m3u8文件下载成MP4文件
ffmpeg -i 待替换视频地址 -c copy -bsf:a aac_adtstoasc ./生成视频文件名称.mp4
ffmpeg -i https://yuledy.helanzuida.com/20201228/17296_a03b1fe2/1000k/hls/index.m3u8 -c copy -bsf:a aac_adtstoasc ./26.mp4
ffmpeg 将mp3文件转成aac文件
ffmpeg -i xxx.mp3 -acodec aac -strict experimental -ab 128k -ar 16k -ac 2 -y xxx.aac
b站参数:ffmpeg -i 456.mp3 -acodec aac -strict experimental -ab 320k -ar 44.1k -ac 2 -y xxx.aac
参数定义:
ab :码率
ar :采样率
ac :声道
以下操作为从input.mp4文件提取音频为output.aac:
ffmpeg -i input.mp4 -vn -c:a copy output.aac
其中
-vn:移除视频-c:a:指定音频编码器copy:直接复制,不经过重新编码
音频与视频合并成视频
1. 提取音频
ffmpeg -i input.mp4 -acodec copy -vn out.aac
//acodec :指定音频编码器,copy只拷贝,不做编码
//vn:v代表视频,n代表no,无视频的意思
2. 提取无音视频
ffmpeg -i input.mp4 -vcodec copy -an out.mp4
//vcodec:指定视频编码器,copy只拷贝,不做编码
//an:a代表音频,n代表no,无音频的意思。
3. 音频视频合并(把aac合并到mp4里面。前提条件,mp4是无声视频)
ffmpeg -i out.mp4 -i out.aac -vcodec copy -acodec copy new.mp4
//-vcodec copy :视频只拷贝,不编解码
//-acodec copy : 音频只拷贝,不编解码
//new.mp4 :新生成的文件,文件的长度由两个输入文件的最长的决定
FFmpeg直接复制音频与视频流封装成指定格式(复制流)[类似于直接换个容器]
ffmpeg -i 原始视频.ts -codec copy 输出格式.mp4
ffmpeg -y -i test.mp4 -vcodec copy -acodec copy test.mkv
ps:yudl只下载音频:youtube-dl -x --audio-format mp3 video_URL
使用FFmpeg命令给视频文件添加软字幕
添加软字幕这个过程不需要重新编解码,速度非常快。这样实现了不转码,加字幕,且不需要用第三方gui软件,直接通过命令完成。
注意:b站不支持显示软字幕,必须是硬字幕
背景知识
字幕分类
根据字幕信息嵌入到视频中的方式,可以把字幕分为:
- 软字幕
- 特点
- 过程可逆
- 可以提取出字幕文件,查看字幕源代码
- 过程可逆
- 包含
- 内挂字幕
- 一般指字幕文件与视频一同封装在MKV文件中,播放时需经过播放器处理解析显示(=VSFilter渲染)
- 外挂字幕
- 以单独的字幕文件形式存在,播放时经播放器处理解析显示(=VSFilter渲染)到视频上
- 内挂字幕
- 特点
- 硬字幕=内嵌字幕
- 指字幕被以图形方式硬编码到视频中
- 变成视频数据本身=视频数据的一部分
- 特点
- 过程不可逆
- 无法再把字幕提取出来
- 播放时不需要额外的播放器读取解析显示(=VSFilter渲染)字幕
- 过程不可逆
- 指字幕被以图形方式硬编码到视频中
踩坑点:
使用subtitles=xxx路径
或者ass=1.ass路径
经常会报错,可能是路径原因。
例如以下命令
ffmpeg -i end_font.mp4 -vf subtitles=words.srt -y output.mp4
解决方案
第一步,用ffmpeg命令直接将srt文件转换成ass文件。(srt没样式,ass有样式)
命令如下
ffmpeg -i 1.srt 2.ass
第二步
打开2.ass文件,ass规定了字幕使用何种字体和一些参数。默认是白色字体,黑色描边,16号字体。不做更改也够用。
我一般改一下字体、字体颜色、字号大小。一般的都是黑色阴影描边。比较简约,不花里胡哨。
我一般设置字体为:霞鹜文楷 屏幕阅读版。字体颜色为粉红色b292ee。字号20-22之间。
样式代码为:,霞鹜文楷 屏幕阅读版,20,&Hb292ee,
这些参数都是相邻的。
第三步,将视频与ass文件合并。类似于复制流,且转了格式。
现在的大多电影都使用mkv格式,也有部分使用mp4,mkv格式本身支持字幕轨道,而mp4则需要调用mov_text编码器
注意, -c copy -c:s mov_text 的顺序是非常重要的,因为这是简写。
-i 选项用于指定需要读取的文件,在这里是视频文件与字幕文件(字幕文件 srt 与 ass 格式皆可)
命令如下
使用以下命令不会报错。
ffmpeg -i input.mkv -i input.srt -c copy -c:s srt output.mkv
ffmpeg -i input.mkv -i input.ass -c copy -c:s ass output.mkv
给mp4文件添加srt格式的软字幕(mkv格式本身支持字幕轨道,但mp4需要使用mov_text)
ffmpeg -i input.mp4 -i input.srt -c copy -c:s mov_text output.mp4
ffmpeg -i input.mp4 -i input.ass -c copy -c:s mov_text output.mp4
已执行成功的具体例子
youtu下载的webm格式视频,使用mov_text
ffmpeg -i "D:\Personal\Desktop\2\2.webm" -i "D:\Personal\Desktop\2\3.ass" -c copy -c:s mov_text 2.mp4
注意,转的目标格式是mp4则用mov_text。不是指源视频。
mp4 省略mov_text 报错,使用ass也报错,mkv使用mov_text 报错。这些都经过试错都玩过,所以命令很严格,必须一个都不差。
经测试有个问题。使用ass转成mkv的时候,这个底色生效。使用ass专场mp4格式的时候,这个底色不生效。

更改方式:BorderStyle=3

使用mkv的srt字幕能在播放器里二次调节位置大小字体等等,但是使用mp4就不行,同样是srt。

-
从 Video.mp4 中提取音频:
-
合并音视频 (将纯视频video.mp4和音频1.mp3合并成一个音视频final.mp4):
参数介绍: -shortest:在其中一个输入停止后立即停止(音频/视频)
-
删除视频中的音频:

浙公网安备 33010602011771号