我正在努力解决 ffmpeg concat 解复用器的问题。
假设我有两个文件:ones.wav
和zeros.wav
。它们都是 5 秒长,ones.wav
所有样本都是 1,zeros.wav
所有样本都是 0。两个文件的采样率都是 44100Hz
现在我想取的前 0.5 秒ones.wav
并将其与的前 0.001 秒连接起来zeros.wav
。我使用以下concat.txt
文件:
file ones.wav
outpoint 0.5
file zeros.wav
outpoint 0.001
并执行以下命令:
ffmpeg -f concat -i concat.txt out.wav
然后输出文件包含 ±0.51084s 或 22528 个 1 样本,以及 ±0.02320s 或 1023 个 0 样本
我如何将这些剪辑精确到所需的长度?如果我使用压缩音频或想要连接视频剪辑,这个答案会如何改变?
如果有任何用处,这是命令输出:
ffmpeg version n4.1.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20181127
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-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. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, concat, from 'concat.txt':
Duration: N/A, start: 0.000000, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'out.wav':
Metadata:
ISFT : Lavf58.20.100
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Metadata:
encoder : Lavc58.35.100 pcm_s16le
size= 92kB time=00:00:00.52 bitrate=1441.6kbits/s speed=74.3x
video:0kB audio:92kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.082796%
答案1
压缩音频被分块为帧,例如 AAC 通常被分块为每帧 1024 个样本。尽管未压缩的音频不是这样存储的。ffmpeg 仍将封装样本,因为该框架设计为使用帧。
您需要重新定义框架大小,以便修剪能够更准确地进行。
尝试,
ffmpeg -f concat -segment_time_metadata 1 -i concat.txt -af asetnsamples=44,aselect=concatdec_select out.wav