ffmpeg 命令集的简单实用方法

一、常用操作

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

扫描二维码关注公众号,回复: 17282210 查看本文章

说明:

* 源视频: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. 音频文件数1-5 个,需要依次拼接输入文件;

  2. 每个文件都支持只保留选中的时间段内的内容;

  3. 第一个文件可以选择是否开启 淡入 效果,最后一个文件可以选择是否开启 淡出效果;

  4. 文件数大于 1 时,可以选择是否开启 交叉淡入淡出 效果(前一段的后 N 秒 淡出 的同时,后一段的前 N 秒 淡入);

  5. 可以指定合并后输出的文件格式;

  6. 以上步骤的先后顺序很关键,遵循顺序:拼接输入文件列表 -> 裁剪 -> 淡入淡出 -> 交叉淡入淡出。

以合并 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

因为需要使用到 atrimafadeacrossfade 等多个 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 ratesample 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 段音频得到输出。

猜你喜欢

转载自blog.csdn.net/qq_36437693/article/details/133977298
今日推荐