音视频程序/库总结(ffmpeg, moviepy, librosa,pydub,sox)

慢慢总结……

moviepy

这个感觉非常好用,包括裁剪,之类的

from moviepy.editor import VideoFileClip

查时长
同样有 AudioClip

clip = VideoFileClip(fnm)
print( clip.duration )

librosa

duration = librosa.get_duration(filename=line)

介绍

https://www.cnblogs.com/LXP-Never/p/11561355.html
https://www.cnblogs.com/LXP-Never/p/10918590.html
https://librosa.org/

pydub

获得音频时长

from pydub import AudioSegment
AudioSegment.from_wav(fnm).duration_seconds

通过网页获得二进制数据进行播放

import pydub
from pydub.playback import play
data = r.content # 已某种方式获得 字节流,比如通过 request
song = pydub.AudioSegment.from_file(io.BytesIO(data), format="wav")
play(song)

音频拼接: 基于毫秒整数级别直接相加拼接音频。

bg_tm = int( bg * 1000 )
ed_tm = int( tm * 1000 )

merge_a = base_a[:bg_tm] + gen_a + base_a[ed_tm:]
merge_a.export(fa_tmp1, format="wav")

sox

这个需要 apt install 安装

soxi xx.wav

mediainfo

也是 apt install 安装的,可以查看 语音视频数据的信息

ffmpeg

安装

因为会用anaconda,所以这样装的话会有ffmpeg

conda install x264 ffmpeg -c conda-forge

资料

I帧、B帧、P帧、PTS、DTS

用法

查看信息

ffmpeg -i input.file
ffmpeg -codecs 支持的编码格式
ffmpeg -formats 查看支持的输出格式
ffmpeg -muxers 查看同上?
ffmpeg -h encoder=qtrle 查看某个编码支持的format
// Supported pixel formats: rgb24 rgb555be argb gray

提取音频

提取wav注意一些参数的设置,如果不加的话音频会比较大

ffmpeg -ss 3 -t 83 -i a.mp4 -acodec pcm_s16le -ar 24000 -ac 1 jazz_3.wav

提取mp3 -vn 表示不要视频

ffmpeg -i a.mp4 -f mp3 -vn a.mp3

截取、裁剪、缩放、设置码率、不输出log

省了用ocv处理了

ffmpeg -y -loglevel error -i $fin -ss 3 -t 32 -vf crop=1700:1700:950:200,scale=900:900 -vcodec mpeg4 -b:v 42627k  $fout

crop=w:h:x_left:y_top

缩小视频

ffmpeg -y -loglevel error -i song1.mp4 -vf "scale=iw/2:ih/2" -profile:v baseline -vcodec h264 -crf 24

文字水印

ffmpeg -y -loglevel error -i $fvin -vf "drawtext=fontfile=/Library/Fonts/Arial Unicode.ttf:text='合成视频
make by XXX':y=(mod(7*n\,h+th)):x=(mod(5*n\,w+tw)):enable=lt(mod(t\,1)\,1):fontsize=120:fontcolor=yellow:shadowy=2" -b:v 3000k $fvout

旋转90度

ffmpeg -i $INPUTVIDEO -metadata:s:v rotate="-90" -codec copy $OUTPUTVIDEO

还有一种方法是使用参数:

need_params="-vf transpose=1"
must_params="-r 25 -shortest -c:v h264 -crf 18 -preset slow -strict -2"
ffmpeg -y -loglevel error -i yangp.JPG  -i maxiaohao.wav -r 1 -pix_fmt yuvj420p -b:v 3000k  -vf crop=1700:2300:682:615,scale=1020:1380  res.mp4

更多信息可参考

ffmpeg -y -loglevel error -i a.mp4 -vf "transpose=2" out.mp4
# -c copy -metadata:s:v:0 rotate=90

手机拍摄后,缩放视频,旋转

exe="ffmpeg -loglevel error -y -threads 4"
$exe -i video_clip/$x.mp4 -metadata:s:v rotate="0"  -vf "scale=720:1280" -c:v h264 -crf 18 -preset veryslow -strict -2 resize/$x.mp4
# -c:a copy 声音如果不重复编码,好像会对不上

码率。分辨率

ffmpeg -i input.mp4  -b:v 10000k -s 216x384 output4.mp4

合并视频
filelist.txt 可能必须和视频同目录

ls crop/talk_*.mp4 | awk -F/ '{ print "file " $2}' > crop/filelist.txt
cat crop/filelist.txt
$exe -f concat -i crop/filelist.txt -c copy crop/merge_think_watch.mp4

多种结合,-ss, -t 在前面会快很多,-r 在前面不知道是否有问题

$exe -ss 7 -t 600 -i video_org/talk_think1.mp4 -metadata:s:v rotate="0" -vf scale=720:1280,crop=512:512:100:120 \
 -r 25 -shortest -c:v h264 -crf 18 -preset veryslow -strict -2  video_clip/talk_think1.mp4

音频延时

ffmpeg -i video.mp4 -i audio.wav -filter_complex "adelay=150|150" output.mp4

提取图片,合并视频

n 表示提取几张

ffmpeg -i test.asf -y -f  image2  -ss xx:xx:xx -vframes n  test%d.jpg
# method 2
ffmpeg -i {} -start_number 0 {}/%05d.png

合并成视频

ffmpeg -r {} -y -i {}/%05d.png -b:v 10000k -c:v libx264 -colorspace 11 -color_primaries 1 -color_trc 1 -vf format=yuv420p {}

#pts !=1
ffmpeg -r {} -y -i {}/%05d.png -b:v 10000k -c:v libx264 -colorspace 11 -color_primaries 1 -color_trc 1 -filter:v format=yuv420p,setpts={}*PTS {}

缩放图片

不想每次都自己写代码

ffmpeg -i a.png -vf scale=302:-1 use_imgs/open.png

视频水平竖直拼接

https://www.codetd.com/article/9756362

1. 水平拼接
ffmpeg -i out1.mp4 -i out2.mp4 -filter_complex "[0:v]pad=iw*2:ih*1[a];[a][1:v]overlay=w" out.mp4
//pad是将合成的视频宽高,这里iw代表第一个视频的宽,iw*2代表合成后的视频宽度加倍,ih为第一个视频的高,合成的两个视频最好分辨率一致,[a]表示前面的操作命名为[a]。overlay是覆盖,[a][1:v]overlay=w,后面代表是覆盖位置w:0,整体表示叠加。

2.竖屏拼接

ffmpeg -i out1.mp4 -i out2.mp4 -filter_complex "[0:v]pad=iw:ih*2[a];[a][1:v]overlay=0:h" out.mp4
三个视频拼接
1.横向拼接

ffmpeg -i out1.mp4 -i out2.mp4 -i out3.mp4 -filter_complex "[0:v]pad=iw*3:ih*1[a];[a][1:v]overlay=w[b];[b][2:v]overlay=2.0*w" out.mp4 
2.竖向拼接

ffmpeg -i out1.mp4 -i out2.mp4 -i out3.mp4 -filter_complex "[0:v]pad=iw:ih*3[a];[a][1:v]overlay=0:h[b];[b][2:v]overlay=0:2.0*h" out.mp4
四个视频2x2方式排列

ffmpeg -i out1.mp4 -i out2.mp4 -i out3.mp4 -i out4.mp4 -filter_complex "[0:v]pad=iw*2:ih*2[a];[a][1:v]overlay=w[b];[b][2:v]overlay=0:h[c];[c][3:v]overlay=w:h" out.mp4

后面发现有更简单的方法:
垂直拼接用 vstack, 水平拼接用 hstack,= 后面跟着数量

ffmpeg -i inp1.mp4 -i inp2.mp4 -filter_complex vstack=inputs=2 -c:v h264 -b:v 20m  out.mp4

音视频分离和拼接

// 去掉视频中的音频
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
// -an: 去掉音频;-vcodec:视频选项,一般后面加copy表示拷贝

// 提取视频中的音频
ffmpeg -i input.mp4 -acodec copy -vn output.mp3
// 生成wav必须要指定,否则文件会很大
ffmpeg -i input.mp4 -ac 1 -ar 16000 -f wav -vn output.wav

c++ 使用

http://ffmpeg.org/releases/
http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

../configure --prefix="xxx/bin/ffmpeg" --enable-pic --enable-shared

重新编译

https://www.jianshu.com/p/ee7719946fac

缺少mp3解决

git clone https://git.ffmpeg.org/ffmpeg.git

备份

./configure --arch=x86 --enable-shared --disable-static --enable-libmp3lame --disable-yasm
./configure --prefix=xxxxx/ffmpeg --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-debug --disable-optimizations --enable-libspeex --enable-videotoolbox --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --cc=clang --host-cflags= --host-ldflags= --disable-x86asm 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值