为什么管道 FFMPEG 输出与显式文件不同?

为什么管道 FFMPEG 输出与显式文件不同?

下面创建的文件的顶层定义略有不同。为什么?

$ ffmpeg -f lavfi -i "sine=frequency=1000:duration=1" infile.mp3
$ ffmpeg -i infile.mp3 -f wav - > piped.wav
$ ffmpeg -i infile.mp3 -f wav outfile.wav
$ diff <(hexdump outfile.wav) <(hexdump piped.wav)
< 0000000 4952 4646 58ce 0001 4157 4556 6d66 2074
---
> 0000000 4952 4646 ffff ffff 4157 4556 6d66 2074

我的 ffmpeg 构建:

ffmpeg version n4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.2.0 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100

答案1

58ce 0001输入 WAV 中的是文件大小。FFmpeg 将用 初始化此字段-1。如果输出是通过可搜索协议写入的,则 ffmpeg 将在多路复用操作结束时使用实际文件大小进行更新,否则保持原样。

相关内容