我尝试了以下命令从视频中提取音频:
ffmpeg -i Sample.avi -vn -ar 44100 -ac 2 -ab 192k -f mp3 Sample.mp3
但我得到了如下的输出
libavutil 50.15. 1 / 50.15. 1
libavcodec 52.72. 2 / 52.72. 2
libavformat 52.64. 2 / 52.64. 2
libavdevice 52. 2. 0 / 52. 2. 0
libavfilter 1.19. 0 / 1.19. 0
libswscale 0.11. 0 / 0.11. 0
libpostproc 51. 2. 0 / 51. 2. 0
SamplE.avi: Invalid data found when processing input
有人能帮忙吗?
使用-b:a代替-ab,因为-ab现在已经过时了,还要确保输入的文件路径是正确的。
从视频中提取音频,我已经使用下面的命令和它的工作良好。
String[] complexCommand = {"-y", "-i", inputFileAbsolutePath, "-vn", "-ar", "44100", "-ac", "2", "-b:a", "256k", "-f", "mp3", outputFileAbsolutePath};
在这里,
-y -覆盖输出文件而不询问。
-i - FFmpeg从-i选项指定的任意数量的输入“文件”中读取
-vn -关闭录像功能
-ar -设置音频流编码时的采样率
-ac -设置音频通道数。
-b:a—设置音频比特率
-f - format
在GitHub上查看我完整的FFmpeg android项目示例。
从几个视频剪辑创建一个音频书
首先,从一堆h264文件中提取音频(如' .m4a):
for f in *.mp4; do ffmpeg -i "$f" -vn -c:a copy "$(basename "$f" .mp4).m4a"; done
vn output选项禁用视频输出(自动选择或映射任何视频流)。要完全手动控制,请参阅-map选项。
可选
如果有一个40秒的介绍,你可以用-ss参数跳过它:
for f in *.m4a; do ffmpeg -i "$f" -ss 00:00:40 -c copy crop/"$f"; done
将所有文件合并为一个:
ffmpeg -f concat -safe 0 -i <(for f in ./*.m4a; do echo "file '$PWD/$f'"; done) -c copy output.m4a