无法使用ffmpeg从视频中提取mp3音频
Can't extract mp3 audio from video with ffmpeg
我输入的是 .mp4 视频文件。
尝试#1
ffmpeg -i pipe:0 -y -map a media/73.mp3
错误:
ffmpeg version 3.3.3 Copyright (c) 2000-2017 the FFmpeg developers
built with Apple LLVM version 8.1.0 (clang-802.0.42)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma --enable-vda
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f977d800000] stream 1, offset 0xa8: partial file
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f977d800000] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none(smpte170m/smpte170m/bt709), 320x176, 300 kb/s): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'pipe:0':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2012-03-13T08:58:06.000000Z
encoder : HandBrake 0.9.6 2012022800
Duration: 00:00:10.03, bitrate: N/A
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), none(smpte170m/smpte170m/bt709), 320x176, 300 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc (default)
Metadata:
creation_time : 2012-03-13T08:58:06.000000Z
encoder : JVT/AVC Coding
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
Metadata:
creation_time : 2012-03-13T08:58:06.000000Z
Stream #0:2(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s
Metadata:
creation_time : 2012-03-13T08:58:06.000000Z
Stream #0:3(und): Subtitle: mov_text (text / 0x74786574), 0 kb/s
Metadata:
creation_time : 2012-03-13T08:58:06.000000Z
Stream mapping:
Stream #0:1 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Stream #0:2 -> #0:1 (aac (native) -> mp3 (libmp3lame))
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f977d800000] stream 1, offset 0xa8: partial file
pipe:0: Invalid data found when processing input
Finishing stream 0:0 without any data written to it.
Finishing stream 0:1 without any data written to it.
[mp3 @ 0x7f977b846800] Invalid audio stream. Exactly one MP3 audio stream is required.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:1 --
Conversion failed!
尝试#2
ffmpeg -i pipe:0 -y -vn -acodec copy media/72.mp3
错误:
[...]
[mp3 @ 0x7febed835200] Invalid audio stream. Exactly one MP3 audio stream is required.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
尝试#3
ffmpeg -i pipe:0 -y -codec:a libmp3lame -qscale:a 2 media/74.mp3
ffmpeg
没有错误,但文件无效(大小为 334 字节)
尝试#4
ffmpeg -i pipe:0 -y -vn -acodec mp3 media/78.mp3
ffmpeg
没有错误,但文件无效(大小为 334 字节)
尝试#5
ffmpeg -f mp4 -i pipe:0 -y media/80.mp3
ffmpeg
没有错误,但文件无效(大小为 334 字节)
我做错了什么?这似乎是一件相当容易的事情...
试试这个提取 .mp3
:
ffmpeg -i video.mp4 -map 0:a -acodec libmp3lame out.mp3
也许这对提取有用 .m4a
:
ffmpeg -i video.mp4 -map 0:a -c copy out.m4a
backendscript
在http://www.backendscript.com/blog/article/solved-ffmpeg-invalid-audio-stream-exactly-one-mp3-audio-stream-is-required
中所说的一切
An aac audio stream requires a dedicated aac container ! As a mp3 udio
stream requires a dedicated mp3 container ! This error occurs when we
trying to store an AAC stream in an MP3 container. To resolve this
change the extension of output file from .mp3 to .aac
生成错误无效的音频流。只需要一个 MP3 音频流。
ffmpeg -i input.mp4 -vn -acodec copy output.mp3
工作正常
ffmpeg -i input.mp4 -vn -acodec copy output.aac
FFmpeg can't update metadata in WAVE files when output is written over a non-seekable protocol like a pipe. Quicktime seems to rely on metadata to determine file validity. You have to write to file or some other seekable protocol.
请参考this question。
我输入的是 .mp4 视频文件。
尝试#1
ffmpeg -i pipe:0 -y -map a media/73.mp3
错误:
ffmpeg version 3.3.3 Copyright (c) 2000-2017 the FFmpeg developers
built with Apple LLVM version 8.1.0 (clang-802.0.42)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma --enable-vda
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f977d800000] stream 1, offset 0xa8: partial file
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f977d800000] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none(smpte170m/smpte170m/bt709), 320x176, 300 kb/s): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'pipe:0':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2012-03-13T08:58:06.000000Z
encoder : HandBrake 0.9.6 2012022800
Duration: 00:00:10.03, bitrate: N/A
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), none(smpte170m/smpte170m/bt709), 320x176, 300 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc (default)
Metadata:
creation_time : 2012-03-13T08:58:06.000000Z
encoder : JVT/AVC Coding
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
Metadata:
creation_time : 2012-03-13T08:58:06.000000Z
Stream #0:2(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s
Metadata:
creation_time : 2012-03-13T08:58:06.000000Z
Stream #0:3(und): Subtitle: mov_text (text / 0x74786574), 0 kb/s
Metadata:
creation_time : 2012-03-13T08:58:06.000000Z
Stream mapping:
Stream #0:1 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Stream #0:2 -> #0:1 (aac (native) -> mp3 (libmp3lame))
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f977d800000] stream 1, offset 0xa8: partial file
pipe:0: Invalid data found when processing input
Finishing stream 0:0 without any data written to it.
Finishing stream 0:1 without any data written to it.
[mp3 @ 0x7f977b846800] Invalid audio stream. Exactly one MP3 audio stream is required.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:1 --
Conversion failed!
尝试#2
ffmpeg -i pipe:0 -y -vn -acodec copy media/72.mp3
错误:
[...]
[mp3 @ 0x7febed835200] Invalid audio stream. Exactly one MP3 audio stream is required.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
尝试#3
ffmpeg -i pipe:0 -y -codec:a libmp3lame -qscale:a 2 media/74.mp3
ffmpeg
没有错误,但文件无效(大小为 334 字节)
尝试#4
ffmpeg -i pipe:0 -y -vn -acodec mp3 media/78.mp3
ffmpeg
没有错误,但文件无效(大小为 334 字节)
尝试#5
ffmpeg -f mp4 -i pipe:0 -y media/80.mp3
ffmpeg
没有错误,但文件无效(大小为 334 字节)
我做错了什么?这似乎是一件相当容易的事情...
试试这个提取 .mp3
:
ffmpeg -i video.mp4 -map 0:a -acodec libmp3lame out.mp3
也许这对提取有用 .m4a
:
ffmpeg -i video.mp4 -map 0:a -c copy out.m4a
backendscript
在http://www.backendscript.com/blog/article/solved-ffmpeg-invalid-audio-stream-exactly-one-mp3-audio-stream-is-required
An aac audio stream requires a dedicated aac container ! As a mp3 udio stream requires a dedicated mp3 container ! This error occurs when we trying to store an AAC stream in an MP3 container. To resolve this change the extension of output file from .mp3 to .aac
生成错误无效的音频流。只需要一个 MP3 音频流。
ffmpeg -i input.mp4 -vn -acodec copy output.mp3
工作正常
ffmpeg -i input.mp4 -vn -acodec copy output.aac
FFmpeg can't update metadata in WAVE files when output is written over a non-seekable protocol like a pipe. Quicktime seems to rely on metadata to determine file validity. You have to write to file or some other seekable protocol.
请参考this question。