2016-08-01 1684 views
0

我需要將視頻內的音頻轉換爲8位帶符號的PCM。我嘗試這樣的:ffmpeg音頻轉換:編碼器pcm_u8工作pcm_s8非

C:\Users\E\Desktop\ffmpeg-20160731-04da20e-win32-static\bin>ffmpeg -i minions.mp4 -vcodec mjpeg -s 800x480 -acodec pcm_s8 -ac 1 out.avi

輸出:

ffmpeg version N-81192-g04da20e Copyright (c) 2000-2016 the FFmpeg developers 
    built with gcc 5.4.0 (GCC) 
    configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-lib 
ebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfree 
type --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-lib 
openjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame 
--enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable- 
libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib 
    libavutil  55. 28.100/55. 28.100 
    libavcodec  57. 51.100/57. 51.100 
    libavformat 57. 44.100/57. 44.100 
    libavdevice 57. 0.102/57. 0.102 
    libavfilter  6. 49.100/6. 49.100 
    libswscale  4. 1.100/4. 1.100 
    libswresample 2. 1.100/2. 1.100 
    libpostproc 54. 0.100/54. 0.100 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'minions.mp4': 
    Metadata: 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isommp42 
    creation_time : 2016-03-17 10:06:57 
    Duration: 00:03:18.72, start: 0.000000, bitrate: 1869 kb/s 
    Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1675 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default 
) 
    Metadata: 
     handler_name : VideoHandler 
    Stream #0:1(und): Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s (default) 
    Metadata: 
     creation_time : 2016-03-17 10:06:58 
     handler_name : IsoMedia File Produced by Google, 5-11-2011 
[swscaler @ 04821880] deprecated pixel format used, make sure you did set range correctly 
[avi @ 048c0460] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead. 
    Last message repeated 1 times 
Output #0, avi, to 'out.avi': 
    Metadata: 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isommp42 
    encoder   : Lavf57.44.100 
    Stream #0:0(und): Video: mjpeg (MJPG/0x47504A4D), yuvj420p(pc), 800x480 [SAR 16:15 DAR 16:9], q=2-31, 200 kb/s, 23.98 fps, 23.98 tbn, 23.98 tbc (default) 
    Metadata: 
     handler_name : VideoHandler 
     encoder   : Lavc57.51.100 mjpeg 
    Side data: 
     cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1 
    Stream #0:1(und): Audio: pcm_s8, 44100 Hz, mono, u8, 352 kb/s (default) 
    Metadata: 
     creation_time : 2016-03-17 10:06:58 
     handler_name : IsoMedia File Produced by Google, 5-11-2011 
     encoder   : Lavc57.51.100 pcm_s8 
Stream mapping: 
    Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native)) 
    Stream #0:1 -> #0:1 (aac (native) -> pcm_s8 (native)) 
Could not write header for output file #0 (incorrect codec parameters ?): Operation not permitted 

的ffmpeg不能寫入輸出文件的標題。我想提一提的是,如果音頻編碼器被選爲pcm_u8,一切正常。

C:\Users\E\Desktop\ffmpeg-20160731-04da20e-win32-static\bin>ffmpeg -i minions.mp4 -vcodec mjpeg -s 800x480 -acodec pcm_u8 -ac 1 out.avi

輸出:

ffmpeg version N-81192-g04da20e Copyright (c) 2000-2016 the FFmpeg developers 
    built with gcc 5.4.0 (GCC) 
    configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-lib 
ebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfree 
type --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-lib 
openjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame 
--enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable- 
libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib 
    libavutil  55. 28.100/55. 28.100 
    libavcodec  57. 51.100/57. 51.100 
    libavformat 57. 44.100/57. 44.100 
    libavdevice 57. 0.102/57. 0.102 
    libavfilter  6. 49.100/6. 49.100 
    libswscale  4. 1.100/4. 1.100 
    libswresample 2. 1.100/2. 1.100 
    libpostproc 54. 0.100/54. 0.100 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'minions.mp4': 
    Metadata: 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isommp42 
    creation_time : 2016-03-17 10:06:57 
    Duration: 00:03:18.72, start: 0.000000, bitrate: 1869 kb/s 
    Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1675 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default 
) 
    Metadata: 
     handler_name : VideoHandler 
    Stream #0:1(und): Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s (default) 
    Metadata: 
     creation_time : 2016-03-17 10:06:58 
     handler_name : IsoMedia File Produced by Google, 5-11-2011 
File 'out.avi' already exists. Overwrite ? [y/N] y 
[swscaler @ 030a1880] deprecated pixel format used, make sure you did set range correctly 
[avi @ 04a10460] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead. 
    Last message repeated 1 times 
Output #0, avi, to 'out.avi': 
    Metadata: 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isommp42 
    ISFT   : Lavf57.44.100 
    Stream #0:0(und): Video: mjpeg (MJPG/0x47504A4D), yuvj420p(pc), 800x480 [SAR 16:15 DAR 16:9], q=2-31, 200 kb/s, 23.98 fps, 23.98 tbn, 23.98 tbc (default) 
    Metadata: 
     handler_name : VideoHandler 
     encoder   : Lavc57.51.100 mjpeg 
    Side data: 
     cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1 
    Stream #0:1(und): Audio: pcm_u8 ([1][0][0][0]/0x0001), 44100 Hz, mono, u8, 352 kb/s (default) 
    Metadata: 
     creation_time : 2016-03-17 10:06:58 
     handler_name : IsoMedia File Produced by Google, 5-11-2011 
     encoder   : Lavc57.51.100 pcm_u8 
Stream mapping: 
    Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native)) 
    Stream #0:1 -> #0:1 (aac (native) -> pcm_u8 (native)) 
Press [q] to stop, [?] for help 
frame= 4764 fps=250 q=24.8 Lsize= 74247kB time=00:03:18.71 bitrate=3060.8kbits/s speed=10.4x 
video:65364kB audio:8558kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.438745% 

問題是什麼?爲什麼轉換不適用於簽名的pcm?

編碼器兩個未簽名並簽署PCM是avaible:

C:\Users\E\Desktop\ffmpeg-20160731-04da20e-win32-static\bin>ffmpeg -encoders

. 
. 
A..... pcm_f32be   PCM 32-bit floating point big-endian 
A..... pcm_f32le   PCM 32-bit floating point little-endian 
A..... pcm_f64be   PCM 64-bit floating point big-endian 
A..... pcm_f64le   PCM 64-bit floating point little-endian 
A..... pcm_mulaw   PCM mu-law/G.711 mu-law 
A..... pcm_s16be   PCM signed 16-bit big-endian 
A..... pcm_s16be_planar  PCM signed 16-bit big-endian planar 
A..... pcm_s16le   PCM signed 16-bit little-endian 
A..... pcm_s16le_planar  PCM signed 16-bit little-endian planar 
A..... pcm_s24be   PCM signed 24-bit big-endian 
A..... pcm_s24daud   PCM D-Cinema audio signed 24-bit 
A..... pcm_s24le   PCM signed 24-bit little-endian 
A..... pcm_s24le_planar  PCM signed 24-bit little-endian planar 
A..... pcm_s32be   PCM signed 32-bit big-endian 
A..... pcm_s32le   PCM signed 32-bit little-endian 
A..... pcm_s32le_planar  PCM signed 32-bit little-endian planar 
A..... pcm_s8    PCM signed 8-bit 
A..... pcm_s8_planar  PCM signed 8-bit planar 
A..... pcm_u16be   PCM unsigned 16-bit big-endian 
A..... pcm_u16le   PCM unsigned 16-bit little-endian 
A..... pcm_u24be   PCM unsigned 24-bit big-endian 
A..... pcm_u24le   PCM unsigned 24-bit little-endian 
A..... pcm_u32be   PCM unsigned 32-bit big-endian 
A..... pcm_u32le   PCM unsigned 32-bit little-endian 
A..... pcm_u8    PCM unsigned 8-bit 
. 
. 

回答

0

你的錯誤不是音頻,它是關於視頻:

[swscaler @ 04821880] deprecated pixel format used, make sure you did set range correctly 
[avi @ 048c0460] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead. 
    Last message repeated 1 times 

我想你可以嘗試設置像素格式。它可以解決它。

我想提一提的是,如果選擇音頻編碼器pcm_u8一切正常。

請通過編輯將此轉換命令和輸出(包括它的'流映射'之前的所有內容)放在您的qustion中。

+0

正如你可以看到它適用於無符號PCM即使警告(piexel格式和avstream.codec)仍然存在。 我會盡力設定像素格式,首先我要找出如何做到這一點:P – patszn

0

由AVI複用器調用的RIFF函數不支持爲PCM_S8流寫入標籤,所以顯然這就是爲什麼您不能將它寫入AVI或WAV。

您可以使用MOV或NUT格式。

如果您需要使用AVI,則剩下LPCM的S16LE,S24LE,S32LE,F32LE,F64LE和U8變體。


要編碼使用IMA ADPCM,使用

ffmpeg -i minions.mp4 -c:v mjpeg -s 800x480 -c:a adpcm_ima_wav -ac 1 out.avi 

要使用μ律PCM編碼,使用

ffmpeg -i minions.mp4 -c:v mjpeg -s 800x480 -c:a pcm_mulaw -ac 1 out.avi 
+0

謝謝。你有什麼想法,我怎樣才能達到這些格式之一:AVI mjpeg編碼視頻中的4位IMA ADPCM,8位帶符號的PCM,8位u-Law? 我需要它,因爲我用於diplaying video(FT810)的芯片無法處理其他的芯片。 「對於編碼成MJPEG編碼的AVI視頻的音頻數據,支持三種格式: 4位IMA ADPCM,8位有符號PCM,8位u律」 它當然只支持MJPEG AVI。 – patszn