晓夏

北漂的女孩

Good Luck To You!

ffmpeg脚本学习

浏览量:170

一、简单的操作

  • 对于 MPEG 格式的视频,可以直接连接:视频尺寸要一致

ffmpeg -i concat:"1.mpg|2.mpg|3.mpg" -c copy output.mp4
  • 对于非 MPEG 格式容器,但是是 MPEG 编码器(H.264、DivX、XviD、MPEG4、MPEG2、AAC、MP2、MP3 等),

    可以包装进 TS 格式的容器再合并。在新浪视频,有很多视频使用 H.264 编码器,可以采用这个方法(视频尺寸可以不一致)

    视频合并  素材.mp4 逐个转化为  素材.ts

ffmpeg -i 1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 1.ts
ffmpeg -i 2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 2.ts
ffmpeg -i 3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 3.ts
  • 将1.ts,2.ts,3.ts 合成mp4。

ffmpeg -i "concat:1.ts|2.ts|3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart ts.mp4
  • 截取从第02:53开始后的10分02秒的长度的视频(CPU计算较慢,尝试使用GPU CUDA加速报错,待尝试)

ffmpeg -ss 00:02:53 -vsync 0 -t 00:10:01 -i ts.mp4   out.mp4
  • 用audio音频替换video中的音频

ffmpeg -i 1.mp4 -i 1.mp3-c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 output.mp4
  • 用audio音频和video中的音频混声

ffmpeg -i text.mp4 -stream_loop -1 -i 4.mp3 -filter_complex [0:a][1:a]amix -t 60 -y hun.mp4


二、FFmpeg concat 分离器

    这种方法成功率很高,也是最好的,但是需要 FFmpeg 1.1 以上版本。先创建一个文本文件filelist.txt:

    file 'input1.mkv'

    file 'input2.mkv'

    file 'input3.mkv'

    然后:

ffmpeg -f concat -i filelist.txt -c copy output.mkv

    注意:使用 FFmpeg concat 分离器时,如果文件名有奇怪的字符,要在 filelist.txt 中转义

    测试了一下,不同尺寸的视频可以正常合成,但是不同格式的合成有问题

三、使用concat滤镜(filter)进行视频文件的合并:

 ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]' -map '[v]' -map '[a]’  output.mp4

    上面的命令合并了三种不同格式的文件,FFmpeg concat 过滤器会重新编码它们。注意这是有损压缩。

    [0:0] [0:1] [1:0] [1:1] [2:0] [2:1] 分别表示第一个输入文件的视频、音频、第二个输入文件的视频、音频、第三个输入文件的视频、音频。

    concat=n=3:v=1:a=1 表示有三个输入文件,输出一条视频流和一条音频流。

    [v] [a] 就是得到的视频流和音频流的名字,注意在 bash 等 shell 中需要用引号,防止通配符扩展。

  • 音频拼接

ffmpeg -i "concat:3.mp3|4.mp3" -acodec copy third.mp3 (3格式和4保持一致)
  •  音频拼接

ffmpeg -i "concat:first.mp3|second.mp3" -i second.mp3 -acodec copy test.mp3 -map_metadata 0:1  (third格式和second保持一致)
  •  音视频混合,不调整音量

ffmpeg -i 1.mp4 -i 3.mp3 -c:v copy -map 0:v:0 -filter_complex "[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]" -ac 2  mix_amerge.mp4
  • 音频混合,调整第1个音频的音量和第2个音频的音量

ffmpeg -i 3.mp3 -i 4.mp3 -filter_complex "[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a0]; 
[1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.9[a1]; [a0][a1]amerge=inputs=2[aout]" 
-map "[aout]" -ac 2 mix_v0.5.mp3
  •  音频混合,调整第1个音频的音量和第2个音频的音量

ffmpeg -i 3.mp3 -i new2.mp3 -filter_complex "[0:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.5[a0]; 
[1:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.9,adelay=5000|5000|5000,apad[a1]; [a0][a1]amerge=inputs=2[aout]" 
-shortest -map "[aout]" -ac 2 mix_new1.mp3

    // apad  -shortest   是使音频长度为最长

    // adelay            延时播放时间

  •  音视频混合,调整第1个音频的音量和第2个音频的音量

ffmpeg -i 1.mp4 -i 2.mp3 -filter_complex "[0:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.4[a0]; 
[1:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.9,adelay=5000|5000|5000[a1]; 
[a0][a1]amix=inputs=2:duration=first[aout]" -map [aout] -ac 2 -c:v copy -map 0:v:0 new3.mp4

视频合并

  • 第一步将output1.mp4文件转成output1.ts

ffmpeg -i output1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb output1.ts
  • 第二步将output1.ts和output2.ts合并为Cam01.mp4

ffmpeg -y -f concat -safe 0 -i list.txt -c copy Cam01.mp4

    list.text内容如下:

    file 'output1.ts'

    file 'output2.ts'

 

  • 1.视频编辑 比如从第5秒的地方开始,往后截取10秒钟

ffmpeg -ss 5 -t 10 -i output1.mp4 output2.mp4

 

  • 2.视频加背景音乐

ffmpeg -y -i Cam01.mp4 -i jj01.mp3 -filter_complex 
[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a0];
[1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a1];
[a0][a1]amix=inputs=2:duration=first[aout] -map [aout] -ac 2 -c:v copy -map 0:v:0 -preset superfast result.mp4

 

  • 3.视频加速

ffmpeg -i result.mp4 -vf setpts=PTS/2 -af atempo=2 result01.mp4

 

  • 4.音频剪辑

ffmpeg -y -i 124.mp3 -vn -acodec copy -ss 00:00:00 -t 00:01:32 output.mp3

 

  • 5.调整视频宽高

ffmpeg -i result.mp4 -vf scale=320*240result02.mp4

 

  • 6.分辨率  -vf scale=1920:1080

ffmpeg -i tsAll.mp4 -stream_loop -1 -i BGM.mp3 -vf scale=1920:1080 -filter_complex [0:a][1:a]amix -t 540 -y gao.mp4

 

  • 7.比特率  -b

ffmpeg -i tsAll.mp4 -stream_loop -1 -i BGM.mp3 -vf scale=1920:1080 -b 1.5M -filter_complex [0:a][1:a]amix -t 540 -y su.mp4

 

  • 8.帧率 -r

ffmpeg -i input.avi -r 30 output.mp4

 

  • 9.将input.mp3的音量放大四倍

ffmpeg  -i   input.mp3   -vol   400    output.mp3

 

  • 10.分离视频音频流

ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流
eg:ffmpeg -i 1.mp4 -vcodec copy -an 2.mp4
ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流

 

  •  11.-r 提取图像的频率,-ss 开始时间,-t 持续时间

ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi    //剪切视频

 

  • 12.ffmpeg从视频中生成gif图片:

ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif

// -t参数表示提取前10秒视频

// -s 表示按照 320x240的像素提取

 

  • 13.ffmpeg将视频导出成多张图片

ffmpeg -i output.mp4 -r 30 -f image2 foo-%05d.jpeg

//   -r参数表示按照30帧的速度提取。


  • 14.ffmpeg视频加水印

ffmpeg -hide_banner -i zui.mp4 -i 12.png -filter_complex "overlay=x=0:y=0" out111.mp4 -y



神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。