mat*_*teo 246 audio video ffmpeg images
这应该很简单,但我找不到让它工作的方法。
我希望 FFmpeg 将一个 JPEG 图像和一个音频文件作为输入,并生成一个与音频文件持续时间相同的视频文件(通过在整个持续时间内拉伸静止图像)。
我不太关心用于输出的视频编解码器,但至关重要的是我可以使用“复制”作为音频编解码器(即复制音频流而不对其进行转码)。
什么是可以做到这一点的正确命令行?
我试过:
ffmpeg -i image8.jpg -i sound11.amr -acodec copy test.avi
Run Code Online (Sandbox Code Playgroud)
并尝试了很多有和没有的组合-s 640x360
,-loop_input
,-shortest
,-t xxx
,-r 0.1
(在希望的视频会更长人为的低帧率)和-f image2
要么出现错误,要么得到一帧持续时间的视频文件。
我在谷歌上搜索并发现了十几种提议的解决方案(据说是针对同一个问题),但没有一个有效。
任何人都可以提出一个工作命令并解释其背后的基本原理吗?
mat*_*teo 206
命令行中选项的顺序很重要。以下适用于我的情况:
ffmpeg -loop 1 -y -i image8.jpg -i sound11.amr -shortest -acodec copy -vcodec mjpeg result.avi
Run Code Online (Sandbox Code Playgroud)
在更一般的情况下,你的输入在哪里image.jpg
和audio.wav
是你的输入,你可以使用以下命令,改编自FFmpeg wiki:
ffmpeg -loop 1 -i image.jpg -i audio.wav -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest out.mp4
Run Code Online (Sandbox Code Playgroud)
这将使用libx264
编码器并为您提供比上面使用的 MJPEG 编解码器更好的压缩。音频为 AAC,内置ffmpeg
AAC 编码器。
PJ *_*net 55
更简单:
ffmpeg -i ep1.png -i ep1.wav ep1.flv
FFmpeg 将尝试自动选择最佳编解码器,具体取决于输出文件的扩展名。
更新:我注意到 YouTube 难以处理视频(卡在 95% 处),我想是因为只有一帧。我找到的让 YouTube 满意的解决方案:添加更多帧。另外,我添加了-acodec copy
以保持音频质量。你需要-shortest
或者它永远循环。(它停在最短的流的末尾,也就是音频,因为图像循环是无限的。)选项的顺序对速度非常重要,因为过滤器(等)按照您指定的顺序进行处理。如果您更改这些参数的顺序,结果会大不相同。
ffmpeg -r 1 -loop 1 -i ep1.jpg -i ep1.wav -acodec copy -r 1 -shortest -vf scale=1280:720 ep1.flv
另请注意,我将帧速率设置了两次,这并非偶然——第一个帧速率用于输入,第二个用于输出。如果您正确执行此操作,则视频每秒应该只有一帧,这意味着它的编码速度相对较快。此外,我在这里将分辨率设置为 720p,这意味着您应该在 YouTube 上获得高清音频:-)
小智 46
你正在做的方式更难比它必须是。FFmpeg 比您认为的要聪明得多——它知道您希望视频与音轨的长度相同。
ffmpeg -i still.png -i narrate.wav -acodec libvo_aacenc -vcodec libx264 final.flv
pause
Run Code Online (Sandbox Code Playgroud)
唯一的属性,你必须到指定是input filenames
,在output codecs
和output filename
(其中EO IPSO包括output container
)。
当然,从与最终视频共享相同尺寸的静止图像开始是有意义的;如果您使用专用图像编辑器而不是为 FFmpeg 指定输出尺寸以满足,则需要确保输入尺寸为偶数。
输出大小是FFmpeg 最常见的问题之一;一些编解码器在输出维度上比其他编解码器更受限制,但没有输出可以具有奇数的高度或宽度属性。
pause
批处理文件末尾的命令使 CLI 保持打开状态——调试命令行的最佳方法是阅读它生成的错误消息。它们非常具体——而且是 FFmpeg 拥有的最好的文档——但是如果在你阅读它们之前让窗口关闭,开发人员的辛勤工作就白费了。
命令 shell有一个开关cmd /k
,用于维护一个打开的窗口,您可以在该窗口中在命令提示符下运行来自批处理脚本的相同指令。
FFmpeg和avconv最终都会让你使用-c:a
for-acodec
和-c:v
for -vcodec
,但旧指令在我使用的构建中工作正常。
Nota Bene:每个提交都有其特质。如果您的命令行无缘无故失败,尝试另一个构建通常会有所帮助 - 或者跟随分支到libav,FFmpeg 最活跃的开发人员在过去几年中一直在那里。他们的转码工具已重命名为avconv,但您的批处理文件应该可以与任何一个一起使用。
fgu*_*len 20
对我有用的版本:
ffmpeg -loop 1 -y -i pic.jpg -i sound.amr -shortest video.mp4
Run Code Online (Sandbox Code Playgroud)
-shortest
如果没有,请检查该选项必须位于输出文件的前面,否则我收到以下错误:
选项最短(在最短输入中完成编码)不能应用于输入文件 pic.jpg - 您正在尝试将输入选项应用于输出文件,反之亦然。将此选项移动到它所属的文件之前。解析输入文件 pic.jpg 的选项时出错。
从 ffmpeg 联机帮助页:
ffmpeg [[infile options][-i infile]]... {[outfile options] outfile}...
Run Code Online (Sandbox Code Playgroud)
正如您所发现的,infile 选项必须在它们适用的 infile 之前。
然而,这不是错误,只是一种机制,您可以通过该机制指定适用于哪些 infile 参数。
这对我有用
ffmpeg -loop 1 -shortest -y -i image.jpg -i audio.mp3 -acodec copy -vcodec libx264 video.avi
我发现 vcodeclibx264
创建的文件比mpjeg
(10 MB 而不是 100 MB)小得多。
这是一个完整的解释:
ffmpeg -i image.jpg -i audio.mp3 -c:v libx264 -tune stillimage -c:a copy out.mp4
Run Code Online (Sandbox Code Playgroud)
-i image.jpg -i audio.mp3
: 图像和音频输入
-c:v libx264
: 使用 x264 编码视频。
-tune stillimage
: x264 设置以优化视频以进行静态图像编码
-c:a copy
:复制用于输入音频的编解码器。如果您想要不同的音频编解码器,您可以更改此设置。
我没有使用-loop 1
或-shortest
。-loop 1
大大减慢编码并创建一个更大的文件。-shortest
不应该使用,-loop 1
因为那时视频将是一帧长。然而,YouTube 不喜欢只有一帧的视频(参见 PJ Brunet 的回答),所以这两个选项都应该使用。
归档时间: |
|
查看次数: |
137962 次 |
最近记录: |