debian jessie 上的 avconv 在尝试将原始视频转换为 mp4 时抛出错误

avconv on debian jessie throws error when trying to convert raw video to mp4

我正在尝试使用 avconv 将使用 Logitech USB Cam(YUYV) 捕获的原始视频转换为 mp4。我已尝试以下操作:

avconv -i out.raw -c copy output.mp4
avconv -i out.raw -vcodec copy -acodec copy output.mp4

但我收到如下所示的错误。

root@beaglebone:~/BBB_CV/boneCV# avconv -i out.raw -c copy output.mp4
avconv version 11.9-6:11.9-1~deb8u1, Copyright (c) 2000-2017 the Libav developersbuilt on Apr 23 2017 23:00:54 with gcc 4.9.2 (Debian 4.9.2-10)
out.raw: Invalid data found when processing input

我查过here,但没有找到与上述目的相关的例子。

编辑:添加了更多详细信息--

我尝试按照建议添加 infile 选项来执行以下操作:

root@beaglebone:~/BBB_CV/boneCV# avconv -s 640x480 -framerate 30 -pix_fmt yuyv422 -f rawvideo -i out.raw -c copy output.mp4

这让我摆脱了之前的错误,并且弹出了一些新错误,如下所示。

root@beaglebone:~/BBB_CV/boneCV# avconv -s 640x480 -framerate 30 -pix_fmt yuyv422 -f rawvideo -i out.raw -c copy output.mp4
avconv version 11.9-6:11.9-1~deb8u1, Copyright (c) 2000-2017 the Libav 
developers built on Apr 23 2017 23:00:54 with gcc 4.9.2 (Debian 4.9.2-10)
[rawvideo @ 0x17e21c0] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'out.raw':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0.0: Video: rawvideo, yuyv422, 640x480, 30 tbn
[mp4 @ 0x17eb840] Codec for stream 0 does not use global headers but 
container format requires global headers
[mp4 @ 0x17eb840] track 0: could not find tag, codec not currently 
supported in container
Output #0, mp4, to 'output.mp4':
Metadata:
encoder         : Lavf56.1.0
Stream #0.0: Video: rawvideo, yuyv422, 640x480, q=2-31, 30 tbn, 30 tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Could not write header for output file #0 (incorrect codec parameters ?): 
Operation not permitted

正在生成 output.mp4,但在尝试打开时会抛出错误。

编辑:我 运行 一个 "sudo apt-get install libav-tools" 然后尝试了。这就是我得到的。

root@beaglebone:~/BBB_CV/boneCV# avconv -s 640x480 -framerate 30 -pix_fmt 
yuyv422 -f rawvideo -i out.raw -c copy output.mp4
ffmpeg version 2.6.9 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.9.2 (Debian 4.9.2-10)
configuration: --prefix=/usr --extra-cflags='-g -O2 -fstack-protector-
 strong -Wformat -Werror=format-security ' --extra-ldflags='-Wl,-z,relro' 
   -cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-
    nonfree --enable-libvorbis --enable-pthreads --enable-libfaac --enable-
    libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-
    libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-
    libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-
    libvpx --enable-libschroedinger --disable-encoder=libschroedinger --
    enable-version3 --enable-libopenjpeg --enable-librtmp --enable-avfilter -
    enable-libfreetype --enable-libvo-aacenc --disable-decoder=amrnb --enable-
   libvo-amrwbenc --enable-libaacplus --libdir=/usr/lib/arm-linux-gnueabihf -
   -disable-vda --enable-libbluray --enable-libcdio --enable-gnutls --enable-
   frei0r --enable-openssl --enable-libass --enable-libopus --enable-
   fontconfig --enable-libpulse --disable-mips32r2 --disable-mipsdspr1 --
   disable-mipsdspr2 --enable-libvidstab --enable-libzvbi --enable-avresample 
   --disable-htmlpages --disable-podpages --enable-libutvideo --enable-
   libfdk-aac --enable-libx265 --enable-libiec61883 --enable-libdc1394 --
   disable-altivec --shlibdir=/usr/lib/arm-linux-gnueabihf
   libavutil      54. 20.100 / 54. 20.100
   libavcodec     56. 26.100 / 56. 26.100
   libavformat    56. 25.101 / 56. 25.101
   libavdevice    56.  4.100 / 56.  4.100
   libavfilter     5. 11.102 /  5. 11.102
   libavresample   2.  1.  0 /  2.  1.  0
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  3.100 / 53.  3.100
  [rawvideo @ 0x18465e0] Estimating duration from bitrate, this may be 
   inaccurate
   Input #0, rawvideo, from 'out.raw':
   Duration: 00:00:00.10, start: 0.000000, bitrate: 146626 kb/s
   Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 640x480, 147456 
   kb/s, 30 tbr, 30 tbn, 30 tbc
   [mp4 @ 0x184f790] Could not find tag for codec rawvideo in stream #0, 
   codec not currently supported in container
   Output #0, mp4, to 'output.mp4':
   Metadata:
   encoder         : Lavf56.25.101
   Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 640x480, q=2-
   31, 147456 kb/s, 30 tbr, 30 tbn, 30 tbc
   Stream mapping:
   Stream #0:0 -> #0:0 (copy)
   Could not write header for output file #0 (incorrect codec parameters ?): 
   Invalid argument

我运行 "ffmpeg -s 640x480 -framerate 30 -pix_fmt yuv420p -f rawvideo -i out.raw output.mp4"下面是我得到的。

root@beaglebone:~/BBB_CV/boneCV# ffmpeg -s 640x480 -framerate 30 -pix_fmt yuv420p -f rawvideo -i out.raw output.mp4
ffmpeg version 2.6.9 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.9.2 (Debian 4.9.2-10)
  configuration: --prefix=/usr --extra-cflags='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security ' --extra-ldflags='-Wl,-z,relro' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-libvpx --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-librtmp --enable-avfilter --enable-libfreetype --enable-libvo-aacenc --disable-decoder=amrnb --enable-libvo-amrwbenc --enable-libaacplus --libdir=/usr/lib/arm-linux-gnueabihf --disable-vda --enable-libbluray --enable-libcdio --enable-gnutls --enable-frei0r --enable-openssl --enable-libass --enable-libopus --enable-fontconfig --enable-libpulse --disable-mips32r2 --disable-mipsdspr1 --disable-mipsdspr2 --enable-libvidstab --enable-libzvbi --enable-avresample --disable-htmlpages --disable-podpages --enable-libutvideo --enable-libfdk-aac --enable-libx265 --enable-libiec61883 --enable-libdc1394 --disable-altivec --shlibdir=/usr/lib/arm-linux-gnueabihf
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
[rawvideo @ 0x1d55e0] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'out.raw':
  Duration: 00:00:00.13, start: 0.000000, bitrate: 109969 kb/s
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480, 110592 kb/s, 30 tbr, 30 tbn, 30 tbc
[libx264 @ 0x1df6c0] using cpu capabilities: ARMv6 NEON
[libx264 @ 0x1df6c0] profile High, level 3.0
[libx264 @ 0x1df6c0] 264 - core 146 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x480, q=-1--1, 30 fps, 15360 tbn, 30 tbc
    Metadata:
      encoder         : Lavc56.26.100 libx264
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[rawvideo @ 0x1de3a0] Invalid buffer size, packet size 450428 < expected frame_size 460800
Error while decoding stream #0:0: Invalid argument
frame=    3 fps=1.7 q=29.0 Lsize=     263kB time=00:00:00.03 bitrate=64692.6kbits/s    
video:262kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.318205%
[libx264 @ 0x1df6c0] frame I:1     Avg QP:33.09  size:100676
[libx264 @ 0x1df6c0] frame P:2     Avg QP:32.99  size: 83672
[libx264 @ 0x1df6c0] mb I  I16..4:  0.0% 95.4%  4.6%
[libx264 @ 0x1df6c0] mb P  I16..4:  0.0% 45.7%  3.0%  P16..4: 35.9% 10.7%  4.8%  0.0%  0.0%    skip: 0.0%
[libx264 @ 0x1df6c0] 8x8 transform intra:94.6% inter:86.1%
[libx264 @ 0x1df6c0] coded y,uvDC,uvAC intra: 100.0% 100.0% 100.0% inter: 53.6% 100.0% 100.0%
[libx264 @ 0x1df6c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 56% 12% 24%  2%  0%  1%  1%  2%  3%
[libx264 @ 0x1df6c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 82% 11%  4%  0%  0%  0%  1%  0%  1%
[libx264 @ 0x1df6c0] i8c dc,h,v,p: 48% 30% 14%  7%
[libx264 @ 0x1df6c0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x1df6c0] ref P L0: 83.5%  7.9%  8.6%
[libx264 @ 0x1df6c0] kb/s:21441.60

由于输入是原始的,avconv 不知道输入属性。它需要将这些注册到它创建的 MP4 的 MOOV 框中。因此,在 -i out.raw 之前,您需要指定 -s WxH -framerate N -pix_fmt P 值应该被替换的位置。YUYV 通常是 yuyv422.