59

ffmpeg を使用してサイレント オーディオ トラックを MOV ファイルに追加しようとしています。

ビデオよりも長いサイレント オーディオ トラックを作成し、ffmpeg で -shortest オプションを使用するつもりです。

SoX v14.3.1 を使用して、これを実行して wav ファイルを生成します。

sox -n -r 44100 -b 16 -c 2 -L silence.wav trim 0.0 60.000

# -n  = Sox's null file
# -r = sample rate 
# -b = bits per sample
# -c = num of channels
# -L = little endian
# filename
# trim - is an effect, args start and length.

私の基本的な ffmpeg コマンドは次のようになります。

ffmpeg -shortest \
-i silence.wav -acodec pcm_s16le \
-i vid_no_sound.mov -vcodec copy vid_with_sound.mov

この結果は次のとおりです。

ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
  built on Aug 27 2012 13:11:25 with gcc 4.4.5
  configuration: --extra-cflags=-static --prefix=/root/ffmpeg_build/src/ffmpeg-0.11.1 --enable-bzlib --enable-gnutls --enable-libfreetype --enable-libmp3lame --enable-libdc1394 --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-openssl --enable-zlib --enable-gpl --enable-nonfree --enable-version3
  libavutil      51. 54.100 / 51. 54.100
  libavcodec     54. 23.100 / 54. 23.100
  libavformat    54.  6.100 / 54.  6.100
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 77.100 /  2. 77.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
[wav @ 0x29ab2e0] max_analyze_duration 5000000 reached at 5015510
Guessed Channel Layout for  Input Stream #0.0 : stereo
Input #0, wav, from 'silence.wav':
  Duration: 00:01:00.00, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'vid_no_sound.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 537199360
    compatible_brands: qt
    creation_time   : 2012-07-25 13:41:44
  Duration: 00:00:14.50, start: 0.000000, bitrate: 27457 kb/s
    Stream #1:0(eng): Video: qtrle (rle  / 0x20656C72), rgb24, 1920x1080, 27450 kb/s, SAR 1920:1920 DAR 16:9, 24 fps, 24 tbr, 24 tbn, 24 tbc
    Metadata:
      creation_time   : 2012-07-25 13:41:44
      handler_name    : Apple Alias Data Handler
    Stream #1:1(eng): Data: none (tmcd / 0x64636D74)
    Metadata:
      creation_time   : 2012-07-25 13:42:06
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
File 'vid_with_sound.mov' already exists. Overwrite ? [y/N] y
auto-inserting filter 'auto-inserted resampler 0' between the filter 'src' and the filter 'aformat'
[aresample @ 0x2ab3b00] chl:stereo fmt:s16 r:44100Hz -> chl:stereo fmt:flt r:44100Hz
[NULL @ 0x2994320] Codec is experimental but experimental codecs are not enabled, try -strict -2
Output #0, mov, to 'vid_with_sound.mov':
    Stream #0:0(eng): Video: qtrle (rle  / 0x20656C72), rgb24, 1920x1080 [SAR 1920:1920 DAR 16:9], q=2-31, 27450 kb/s, 24 fps, 90k tbn, 24 tbc
    Metadata:
      creation_time   : 2012-07-25 13:41:44
      handler_name    : Apple Alias Data Handler
    Stream #0:1: Audio: none, 44100 Hz, stereo, flt, 128 kb/s
Stream mapping:
  Stream #1:0 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (pcm_s16le -> aac)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height

-strict -2コマンドラインのどこに配置すればよいかわかりませんが、提案どおりに追加しようとしました。

さまざまなことを試してffmpegのドキュメントを読むのに2時間費やしましたが、まだ行き詰まっています。

mov ファイルにサイレント オーディオ トラックを追加するにはどうすればよいですか?

4

5 に答える 5

131

anullsrcオーディオフィルター

を使用ffmpegしてサイレントオーディオを作成し、それを1つのステップでビデオと組み合わせることができます。この例では、anullsrcオーディオフィルターを使用して、サンプルレート44100のステレオサイレントオーディオを生成します。

ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -i video.mov -c:v copy -c:a aac -shortest output.mov
  • channel_layout=stereo:sample_rate=44100はデフォルトですが、これらのオプションの使用方法の例として含めました。

既存の音声を無視する

ビデオ入力ファイルに無視したいオーディオが含まれている場合は、オプションを使用してデフォルトのストリーム選択動作-mapをオーバーライドします。

ffmpeg -f lavfi -i anullsrc -i video.mov -c:v copy -c:a aac -map 0:a -map 1:v -shortest output.mp4
  • -map 0:a -map 1:v次のように変換できます。最初の入力(0)からオーディオ(a)を使用し、2番目の入力(1)からビデオ()を使用しvます。

ノート

于 2012-09-11T17:35:31.657 に答える
2

順序が重要です。上記の sox コマンドと以下の ffmpeg コマンドを試してみましたが、動作します

ffmpeg -shortest -i silence.wav -acodec pcm_s16le -i out.mov -vcodec copy -strict -2 vid_with_sound.mov
于 2012-09-11T14:50:39.090 に答える
0

ffmpeg ver > 4.2 でこれまでに見つけた最も簡単な方法:

最初に無音を追加します。

ffmpeg -i audio_in.wav -af areverse,apad=pad_dur=1s,areverse audio_out.wav

最後に無音を追加します。

ffmpeg -i audio_in.wav -af apad=pad_dur=1s audio_out.wav

これにより、音声に 1 秒間の無音が追加されます。

于 2022-03-05T12:39:46.163 に答える