一、常用操作
1.获取视频的信息
ffmpeg -i video.MP4
4.为视频重新编码以适合在iPod/iPhone上播放
ffmpeg -i source_video.MP4 input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4
说明:
* 源视频:source_video.MP4
* 音频编码:aac
* 音频位率:128kb/s
* 视频编码:mpeg4
* 视频位率:1200kb/s
* 视频尺寸:320 X 180
* 生成的视频:final_video.mp4
5.为视频重新编码以适合在PSP上播放
ffmpeg -i source_video.MP4 -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4
说明:
* 源视频:source_video.MP4
* 音频编码:aac
* 音频位率:32kb/s
* 视频编码:xvid
* 视频位率:1200kb/s
* 视频尺寸:320 X 180
* 生成的视频:final_video.mp4
6.从视频抽出声音.并存为Mp3
ffmpeg -i source_video.MP4 -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3
说明:
* 源视频:source_video.MP4
* 音频位率:192kb/s
* 输出格式:mp3
* 生成的声音:sound.mp3
7.将wav文件转成Mp3
ffmpeg -i son_origine.MP4 -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3
8.将.MP4视频转成.mpg
ffmpeg -i video_origine.MP4 video_finale.mpg
9.将.mpg转成.MP4
ffmpeg -i video_origine.mpg video_finale.MP4
10.将.MP4转成gif动画(未压缩)
ffmpeg -i video_origine.MP4 gif_anime.gif
11.合成视频和音频
ffmpeg -i son.wav -i video_origine.MP4 video_finale.mpg
12.将.MP4转成.flv
ffmpeg -i video_origine.MP4 -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv
13.将.MP4转成dv
ffmpeg -i video_origine.MP4 -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv
或者:
ffmpeg -i video_origine.MP4 -target pal-dv video_finale.dv
14.将.MP4压缩成divx
ffmpeg -i video_origine.MP4 -s 320x240 -vcodec msmpeg4v2 video_finale.MP4
15.将Ogg Theora压缩成Mpeg dvd
ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg
16.将.MP4压缩成SVCD mpeg2
NTSC格式:
ffmpeg -i video_origine.MP4 -target ntsc-svcd video_finale.mpg
PAL格式:
ffmpeg -i video_origine.MP4 -target pal-svcd video_finale.mpg
17.将.MP4压缩成VCD mpeg2
NTSC格式:
ffmpeg -i video_origine.MP4 -target ntsc-vcd video_finale.mpg
PAL格式:
ffmpeg -i video_origine.MP4 -target pal-vcd video_finale.mpg
18.多通道编码
ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2
19.从flv提取mp3
ffmpeg -i source.flv -ab 128k dest.mp3
二、实例详解FFmpeg视频转换的参数设置方法
例如:ffmpeg -y -i "test.MP4" -title "Test" -vcodec xvid -s 1920*1080 -r 30 - b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 "test.***"
# 参数解释:
-y(覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了)
-i "1.MP4"(输入文件是和ffmpeg在同一目录下的1.MP4文件,可以自己加路径,改名字)
-title "Test"(在PSP中显示的影片的标题)
-vcodec xvid(使用XVID编码压缩视频,不能改的)
-s 1920*1080(输出的分辨率为1920*1080,注意片源一定要是16:9的不然会变形)
-r 30(帧数,一般就用这个吧)
-b 1500(视频数据流量,用-b xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale 6,4的质量比6高)
-acodec aac(音频编码用AAC)
-ac 2(声道数1或2)
-ar 24000(声音的采样频率,好像PSP只能支持24000Hz)
-ab 128(音频数据流量,一般选择32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(输出psp专用格式)
-muxvb 768(好像是给PSP机器识别的码率,一般选择384、512和768,我改成1500,PSP就说文件损坏了)
"test.***"(输出文件名,也可以加路径改文件名)
三、不同格式之间的相互转换
◆将任意视频格式(如MP4)转换成视频格式(如MPEG1)+音频格式(AC3)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.MP4 -vcodec mpeg1video –s 1920*1080 –r 60 -acodec ac3 E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][60fps][MPEG1]_Audio[ac3].mpeg
◆将任意视频格式(如MP4)转换成视频格式(如MPEG2)+音频格式(DTS)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.MP4 -vcodec mpeg2video –s 1920*1080 –r 60 -acodec dca -strict -2 E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][60fps][MPEG2]_Audio[DTS].mpeg
◆将任意视频格式(如MP4)转换成视频格式(如MPEG2)+音频格式(PCM)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.MP4 -vcodec mpeg2video –s 1920*1080 –r 60 -acodec pcm_alaw E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][60fps][MPEG2]_Audio[PCM].mpeg
◆将任意视频格式(如MP4)转换成视频格式(如MPEG4)+音频格式(MP3)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.MP4 -vcodec mpeg4 –s 1920*1080 –r 60 -acodec dlibmp3lame E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][60fps][MPEG4]_Audio[ac3].mpeg
◆将任意视频格式(如MP4)转换成视频格式(如MJPEG)+音频格式(MP2)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.MP4 -vcodec mjpeg –s 1920*1080 –r 60 -acodec mp2 E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][60fps][ MJPEG]_Audio[MP2].mpeg
◆将任意视频格式(如MP4)转换成视频格式(如DivX5)+音频格式(DTS)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][60fps][DIVX5]_Audio[AC3].MP4 –s 1920*1080 –r 60 -acodec dca -strict -2 E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][60fps][DIVX5]_Audio[dts].MP4
◆将任意视频格式(如MP4)转换成视频格式(如H.263)+音频格式(AC3)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.mp4 -vcodec h263p -s 720x480 -acodec ac3 E:\FormatTransfer_Tools\ffmpeg\bin\Video[720x480][60fps][h263]_Audio[ac3].MP4
◆将任意视频格式(如MP4)转换成视频格式(如H.264)+音频格式(AAC)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.mp4 -vcodec libx264rgb –s 1920*1080 -r 30 -acodec libvo_aacenc E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][30fps][h264]_Audio[aac].3gp
◆将任意视频格式(如MP4)转换成视频格式(如Sorenson_Spark)+音频格式(MP3)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.mp4 -vcodec flv –s 1920*1080 –r 60 -acodec libmp3lame E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][60fps][Sorenson_Spark]_Audio[MP3].MP4
◆将任意视频格式(如MP4)转换成视频格式(如WMV3)+音频格式(WMA)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.mp4 -vcodec wmv3image –s 1920*1080 –r 60 -acodec wmav1 E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][60fps][WMV3]_Audio[wma1].MP4
◆将任意视频格式(如MP4)转换成视频格式(如XviD)+音频格式(AC3)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.mp4 -vcodec libxvid –s 1920*1080 –r 60 -acodec ac3 E:\FormatTransfer_Tools\ffmpeg\bin\Video[1920x1080][60fps][XviD]_Audio[AC3_fixed].MP4
◆将任意视频格式(如MP4)转换成视频格式(如RV)+音频格式(AAC)的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.mp4 -vcodec rv10 -s 1280x720 -acodec libvo_aacenc E:\FormatTransfer_Tools\ffmpeg\bin\Video[1280x720][60fps][RV10]_Audio[aac].MP4
◆将任意视频格式(如MP4)转换成视频格式(如H.264)+分辨率为4k的视频:
ffmpeg -y -i E:\FormatTransfer_Tools\ffmpeg\bin\test.mp4 -vcodec libx264rgb -s 4096x2304 -r 30 -acodec libmp3lame E:\FormatTransfer_Tools\ffmpeg\bin\Video[4096x2304][30fps][h264]_Audio[mp3].avi
四、音频操作
音频压缩
命令:
ffmpeg -i input.mp3 -map 0:a:0 -b:a 256k output.mp3
可以把 256
替换为其它数值,比如 320/256/128/64/32。
音频提取
命令:
ffmpeg -i input.mp4 -vn output.mp3
音频合并
需求技术分析:
-
音频文件数1-5 个,需要依次拼接输入文件;
-
每个文件都支持只保留选中的时间段内的内容;
-
第一个文件可以选择是否开启
淡入
效果,最后一个文件可以选择是否开启淡出
效果; -
文件数大于
1
时,可以选择是否开启交叉淡入淡出
效果(前一段的后 N 秒淡出
的同时,后一段的前 N 秒淡入
); -
可以指定合并后输出的文件格式;
-
以上步骤的先后顺序很关键,遵循顺序:拼接输入文件列表 -> 裁剪 -> 淡入淡出 -> 交叉淡入淡出。
以合并 3 个音频为例:
ffmpeg -i input1.mp3 -i input2.mp3 -i input3.mp3 \ -filter_complex "[0]atrim=10.0:20.9[00];[1]atrim=40.0:50.9[11];[2]atrim=70.0:80.9[22];\ [00]afade=enable='between(t,10.0,13.0)':t=in:st=10.0:d=3:curve=desi[000];\ [cc]afade=enable='between(t,77.9,80.9)':t=out:st=77.9:d=3:curve=desi[ccc];\ [000][11]acrossfade=d=3:c1=desi:c2=desi[cf-0];[cf-0][ccc]acrossfade=d=3:c1=desi:c2=desi" \ output.mp3
解释:
-i input1.mp3 -i input2.mp3 -i input3.mp3
因为有多个输入文件,所以要依次拼凑起来。
-filter_complex
因为需要使用到 atrim
、afade
、acrossfade
等多个 filter,所以需要使用 -filter_complex
,作用是组合多个 filter。
[0]atrim=10.0:20.9[00];[1]atrim=40.0:50.9[11];[2]atrim=70.0:80.9[22];
为每个文件都支持只保留选中的时间段内的内容。
[0]
表示取第一个输入文件;
atrim
表示做裁剪操作;
10.0:20.9
表示保留文件的 10.0
秒到 20.9
秒之间的部分;
[00]
表示 [0]
经过 atrim
处理后输出的 stream 是 [00]
,后续的操作都在 [00]
上进行;
第二个和第三个文件的 atrim
操作同理。
[00]afade=enable='between(t,10.0,13.0)':t=in:st=10.0:d=3:curve=desi[000];\ [cc]afade=enable='between(t,77.9,80.9)':t=out:st=77.9:d=3:curve=desi[ccc];\
实现第一个文件的 淡入
效果,以及最后一个文件的 淡出
效果。
between(t,10.0,13.0)
表示在第 10
秒到第 13
秒,
t=in
表示 淡入
,
st=10.0
表示从第 10
秒开始,
d=3
表示淡入的时长为 3
秒,
curve=desi
表示淡入的效果曲线是 desi
, 更多的选择请参考:FFmpeg afade/acrossfade filter curves illustration ,
[000]
表示 [00]
经过 afade
处理后输出到 [000]
这个 stream,后续的操作都在 [00]
上进行。
[000][11]acrossfade=d=3:c1=desi:c2=desi[cf-0];[cf-0][ccc]acrossfade=d=3:c1=desi:c2=desi
[000][11]acrossfade
表示在 [000] 和 [11] 这两个相邻的对接文件之间启用 acrossfade
交叉淡入淡出效果,
d=3
表示交叉淡入淡出的时长为 3
秒,
c1=desi:c2=desi
表示两者中前一个文件的淡出效果曲线是 desi
,后一个文件的淡出效果曲线是 desi
,
[cf-0]
表示将这两个文件进行 交叉淡入淡出
后,会拼接到一个 stream
,这个 stream
使用 [cf-0]
引用。
音频裁剪/音量调整/播放速度调整
裁剪、音量调整、播放速度调整 这 3 个功能是可以同时进行的,所以放在一起说明。
ffmpeg \ -i input.mp3 \ -filter_complex "[0]atrim=end=170.0,asetpts=N/SR/TB[00];[0]atrim=start=172.0,asetpts=N/SR/TB[000];[00][000]concat=n=2:v=0:a=1[0000]; \ [0000]volume=2.0[00000]; \ [00000]atempo=2.0" \ -ab 256000 -ar 48000 output.mp3
裁剪-删除选中的部分:[0]atrim=end=170.0
表示取 [0]
这个 stream 的前 170.0
秒,[0]atrim=start=172.0
表示取 [0]
这个 stream 的 172.0
秒到结尾的部分,这两个 atrim
部分何在一起的效果就是删除 [0]
这个 stream 的第 170 - 172
秒的部分,
裁剪-保留选中的部分:[0]atrim=170.0:172.0[00]
保留第 170 - 172
秒之间的部分,
[00][000]concat=n=2:v=0:a=1[0000]
表示将 [00][000
拼接起来,输出到 [0000]
这个 stream,
[0000]volume=2.0[00000]
表示将音量放大到原来的 2
倍,
[00000]atempo=2.0
表示将播放速度提升到原来的 2
倍,
-ab 256000 -ar 48000
指定输入文件的 bit rate
和 sample rate
,一般取跟输入文件一样的数值。
音频添加背景音频
也就是让 2 段音频同时播放,难度在于:
-
每段音频都可以选择保留的片段,使用
atrim
filter; -
指定后播放的音频何时开始播放,使用
adelay
filter;
ffmpeg \ -i input1.mp3 -i input2.mp3 \ -filter_complex "[0]atrim=0.0:45.0[00];[1]atrim=30.0:45.0[11]; \ [00]volume=0.5[000];[1b]volume=2.0[111]; \ [111]adelay=30000.0|30000.0[1111]; \ [000][1111]amix[out]" \ -map '[out]' output.mp3
[111]adelay=30000.0|30000.0[1111]
指定 [111]
这个片段在在 30 秒后再开始播放,
[000][1111]amix[out]
混合 2 段音频得到输出。