FFmpeg 是一个非常强大的多媒体框架,提供了创建、处理、传输多媒体数据的能力。下面列出了一些 FFmpeg 的常用命令及其用途:
1. 基本信息提取
显示媒体文件信息
shellffmpeg -i input.mp4仅显示基本信息
shellffmpeg -i input.mp4 -hide_banner
2. 转码与格式转换
将视频转码为另一种格式
shellffmpeg -i input.mp4 output.webm转换音频文件格式
shellffmpeg -i input.mp3 output.wav
3. 截取视频片段
- 从视频中截取特定时间段的视频shell
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:45 -c copy output.mp4-ss指定开始时间,-t指定持续时间。
4. 视频拼接
- 合并多个视频文件 首先创建一个文本文件(例如 mylist.txt),其中每行是一个输入文件的路径:plaintext然后使用
file 'video1.mp4' file 'video2.mp4'-f concat -safe 0进行拼接:shellffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4
5. 抽取音频流
- 从视频中提取音频shell
ffmpeg -i input.mp4 -vn audio.aac-vn表示不要视频。
6. 调整视频大小
- 改变视频分辨率shell
ffmpeg -i input.mp4 -vf scale=640:480 output.mp4
7. 录制屏幕
- 录制屏幕(需要支持的设备)shell
ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0+0,0 -f pulse -i default output.mkv
8. 流媒体直播
- 推流到服务器shell
ffmpeg -re -i input.flv -vcodec copy -acodec copy -f flv rtmp://live.example.com/live/your_stream_name
9. 添加水印
- 在视频中添加图片水印shell
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
当然,以下是更多关于 FFmpeg 的高级功能和用法:
10. 视频滤镜和效果
添加模糊效果
shellffmpeg -i input.mp4 -vf "boxblur=5" output.mp4调整亮度和对比度
shellffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=0.2" output.mp4
11. 音频滤镜和处理
调整音频音量
shellffmpeg -i input.mp4 -af "volume=1.5" output.mp4淡入淡出
shellffmpeg -i input.mp4 -af "afade=t=in:st=0:d=2,afade=t=out:st=28:d=2" output.mp4这里设置前2秒淡入,最后2秒淡出。
12. 视频分割
- 从视频中分割出单个文件 使用
-map参数来选择输出流:shellffmpeg -i input.mp4 -map 0:v:0 -c copy video_only.mp4 ffmpeg -i input.mp4 -map 0:a:0 -c copy audio_only.aac
13. 视频旋转
- 旋转视频shell
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4transpose可以用于顺时针或逆时针旋转90度。
14. 字幕处理
添加外部字幕
shellffmpeg -i input.mp4 -i subtitles.srt -c copy -c:s mov_text output.mp4从视频中提取字幕
shellffmpeg -i input.mp4 -map 0:s:0 subtitles.srt
15. 分割视频
- 根据章节标记分割视频 如果视频有章节标记,可以使用
- chapters选项来分割视频:shell这里会把视频分割成每段600秒的文件。ffmpeg -i input.mp4 -map_chapters -1 -f segment -segment_time 600 output_%03d.mp4
16. 多路复用
- 创建多语言音轨或字幕的视频shell
ffmpeg -i video.mp4 -i audio_track_1.aac -i audio_track_2.aac -map 0:v -map 1:a -map 2:a -c copy -metadata:s:a:0 language=eng -metadata:s:a:1 language=fr output.mp4
17. 直播流录制
- 从网络流录制视频shell
ffmpeg -re -i http://example.com/live/stream -c copy -bsf:a aac_adtstoasc output.mp4
好的,让我们继续介绍一些 FFmpeg 的其他有用命令和技巧:
18. 音视频同步调整
- 修复音视频不同步问题shell这里通过
ffmpeg -i input.mp4 -itsoffset -0.5 -i input.mp4 -map 0:v:0 -map 1:a:0 -c copy output.mp4-itsoffset参数延迟了音频 0.5 秒。
19. 音频混音
- 混合两个音频文件shell
ffmpeg -i audio1.mp3 -i audio2.mp3 -filter_complex amix=inputs=2:duration=shortest output.mp3amix滤镜可以混合多个音频流。
20. 音频淡入淡出
- 对音频文件进行淡入淡出处理shell这条命令会让音频文件的开头2秒逐渐变响,结尾2秒逐渐减弱。
ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=2,afade=t=out:st=28:d=2" output.mp3
21. 创建 GIF 动图
- 从视频中创建 GIF 图像shell该命令从视频的第10秒开始,截取10秒钟,并将其转换为 GIF 格式。
ffmpeg -i input.mp4 -ss 00:00:10 -t 10 -vf "scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
22. 提取视频帧
- 从视频中提取单帧图像shell
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.3)" -frames:v 1 frame.jpg-vf select=gt(scene,0.3)会在场景变化超过 30% 时截取一帧。
23. 批量处理
- 批量转换目录中的所有视频文件 你可以编写一个 shell 脚本来批量处理文件:shell这个脚本会将所有
for file in *.mp4; do ffmpeg -i "$file" -c:v libx264 -preset veryfast -crf 22 -c:a aac -b:a 128k "${file%.mp4}.mkv"; done.mp4文件转换为.mkv格式。
24. 编码优化
- 优化 H.264 编码输出shell这里使用了
ffmpeg -i input.mp4 -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k output.mp4libx264编码器,并设置了适当的预设和 CRF 值。
25. 修复损坏的视频文件
- 尝试修复损坏的视频文件shell有时候,通过重新封装视频文件可以帮助恢复损坏的文件。
ffmpeg -i broken.mp4 -c copy -bsf h264_mp4toannexb repaired.mp4
26. 高级调试
- 查看解码后的视频帧shell这条命令会每隔一秒输出一帧到图片文件中,便于检查视频内容。
ffmpeg -i input.mp4 -vf fps=1/60 -vsync vfr frame%04d.png
FFmpeg 拥有许多强大的功能,除了前面提到的一些基本命令外,还有很多其他的实用命令。以下是一些补充的常用命令及应用场景:
27. 音频混流
- 将多个音频流混入一个视频shell
ffmpeg -i video.mp4 -i audio1.mp3 -i audio2.mp3 -filter_complex "[1:a][2:a]amerge=inputs=2[a]" -map 0:v -map "[a]" -c:v copy -c:a aac output.mp4
28. 音频分离
- 从视频中分离并合并多个音频流shell
ffmpeg -i input.mp4 -map 0:a:0 -c copy audio_stream_1.mp3 ffmpeg -i input.mp4 -map 0:a:1 -c copy audio_stream_2.mp3
29. 视频裁剪
- 裁剪视频的一部分shell这里裁剪掉视频底部的180像素。
ffmpeg -i input.mp4 -vf "crop=in_w:in_h-180" output.mp4
30. 音频修剪
- 修剪音频文件的长度shell从第10秒开始,截取30秒的音频。
ffmpeg -i input.mp3 -ss 00:00:10 -t 00:00:30 -c copy trimmed.mp3
31. 视频去噪
- 去除视频中的噪声shell使用
ffmpeg -i input.mp4 -vf "hqdn3d" output.mp4hqdn3d过滤器去除视频中的噪声。
32. 视频去隔行
- 将隔行扫描视频转换为逐行扫描shell使用
ffmpeg -i input.mp4 -vf "yadif" output.mp4yadif过滤器去除隔行效应。
33. 音频均衡器调整
- 调整音频均衡器shell调整特定频率范围内的增益。
ffmpeg -i input.mp3 -af "equalizer=f=1000:t=h:width_type=o:width=2:g=10" output.mp3
34. 视频压缩
- 压缩视频文件大小shell使用
ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow output.mp4libx264编码器并设置 CRF 值来控制压缩质量。
35. 视频旋转并裁剪
- 旋转视频并保持原始宽高比shell先旋转视频,然后裁剪以保持原始宽高比。
ffmpeg -i input.mp4 -vf "transpose=1,crop=in_w:in_h-ih/2*(cos(PI/4)-sin(PI/4))" output.mp4
36. 音频标准化
- 调整音频文件的音量水平shell使用
ffmpeg -i input.mp3 -af "loudnorm" output.mp3loudnorm过滤器标准化音频电平。
37. 视频颜色调整
- 调整视频的颜色shell使用
ffmpeg -i input.mp4 -vf "hue=s=1.2" output.mp4hue过滤器调整视频的饱和度。
38. 视频速度调整
- 改变视频播放速度shell将视频播放速度减半。
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
39. 视频重复播放
- 循环播放视频片段shell循环播放视频两次。
ffmpeg -i input.mp4 -vf "loop=loop=2:size=2" output.mp4
40. 音频重采样
- 改变音频的采样率shell将音频采样率改为44100Hz,双声道。
ffmpeg -i input.mp3 -ar 44100 -ac 2 output.mp3
当然,我们还可以继续探讨 FFmpeg 的更多高级用法和特殊功能。以下是一些补充的命令:
41. 音频与视频同步检测
- 检测音视频是否同步shell该命令通过
ffmpeg -i input.mp4 -lavfi "[0:v][0:a]async=25" -f null -async过滤器检查音视频是否同步,如果输出中有错误提示,则说明音视频不同步。
42. 从视频中提取缩略图
- 从视频中提取特定时间点的缩略图shell从视频的第1分30秒处提取一张缩略图。
ffmpeg -i input.mp4 -ss 00:01:30 -vframes 1 thumbnail.jpg
43. 音频降噪
- 对音频进行降噪处理shell使用
ffmpeg -i input.mp3 -af "aformat=channel_layouts=mono,anull",noise=level=-30dB,f=6000,level_in=-10dB,level_out=-10dB,attack=0.01,release=0.1 output.mp3noise滤镜减少背景噪音。
44. 视频翻转
- 垂直或水平翻转视频shell或者
ffmpeg -i input.mp4 -vf "hflip" output.mp4shellffmpeg -i input.mp4 -vf "vflip" output.mp4hflip和vflip分别用于水平和垂直翻转视频。
45. 音频淡入淡出
- 为音频添加淡入淡出效果shell在音频开头和结尾分别添加2秒的淡入和淡出效果。
ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=2,afade=t=out:st=28:d=2" output.mp3
46. 视频字幕嵌入
- 将字幕嵌入视频shell从外部 SRT 文件中读取字幕并嵌入视频。
ffmpeg -i input.mp4 -vf "subtitles=subtitles.srt" output.mp4
47. 视频字幕移除
- 移除视频中的字幕轨道shell
ffmpeg -i input.mp4 -c copy -sn output.mp4-sn参数表示不复制字幕轨道。
48. 音频音调调整
- 调整音频的音调shell使用
ffmpeg -i input.mp3 -af "atempo=1.5" output.mp3atempo滤镜调整音频播放速度,从而改变音调。
49. 视频色彩空间转换
- 转换视频的色彩空间shell将视频的色彩空间转换为 YUV 4:2:0。
ffmpeg -i input.mp4 -vf "format=yuv420p" output.mp4
50. 视频编码参数调整
- 调整视频编码参数shell设置视频编码器为
ffmpeg -i input.mp4 -c:v libx264 -preset veryfast -crf 23 -c:a aac -b:a 128k output.mp4libx264,并调整preset和crf值以优化编码速度和质量。
51. 视频元数据修改
- 修改视频的元数据(如标题、艺术家等)shell使用
ffmpeg -i input.mp4 -metadata title="My Video Title" -metadata artist="Artist Name" output.mp4-metadata参数来添加或修改视频文件的元数据。
52. 视频音频分离
- 从视频中分离音频shell
ffmpeg -i input.mp4 -vn -acodec copy audio.aac-vn参数表示不包含视频,只保留音频。
53. 视频音频合并
- 将分离的音频和视频重新合并shell将两个文件重新组合成一个带有音频和视频的新文件。
ffmpeg -i video.mp4 -i audio.aac -c copy -map 0:v:0 -map 1:a:0 output.mp4
54. 音频通道调整
- 调整音频通道布局shell将音频通道数调整为立体声(2通道)。
ffmpeg -i input.mp3 -ac 2 output.mp3
55. 视频分辨率调整
- 调整视频的分辨率shell调整视频的高度为720像素,宽度自动保持原有比例。
ffmpeg -i input.mp4 -vf "scale=-1:720" output.mp4
当然,我们可以继续探索 FFmpeg 的更多功能和高级用法。以下是一些额外的命令和技巧:
56. 音频均衡调节
- 精细调节音频的均衡shell使用
ffmpeg -i input.mp3 -af "equalizer=f=1000:t=q:b=2:g=5" output.mp3equalizer滤镜调整特定频率的增益。
57. 视频画面稳定
- 稳定抖动的视频画面shell这个过程分为两步,首先检测视频中的抖动,然后应用变换来稳定视频。
ffmpeg -i input.mp4 -vf "vidstabdetect=stepsize=15:shakiness=10:accuracy=10:search=15:result=transforms.trf" -f null - ffmpeg -i input.mp4 -i transforms.trf -vf "vidstabtransform=input=transforms.trf:zoom=0:smoothing=60" output.mp4
58. 音频淡入淡出循环
- 创建一个循环播放的音频文件,带淡入淡出效果shell创建一个带有淡入淡出效果的循环音频文件。
ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=2, afade=t=out:st=28:d=2, loop=stop_duration=1:stop_threshold=-60dB" output.mp3
59. 视频帧率调整
- 调整视频的帧率shell将视频的帧率调整为30 FPS。
ffmpeg -i input.mp4 -vf "fps=fps=30" output.mp4
60. 视频色彩校正
- 调整视频的色彩平衡shell通过
ffmpeg -i input.mp4 -vf "lutrgb=r='0.95*in':g='1.05*in':b='1.1*in'" output.mp4lutrgb过滤器调整红绿蓝通道的亮度。
61. 音频回声效果
- 给音频添加回声效果shell使用
ffmpeg -i input.mp3 -af "aecho=0.8:0.9:1000|1600:0.3|0.1" output.mp3aecho滤镜模拟回声效果。
62. 视频去噪
- 去除视频中的噪声shell使用
ffmpeg -i input.mp4 -vf "hqdn3d" output.mp4hqdn3d过滤器去除视频中的噪声。
63. 视频叠加文字
- 在视频中叠加文字shell使用
ffmpeg -i input.mp4 -vf "drawtext=text='Sample Text':fontfile=/path/to/font.ttf:fontsize=24:fontcolor=white@0.8:x=(w-text_w)/2:y=(h-text_h)/2" output.mp4drawtext过滤器在视频中央添加文字。
64. 视频去黑边
- 去除视频周围的黑色边缘shell去除视频上下两侧的黑色边缘。
ffmpeg -i input.mp4 -vf "crop=in_w:in_h-2*blackbar_height" output.mp4
65. 视频时间码添加
- 在视频中添加时间码shell在视频左上角添加当前播放时间的时间码。
ffmpeg -i input.mp4 -vf "drawtext=text='%{pts\:localtime\:hours\:minutes\:seconds}':fontfile=/path/to/font.ttf:fontsize=24:fontcolor=red:x=10:y=30" output.mp4
66. 视频区域截图
- 从视频中截图特定区域shell从视频指定位置截图指定区域。
ffmpeg -i input.mp4 -vf "crop=x1:y1:w:h" -ss 00:00:10 -vframes 1 screenshot.png
67. 视频水平垂直居中
- 使视频在输出中水平垂直居中shell使视频在输出中居中,并添加边缘空白。
ffmpeg -i input.mp4 -vf "scale=iw*2:ih*2,pad=iw+2*margin:ih+2*margin:(ow-iw)/2:(oh-ih)/2,setsar=1" output.mp4
68. 视频水平垂直拉伸
- 拉伸视频以适应特定尺寸shell拉伸视频以适应1280x720的分辨率,同时保持原宽高比。
ffmpeg -i input.mp4 -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" output.mp4
69. 视频音频流切换
- 创建一个带有多个音频流的视频文件,并允许用户在播放器中切换shell创建一个多语言音频流的视频文件。
ffmpeg -i video.mp4 -i audio1.mp3 -i audio2.mp3 -map 0:v -map 1:a -map 2:a -c copy -metadata:s:a:0 language=eng -metadata:s:a:1 language=fr output.mp4
70. 视频音频同步检测
- 检测并修正音视频同步问题shell修正音视频同步问题,并确保输出文件的长度由最短的流决定。
ffmpeg -i input.mp4 -vf "asetpts=PTS-STARTPTS" -c copy -map 0:v:0 -map 0:a:0 -shortest output.mp4
71. 字幕添加的问题
在FFmpeg中添加字幕需要使用subtitles滤镜,但是FFmpeg不支持直接在视频文件中添加字幕。字幕需要单独的文本文件,然后使用subtitles滤镜将其与视频文件关联起来。
shell
字幕文件,相对于运行目录, 不支持盘符