【ffmpeg】音频+图片合成视频

ffmpeg音频转码为视频

  • 需求:将一段音频和一张图片合成一个视频
  • 难点:可能在IOS的小程序里面无法播放
  • 盲点:如果一直测试一个视频,一定要清除微信的缓存,记住是微信的缓存!!!
  • 其他:如果图片的长宽有奇数,一定要先转成都是偶数!!
# mp3 生成 mp4
function mp3tomp4(){
    lrc_dir=$1
    echo $lrc_dir
    cd $lrc_dir
    mp3="out.mp3"
    mp4="out.mp4"
    image=$(find . -name "*.new.jpg")
	
	# 转码的那一条命令
    ffmpeg -an -i ${mp3} -i ${image} -vcodec libx264 -codec:a aac -qscale:a 1 -pix_fmt yuv420p -profile:v baseline -level 3 -y ${mp4}
    #ffmpeg -i ${mp3} -i ${image}  -avoid_negative_ts 1  -y -vcodec libx264 -crf 18 -pix_fmt yuv420p -qcomp 0.8 -preset medium -acodec aac -b:a 400k -x264-params ref=4 -profile:v baseline -level 3.1 -movflags +faststart ${mp4}
    #ffmpeg -i ${image} -i ${mp3}  -avoid_negative_ts 1 -vcodec libx264 -acodec aac -qscale:a 1  -pix_fmt yuv420p  -y ${mp4}
}
export -f mp3tomp4

# 图片处理长宽为奇数的情况,注意这里先转换为了 shape=(x:720)
function image_resize(){
    lrc_dir=$1
    cd $lrc_dir
    image=$(find . -name "*.new.jpg")
    newimage=$(echo $image | sed 's|new.jpg|www.jpg|g')

    # 将图片转为720
    ffmpeg -i $image -vf scale=-1:720 -y $newimage
    
    # 如果长宽有一条边不能是偶数,进行处理
    wh=$(ffmpeg -i $image 2>&1 | grep -oE "[0-9]+x[0-9]+" | awk -F'x' '{if($1%2!=0){ w=$1-1}else{w=$1}  if($2%2!=0){h=$2-1}else{h=$2} printf("%s:%s", w, h)}')   
    ffmpeg -i $image -vf scale=${wh} -y $newimage

    mv $image ${image}.bak
    mv $newimage $image
    mp3tomp4 $lrc_dir
}
export -f image_resize

参考文章

  • https://blog.csdn.net/wangshuainan/article/details/77914508

打赏作者^_^

【ffmpeg】音频+图片合成视频_第1张图片 【ffmpeg】音频+图片合成视频_第2张图片
微信 && 支付宝

你可能感兴趣的:(DevOps)