完整说明见 官方文档
文件封装格式
查看支持的封装格式
返回第一列 D~,~E
分表示 Demuxing 支持 和 Muxing 支持。第二列表示封装格式,第三列为详细说明。
ffmpeg -formats
# =>
# D mov,mp4,m4a,3gp,3g2,mj2 QuickTime / MOV
# E mp4 MP4 (MPEG-4 Part 14)
查看指定封装格式的详细信息
可以通过以下方式查看某个封装格式的详细信息
ffmpeg -h muxer=mp4
# ffmpeg -h demuxer=mp4
# =>
# Muxer mp4 [MP4 (MPEG-4 Part 14)]:
# Common extensions: mp4. 默认扩展名
# Mime type: video/mp4.
# Default video codec: h264. 默认的视频编码格式
# Default audio codec: aac. 默认的音频编码格式
# mp4 muxer AVOptions: 详细参数
# -movflags <flags> E....... MOV muxer flags (default 0)
# ....
仅显示视频信息
ffmpeg -i ${INPUT}
修改封装格式
一般可以直接通过后缀名确定文件的封装格式
ffmpeg -i ${INPUT} ${OUTPUT}
# ffmpeg -i "芒种-花丸晴琉.flv" "芒种-花丸晴琉.mp4"
也可以通过 -f
选项指定文件的封装格式
ffmpeg -i ${INPUT} -f ${FORMAT} ${OUTPUT}
# ffmpeg -i "芒种-花丸晴琉.flv" -f avi "芒种-花丸晴琉.dat"
文件编码格式
查看支持的编码格式
FFmpeg 支持的编码和解码在编译时确定,可以用过以下命令查看。第一列第一个字段 V~, ~A~,~S
分别表示视频,音频和字幕。第二、三个字段 F~,~S
表示帧级别多线程支持和分片级别多线程支持。第四个字段 X
表示试验版本。第二列是编码格式,第三列为详细说明。
ffmpeg -encoders # 查看所有支持的编码器
ffmpeg -decoders # 查看所有支持的解码器
# =>
# V..... libx265 libx265 H.265 / HEVC (codec hevc)
查看指定编码格式的详细信息
ffmpeg -h encoder=h264
ffmpeg -h deencoder=h264
将视频转为音频并且编辑 metadata 信息
ffmpeg -i 000.flv -i ../thumb.jpg -map 0:1 -map 1:0 -acodec libmp3lame -id3v2_version 3 \
-metadata title="Sadistic Love" \
-metadata artist="鹿乃" \
-metadata comment="演唱 鹿乃
混音 ●テラピコス
サディスティック・ラブ
本家動画 sm13292326" output.mp3
参数解释
-i 000.flv -i ../thumb.jpg # 输入文件分别为视频和一张图片 -map 0:1 -map 1:0 # 取第一个文件的第二个流 (视频的 :0 是 video, :1 是 audio) # 取第二个文件的第一个流 (图片只有 :0 为 png 流) -acodec libmp3lame # 指定音频使用 mp3 编码 -id3v2_version 3 # 指定 mp3 的 ID3 头信息版本为 id3v2.3 -metadata ${metadata} # 写入 metadata 的信息, 包括 # title 标题 # artist 艺术家 # comment 备注
分离声道, 分离合并视频声音
# 交换 1.mp3 的左右声道 输出到 output.mp3
ffmpeg -i 1.mp3 -map_channel 0.0.1 -map_channel 0.0.0 output.mp3
# 单独提取视频
ffmpeg -i video.mp4 -vcodec copy -an video_silent.mp4
# 单独提取音频
ffmpeg -i video.mp4 -vn [-ar 44100 -ac 2 -ab 192|-acodec copy] [-f mp3] video_novideo.mp3
# 合并
ffmpeg -i video_novideo.mp3 -i video_silent.mp4 -c copy video_merge.mp4
参数解释
-map_channel 0.0.1 -map_channel 0.0.0 # 输出两个声道, 顺序以此为 左, 右 # 第一个声道 (左) 取 0.0.0 第一个文件(1.mp3) 的第一个流 (audio) 的第二个声道 (右) # 第二个声道 (右) 取 0.0.1 第一个文件(1.mp3) 的第一个流 (audio) 的第一个声道 (左) -vn -an # 不输出视频和音频 -vcodec copy -acodec acopy # 原样输出视频和音频 -ar 44100 -ac 2 -ab 192 # 设置音频采样率 44100, 通道数为 2, 码率为 192 Kbps
剪切视频或音频
# 30s 开始截取到 120s
ffmpeg -i music.mp3 -ss 00:00:30 -to 00:02:00 -acodec copy music_cut.mp3
# 30s 开始截取 60s
ffmpeg -i music.mp3 -ss 00:00:30 -t 60 -acodec copy music_cut.mp3
# 截取时间不准确可以尝试加上 -copyts
ffmpeg -ss 00:00:30 -i music.mp3 -t 60 -acodec copy [-copyts] music_cut.mp3
# 合并多个视频, 不同格式的视频连接也许会有一些问题
ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4
参数解释
-copyts 保留时间戳, 保证时间准确 -sseof 从媒体末尾开始截取
修改音频参数
ffmpeg -i input.flac [-ar 44100] [-ab 192k] [-ac 2] output.mp3
参数解释
-ar 44100 设定音频采样率, 默认采用源视频的采样率 一般有 11025, 22050, 24000, 44100, 48000 11025 Hz 能达到 AM 调幅广播的声音品质 22050 Hz, 24000 Hz 能达到 FM 调频广播所用采样率 44100 Hz 达到音频 CD 的采样率 -ab 192k 设定音频比特率, 默认为 128 kbps 32 kbps, MW(AM) 质量, 高糊 96 kbps, FM 质量 128 kbps, 高音颤抖, 几乎无差别 192 kbps, 192 以上无差别 -ac 2 设定声道数, 默认采用源视频的声道数
修改视频参数
ffmpeg -i video.mp4 [-ss 10|0:10] [-s 1920x1080] [-pix_fmt yuv420p] [-preset medium] [-profile:v high] [-crf 23] [-r 30] [-b:a 128k] output.mp4
参数解释
-ss 0:10 指定时间 -s 1920x1080 设定视频的分辨率 -pix_fmt yuv420p 设置视频颜色空间, 一般有 yuv 和 rgb 和一些对应的压缩方式 -preset medium 编码器预设, 可以用 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo -profile:v high 编码器配置 baseline: 实时通讯 main: 流媒体 high: 超清视频 -crf 23 设置码率控制模式, 范围 [0, 51], 一般在 [8, 28] 内 -r 30 设置视频帧率 -b a:128k 音频比特率, 与音频 -ab 选项相同
截图和水印
# 截取第 7 秒第 1 帧的画面
ffmpeg -i video.mp4 -ss 7 -vframes 1 video_image.jpg
# 截取第 0 秒到第 1 秒的所有画面
ffmpeg -i video.mp4 [-ss 0 -to 1] video-%03d.png
# 将图片重新合并成视频
ffmpeg -i video-%03d.png output.mp4
# 视频增加水印
ffmpeg -i video.mp4 -i watermark.png -filter_complex "overlay=20:80" video_output.mp4
# 截取 gif, 与视频剪辑一样
ffmpeg -i video.mp4 -ss 7.5 -to 8.5 [-s 640x320] [-r 15] video.dif
# -r 设置每秒帧数, -s 设置分辨率
# 将视频的前 30 帧转换成 gif
ffmpeg -i input.mp4 -vframes 30 -y -f gif output.gif
filter 功能
将视频下面一般替换为上面一半的上下对称形式
ffmpeg -i ${INPUT} -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" ${OUTPUT}
# [input] split [main][tmp]; 将输入复制(split)成两份命名为 [main][tmp]
# [input] crop w:h:x:y [output]; 将输入根据四个参数裁剪
# [input] vflip [output]; 将输入水平反转(上下颠倒)
# [tmp] crop=iw:ih/2:0:0, vflip
# w 为 iw, h 为 ih/2, 宽度不变 高度为一半, 水平反转, 输出到 flip
# [main][flip] overlay=x:y [output] 将两路视频合并输出为一路视频, 第二个视频的左上角左边为 (x, y)
# [main][flip] overlay=0:H/2
# x 为 0, y 为 H (main 的 h)
ffmpeg -i ${INPUT} -vf "setopts=0.5*PTS" output.mp4
# 加/减速视频(音频原速) 0.5 表示二倍速
其他工具
ffprobe
ffprobe 是一个多媒体分析工具,可以获得一个视频或者音频的详细参数
ffprobe (-show_streams|-show_streams|....) [(-print_format|-of) (xml|ini|json|csv|flat)] ${FILE}
# -show_format 查看多媒体的封装格式
# -show_streams 查看多媒体文件的流信息
# [-show_data] -show_packets 查看每一数据包的信息
# -show_frames [-select_streams $select] 查看每一帧信息
# $select 可以为 a(只查看音频), v(只查看视频), s(只查看字幕)
# -of 指定输出的格式
show_format
ffprobe -show_format letter_song.mp3
返回内容
[FORMAT] ;; -show_format 才会显示的内容 filename=letter_song.mp3 ;; 文件名 nb_streams=2 ;; 媒体中包含的流的个数 nb_programs=0 ;; 节目数 format_name=mp3 ;; 使用的封装模块的名称 format_long_name=MP2/3 (MPEG audio layer 2/3) start_time=0.025056 ;; 媒体文件的起始时间 duration=335.124898 ;; 媒体文件的总时间长度 size=13447501 ;; 媒体文件的大小(字节) bit_rate=321014 ;; 媒体文件的码率 probe_score=51 TAG:title=letter song (致十年后的我) TAG:artist=ヲタみん (KUMI) TAG:album=letter song TAG:ID=8594724872 TAG:track=1 TAG:disc=0 TAG:genre=Blues [/FORMAT]
show_streams
ffprobe -show_streams letter_song.mp3
返回内容
[STREAM] ;; -show_streams 才会显示的内容 index=0 ;; 流所在的索引区域 codec_name=mp3 ;; 编码名 codec_long_name=MP3 (MPEG audio layer 3) profile=unknown ;; 编码的 profile codec_type=audio ;; 编码类型 codec_time_base=1/44100 ;; 编码的时间戳计算基础单位 codec_tag_string=[0][0][0][0] codec_tag=0x0000 sample_fmt=fltp sample_rate=44100 channels=2 channel_layout=stereo bits_per_sample=0 id=N/A r_frame_rate=0/0 ;; 实际帧率 avg_frame_rate=0/0 ;; 平均帧率 time_base=1/14112000 ;; 时间基数 start_pts=353600 start_time=0.025057 duration_ts=4729282560 duration=335.124898 bit_rate=320000 ;; 码率 max_bit_rate=N/A ;; 最大码率 bits_per_raw_sample=N/A nb_frames=N/A ;; 帧数 nb_read_frames=N/A nb_read_packets=N/A DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 DISPOSITION:comment=0 DISPOSITION:lyrics=0 DISPOSITION:karaoke=0 DISPOSITION:forced=0 DISPOSITION:hearing_impaired=0 DISPOSITION:visual_impaired=0 DISPOSITION:clean_effects=0 DISPOSITION:attached_pic=0 DISPOSITION:timed_thumbnails=0 TAG:encoder=LAME3.99r [SIDE_DATA] side_data_type=Replay Gain [/SIDE_DATA] [/STREAM] [STREAM] index=1 codec_name=mjpeg codec_long_name=Motion JPEG profile=Baseline codec_type=video codec_time_base=0/1 codec_tag_string=[0][0][0][0] codec_tag=0x0000 width=500 height=500 coded_width=500 coded_height=500 has_b_frames=0 sample_aspect_ratio=1:1 display_aspect_ratio=1:1 pix_fmt=yuvj444p level=-99 color_range=pc color_space=bt470bg color_transfer=unknown color_primaries=unknown chroma_location=center field_order=unknown timecode=N/A refs=1 id=N/A r_frame_rate=90000/1 avg_frame_rate=0/0 time_base=1/90000 start_pts=2255 start_time=0.025056 duration_ts=30161241 duration=335.124900 bit_rate=N/A max_bit_rate=N/A bits_per_raw_sample=8 nb_frames=N/A nb_read_frames=N/A nb_read_packets=N/A DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 DISPOSITION:comment=0 DISPOSITION:lyrics=0 DISPOSITION:karaoke=0 DISPOSITION:forced=0 DISPOSITION:hearing_impaired=0 DISPOSITION:visual_impaired=0 DISPOSITION:clean_effects=0 DISPOSITION:attached_pic=1 DISPOSITION:timed_thumbnails=0 TAG:comment=Cover (front) [/STREAM]
show_data 和 -show_packets
ffprobe -show_data -show_packets ヲタみん.mp3
返回内容
[PACKET] ;; -show_packets 才会显示的内容, 以其中一个数据包为例 codec_type=audio ;; 多媒体类型, audio 或 video stream_index=0 ;; 多媒体的 stream 索引 pts=368640 ;; 多媒体的显示时间值 pts_time=0.026122 ;; 根据不同格式计算过后的多媒体的显示时间 dts=368640 ;; 多媒体解码时间值 dts_time=0.026122 ;; 根据不同格式计算过后的多媒体解码时间 duration=368640 ;; 多媒体包占用的时间值 duration_time=0.026122 ;; 根据不同格式计算过后的多媒体包所占用的时间值 convergence_duration=N/A convergence_duration_time=N/A size=1045 ;; 多媒体包的大小 pos=43183 ;; 多媒体包所在的文件偏移位置 flags=K_ ;; 多媒体包标记,如关键包与非关键包的标记 data= ;; -show_data 才会显示的内容 00000000: fffb e244 ff8b ff73 84ad ab19 d625 0a30 ...D...s.....%.0 00000010: 45e0 312f b06a b60e d807 b1e0 4570 c21a E.1/.j......Ep.. ;; .... 00000400: 4981 2854 8894 9534 8467 566b 0dbe 3878 I.(T...4.gVk..8x 00000410: d36b a3a6 1b .k... [/PACKET]
show_frames
ffprobe -show_frames ヲタみん.mp3
返回内容
[FRAME] ;; -show_frames 才会显示的内容,以其中一帧为例 media_type=audio ;; 帧的类型, audio video 或 subtitle stream_index=0 ;; 帧所在的索引区域 key_frame=1 ;; 是否为关键帧 pkt_pts=368640 ;; frame 包的 pts pkt_pts_time=0.026122 ;; frame 包的 pts 时间显示 pkt_dts=368640 ;; frame 包的 dts pkt_dts_time=0.026122 ;; frame 包的 dts 时间显示 best_effort_timestamp=368640 ;; frame 包的时长 best_effort_timestamp_time=0.026122 ;; frame 包的时长时间显示 pkt_duration=368640 ;; frame 包的时长 pkt_duration_time=0.026122 ;; frame 包的时长时间显示 pkt_pos=43183 ;; frame 包的文件偏移位置 pkt_size=1045 sample_fmt=fltp nb_samples=1152 channels=2 channel_layout=stereo [/FRAME]
ffplay
ffplay 提供播放功能。通过源码编译的 ffmpeg 不一定可以使用 ffplay 功能,需要安装对应的 SDL 模块
ffplay ${FILE}