ffmpeg


Documentation | ffmpeg windows版本 | ffmpeg Linux版本

ffplay常用命令

ffprobe常用命令

pixabav

pexels

Windows下使用ffmpeg为视频添加字幕

ffmpeg处理字幕

将ASS字幕打进视频流中

FFMPEG 命令行常用方法示例

ffpmeg视频进阶——高阶必读

视频转码、剪切、合并、播放速调整

Adding metadata to a video or audio file

youtube-dl

查看视频格式列表
youtube-dl -F --proxy socks5://127.0.0.1:1088 "https://youtu.be/2s-8HGRkRBw"

下载视频
youtube-dl -f 22 --proxy socks5://127.0.0.1:1088 "https://youtu.be/2s-8HGRkRBw"

下载列表第二个及以后的所有视频
youtube-dl --playlist-start 2 URL
youtube-dl --playlist-start 2 --playlist_end 10 URL
youtube-dl --playlist-items 1,2,5 URL

最优视频下载
youtube-dl -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" URL

只下载音频
youtube-dl -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 URL

调用外部工具下载
youtube-dl https://www.youtube.com/*** --external-downloader aria2c --external-downloader-args "-x 16 -k 1M"

--------------------------
生成5秒有文字'word'的视频
ffmpeg -f lavfi -i color=c=white:s=320x240:d=5 -vf "drawtext=fontfile='c\:\/Windows\/fonts\/arial.ttf':fontsize=24:fontcolor=black:x=(w-text_w)/2:y=(h-text_h)/2:text=word" output.mp4

视频字幕列表
youtube-dl --list-subs --proxy socks5://127.0.0.1:1088 "https://youtu.be/2s-8HGRkRBw"

只下载字幕
youtube-dl --write-sub --sub-lang zh-Hans --sub-format vtt --skip-download --proxy socks5://127.0.0.1:1088 "https://youtu.be/2s-8HGRkRBw"

vtt字幕转srt
ffmpeg -i mi.vtt mo.srt

查看视频信息(视频中的软字幕信息)
ffmpeg -i mi.mkv

字幕格式转换
ffmpet -i mi.vtt mo.src

调整语速(0.5~2)
ffmpeg -i mi.mp3 -filter:a "atempo=0.75" -vn mo.mp3
ffmpeg -i mi.mp4 -filter:a "atempo=0.75" -vn mo.mp4

视频中加入软字幕(需要播放器支持)
ffmpeg -i mi.mkv -vf subtitles=mi.srt mo.mkv

视频中加入硬字幕(写入到视频帧中)
ffmpeg -i mi.mkv -filter_complex "subtitle=mi.srt" -c:a copy mo.mkv


字幕选项:
--write-sub            Write subtitle file
--write-auto-sub       Write automatic subtitle file (YouTube only)
--all-subs             Download all the available subtitles of the video
--list-subs            List all available subtitles for the video
--sub-format FORMAT    Subtitle format, accepts formats preference, for example: "srt" or "ass/srt/best"
--sub-lang LANGS       Languages of the subtitles to download (optional) separated by commas, use IETF language tags like 'en,pt'

音频转换

ffmpeg -i old.mov -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1920:-1" -acodec libmp3lame -ab 128k new.mp4

FFmpeg将多张图片合成视频

加字幕

:输入频率每10秒一张图片的视频
:ffmpeg -r 0.1 -i %%d.jpg -s 440X700 -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4

:设定图片播放时间
:ffmpeg -f concat -safe 0 -i jpglist.txt -s 440X700 -vsync vfr -pix_fmt yuv420p out1.mp4

:多图及音频合成视频
:ffmpeg -f concat -safe 0 -i jpglist.txt -i xia.m4a -s 440X700 -vf fps=25 out4.mp4

:视频转GIF
:ffmpeg -i out3.mp4 -pix_fmt rgb24 out.gif

ffmpeg -f image2 -i /images/%d.jpg -vcodec libx264 -r 25 -b 200k test.mp4
(1)-r 25 表示每秒播放25帧
(2)-b 200k 指定码率为200k

ffmpeg -threads2 -y -r 10 -i /tmpdir/image%04d.jpg -i audio.mp3 -absf aac_adtstoasc output.mp4

ffmpeg -r 10 -i xia%d -i xia1.m4a -absf aac_adtstoasc output.mp4
ffmpeg -f concat -safe 0 -i subtitle.txt -i xia1.m4a -absf aac_adtstoasc output.mp4
----------------------

ffmepg -i input.mkv -vf subtitles=subtitles.srt output.mkv
ffmepg -i input.mkv -vf subtitles=subtitles.srt output.mp4
ffmepg -i input.mkv -vf ass=subtitles.ass output.mp4

字幕格式转换
ffmepg -i subtitles.srt subtitles.ass

先进的mkv支持加字幕流,和视频流和音频流同等地位
将字幕封装到容器
ffmepg -i input.mkv -i subtitles.srt -c copy output.mkv

从容器中提取字幕
ffmepg -i input.mkv output.mkv


生成一个5秒的文字视频
ffmpeg -f lavfi -i color=c=white:s=320x240:d=5 -vf “drawtext=fontfile='c\:\/Windows\/fonts\/calibri.ttf':fontsize=18:fontcolor=black:x=(w-text_w)/2:y=(h-text_h)/2:text=word” output.mp4

FFMPEG常用参数说明

主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
-t  截取时长
-to 截止时间
-y  覆盖原输出文件
-formats 查看所有支持的容器格式
-codecs  查看所有编解码器
-filters 查看所有可用的filter
-pix_fmts 查看所有支持的图片格式
-sample_fmts 查看所有支持的像素格式
-i input_file 查看媒体文件input_file的信息

视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频

FFmpeg视频转码技巧之-crf参数

参数-crf

在优先保证画面质量(也不太在乎转码时间)的情况下,使用-crf参数来控制转码是比较适宜的。这个参数的取值范围为0~51,其中0为无损模式,数值越大,画质越差,生成的文件却越小。从主观上讲,18~28是一个合理的范围。18被认为是视觉无损的(从技术角度上看当然还是有损的),它的输出视频质量和输入视频相当。

常用命令

转换bitrate
ffmpeg -i v.mp3 -b:a 64k out.m4a

合并同步音频
ffmpeg -i mo1.mp3 -i mo2.mp3 -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 mo.mp3

追加音频
ffmpeg -i "concat:mo1.mp3|mo2.mp3" -c copy mo0.mp3

音频加封面(windows系统只支持id3v2_version 3)
ffmpeg -i mi1.mp3 -i hg.png -map 0:0 -map 1:0 -c copy -id3v2_version 3 -metadata title="Album cover" -metadata artist="vicky" mo.mp3

音频加meta
ffmpeg -i mi1.mp3 -id3v2_version 3 -c copy -metadata title="atm" -metadata artist="007" -metadata album="invest" -ar 44100 -sample_fmt s16 o.mp3

播放速度加速一倍
ffmpeg -i mi.mp4 -vf "setpts=0.5*PTS" mo.mp4

截取一段音频
ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3

截取一段视频
ffmpeg -i mi.mp4 -ss 00:00:10 -t 18 -codec copy mo.mp4

截取两段视频
ffmpeg -i mi.mp4 -t 00:00:30 -c copy mo1.mp4 -ss 00:00:30 -codec copy mo2.mp4

改分辨率
ffmpeg -i input.mp4 -s 320x180 -c:a copy output.mp4

压缩视频
ffmpeg -i mi.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 32 mo.mp4

旋转90度
ffmpeg -i mi.mp4 -metadata:s:v rotate="90" -codec copy mo.mp4

视频水平翻转:
ffmpeg -i mi.mp4  -vf hflip mo.mp4

视频上下翻转:
ffmpeg -i mi.mp4  -vf vflip mo.mp4

转换为GIF
ffmpeg -i mi.mp4 -ss 00:00:20 -to 10 -r 10 -vf scale=200:-1 out.gif

PDF转换为视频
ffmpeg -r 1/10 -i pic-%01d.png -c:v libx264 -r 30 -pix_fmt yuv420p mo.mp4

加背景音乐1
去掉原视频音轨
ffmpeg -i mi.mp4 -c:v copy -an mo.mp4
添加背景音乐
ffmpeg -i nosound.mp4 -i music.mp3 -t 7.1 -c y copy output.mp4

加背景音乐2
ffmpeg -i songs.mp3 -i mi.mp4  -t 7.1 -y mo.mp4
音频文件放在视频文件前,-t后面跟时长 -y表示覆盖 

加循环播放音频
ffmpeg -i mi.mp4 -i music.wav -filter_complex [1:a]aloop=loop=-1:size=2e+09[out]; [out][0:a]amix -ss 0 -t 60 -y out.mp4

//将背景音无限循环
[1:a]aloop=loop=-1:size=2e+09[out];
//将背景音和视频中的音频混合
[out][0:a]amix 
剪辑60秒
-ss 0 -t 60

ffmpeg -i input.wav -af 'volume=2' output.wav
ffmpeg -i input.wav -af volume=-3dB output.wav
以上是如何修改音乐的音量,应当注意第一种会导致音频失真,第二种效果完美

ffmpeg -y -i input.mp4 -i output0.wav -filter_complex "[0:a] pan=stereo|c0=1*
c0|c1=1*c1 [a1], [1:a] pan=stereo|c0=1*c0|c1=1*c1 [a2],[a1][a2]amix=duration=first,pan=stereo|c0<c0+c1|c1<c2+c3,pan=mono
|c0=c0+c1[a]" -map "[a]" -map 0:v -c:v libx264 -c:a aac -strict -2 -ac 2 output.mp4

实现剪裁任意片段,播放流畅

ffmpeg 提取关键帧

关键帧

设置关键帧信息
ffmpeg -i 15s.mp4 -g 10 gop10_15s.mp4

查看关键帧信息
ffprobe -show_frames  gop10_15s.mp4
ffprobe -show_frames -select_streams v   gop10_15s.mp4

提取关键帧
ffmpeg -i video_name.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 1920*1080 -f image2 core-%02d.jpeg
pict_type和对应的类型:PICT_TYPE_I 表示是I帧,即关键帧。
-vsync 2:阻止每个关键帧产生多余的拷贝
-f image2 name_%02d.jpeg:将视频帧写入到图片中,样式的格式一般是:
“%d” 或者 “%0Nd”
-s:分辨率,1920*1080

淡入淡出
ffmpeg -i 1.mp4 -vf fade=in:0:50 out3.mp4

•对1000帧的视频25帧淡入,最后25帧淡出:
fade=in:0:25, fade=out:975:25
•让前5帧为黄色,然后在5-24淡入:
fade=in:5:20:color=yellow
•仅在透明通道的第25开始淡入
fade=in:0:25:alpha=1

字幕

转换字幕格式
ffmpeg -i subtitle.srt out.ass

加字幕
ffmpeg -i mi.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast mo.mp4

set FC_CONFIG_DIR=.\fonts
set FONTCONFIG_FILE=fonts.conf
set FONTCONFIG_PATH=.\fonts
ffmpeg -i mi.mp4 -vf subtitles=subtitle.srt mo.mp4

加图片水印
ffmpeg -i mi.mp4 -vf "movie=hkcd.png[watermark];[in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] " mo.mp4

-i :一般表示输入
仓库实景.mp4:这里表示要处理的视频源
-vf:滤镜相关,视频裁剪,水印等等操作都需要它完成
wenzi.png: 要添加的水印图片地址
overlay:水印参数
main_w-overlay_w-10 : 水印在x轴的位置,也可以写成x=main_w-overlay_w-10
main_h-overlay_h-10:水印在y轴的位置

推流

1、将文件当作源推送到RTMP服务器
ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName 
-r 以本地帧频读数据,主要用于模拟捕获设备。表示ffmpeg将按照帧率发送数据,不会按照最高的效率发送

2、将直播文件保存至本地
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

3、将其中一个直播流中的视频改用H.264压缩,音频不变,推送到另外一个直播服务器
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream  

4、将其中一个直播流中的视频改用H.264压缩,音频改用aac压缩,推送到另外一个直播服务器
ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream 

5、将其中一个直播流中的视频不变,音频改用aac压缩,推送到另外一个直播服务器
ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream 

6、将一个高清流复制为几个不同清晰度的流重新发布,其中音频不变
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k  

7、将当前摄像头以及扬声器通过DSHOW采集,使用H.264/AAC压缩后推送到RTMP服务器
ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name

视频添加png水印logo完全教程

字幕

ffmpeg -i input.mp4 -vf subtitles=subtitle.srt out.mp4

srt文件格式
x (序号)
xx:xx:xx,xxx --> xx:xx:xx,xxx (顺序是 时:分:秒,毫秒)
--这里是显示字幕内容

例如:
1
00:02:38,88 --> 00:05:38,88
ffmpeg添加视频字幕演示


太麻烦了,压片还是用 GK+MeGUI+AVS+ASS(AE) 比较好。

尤其是DVD原盘压制(特别是一些以前非蓝光的DVD5/DVD9),需要进行反交错。

如果是图片水印,则用AVS加载;字符组合则用ASS加载;光影动态效果用AE加载。

毕竟是要内嵌字幕,字体的样式用ASS/ASS+会比较灵活。

(SRT字幕只能内嵌HTML代码,不能嵌入CSS样式,且SRT最好保持为ANSI,UTF-8很容易产生乱码(如使用SW加载SRT字幕调节时间轴,UTF-8的中文会变成乱码);而ASS/ASS+ 则必须要用Unicode,通吃)。

20 多个 FFmpeg 命令

ffmpeg

安装
yum install epel-release

yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-6.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-6.noarch.rpm

yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm

yum install ffmpeg ffmpeg-devel


ffmpeg -formats
ffmpeg -i qy1.mp4 -hide_banner
ffmpeg -i input.webm -qscale:0 output.mp4

转换为mp3
ffmpeg -i input.mp4 -vn out.mp3

更换分辨率
ffmpeg -i input.mp4 -s 320x180 -c:a copy out.mp4

压缩视频文件,关键数字帧率24
ffmpeg -i qy-4-1.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 out1.mp4

移除音频流
ffmpeg -i qy-4-1.mp4 -an out.mp4

移除视频流
ffmpeg -i qy-4-1.mp4 -vn out.mp3

视频中提取图像
ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png

裁剪视频
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4

设置视频的屏幕高宽比
 ffmpeg -i input.mp4 -aspect 16:9 output.mp4

剪下一段媒体文件
ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4

添加字幕到一个视频文件
fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4

调整播放速度
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4