有了这个库https://github.com/tanersener/mobile-ffmpeg ,我在 iOS 上使用 FFMPEG。我正在尝试从音频创建视频,并添加了相关的波形、背景和 Logo 图像。
let command = "-i \(audioPath) -i \(imagePath) -filter_complex \"[0:a]showwaves=s=hd720:mode=line: colors=0x666666|0x555555[v];[1:v]scale=hd720[bg];[bg][v]overlay=shortest=0:main_h-overlay_h-35[outv]\" -shortest -map '[outv]' -map 'a' -c:a aac -f mp4 \(videoPath)"
使用上面的命令,我正在创建一个包含音频、波形和背景图像的视频。let artworkCommand = "-y -i \(videoPath) -i \(artworkPath) -filter_complex \"[1:v][0:v]scale2ref=200:200[logo1][base];[base][logo1]overlay=20:20[v]\" -map \"[v]\" -map 0:a -y -codec:a copy \(artVideoPath)"
使用第二个命令,我在左上角添加了一个 Logo 图像。当我直接在终端上执行这些命令时,输出的视频质量很高,没有问题。但是当我在 iOS 设备上尝试相同的命令时,在视频的第一秒之后,它变得模糊。
当我执行第一个命令本身时,它看起来像这样变得模糊。谁能指出为什么会这样? TIA。
更新 1
日志 - https://www.dropbox.com/s/ev8gw8bvfe1m7ur/Logs_FFMPEG.rtf?dl=0
更新 2
按照建议,我修改了两个命令以包含比特率。它改进了视频,但仍然时不时地模糊。
let command = "-i \(audioPath) -i \(imagePath) -filter_complex \"[0:a]showwaves=s=hd720:mode=line: colors=0x666666|0x555555[v];[1:v]scale=hd720[bg];[bg][v]overlay=shortest=0:main_h-overlay_h-35[outv]\" -shortest -map '[outv]' -map 'a' -c:a aac -b:v 2M \(videoPath)"
let artworkCommand = "-y -i \(videoPath) -i \(artworkPath) -filter_complex \"[1:v][0:v]scale2ref=200:200[logo1][base];[base][logo1]overlay=20:20[v]\" -map \"[v]\" -map 'a' -c:a aac -b:v 2M \(artVideoPath)"
在 iOS 设备上执行的两个命令的演示 - https://www.dropbox.com/s/6ux4obufb0eiax6/video1x1_art.MP4?dl=0日志 - https://www.dropbox.com/s/cjm259oehd048xb/Logs2.rtf?dl=0
最佳答案
正在使用旧编码器
您的 ffmpeg
在 iOS 上没有启用 H.264 或 H.265/HEVC 视频编码器。例如,--enable-libx264
您的配置行中缺少。所以默认为 MP4 输出 ffmpeg
使用名为 mpeg4 的编码器。此编码器输出较旧的传统视频格式:MPEG-4 Part 2。
在 iOS 上使用
ffmpeg
支持您需要的格式的现代编码器。代损失
当您只需要编码一次时,您正在编码两次。这导致 generation loss .在一个命令中完成所有操作:
let command = "-i \(audioPath) -i \(imagePath) -i \(artworkPath) -filter_complex \"[0:a]showwaves=s=hd720:mode=line: colors=0x666666|0x555555[v];[1:v]scale=hd720[bg];[bg][v]overlay=shortest=0:main_h-overlay_h-35:format=auto[bg];[2]scale=200:200[fg];[bg][fg]overlay=20:20:format=auto,format=yuv420p[outv]\" -shortest -map '[outv]' -map 0:a -c:a aac -movflags +faststart -f mp4 \(videoPath)"
其他变化:format
覆盖过滤器的选项可以提高质量。 -movflags +faststart
添加以启用快速开始播放。 关于ios - FFMPEG 创建模糊视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62889848/