ffmpeg
Documentation | ffmpeg windows版本 | ffmpeg Linux版本
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
加字幕
:输入频率每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 不处理音频
参数-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 -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
字幕
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,通吃)。
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