Добавление звука без звука в ffmpeg
Я пытаюсь использовать ffmpeg для добавления звуковой дорожки в файл MOV.
Я создал тихую звуковую дорожку дольше, чем видео, и намереваюсь использовать опцию -shortest с ffmpeg.
Используя SoX v14.3.1, я запустил это для создания wav файла:
sox -n -r 44100 -b 16 -c 2 -L silence.wav trim 0.0 60.000
# -n = Sox 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, но я все еще застрял.
Как добавить звуковую дорожку в файл mov?
Ответы
Ответ 1
Вы можете использовать ffmpeg
для создания бесшумного аудио и объединить его с видео за один шаг. В этом примере будет использоваться звуковой фильтр anullsrc
для генерации стереотипного аудио с частотой дискретизации 44100:
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -i video.mov \
-shortest -c:v copy -c:a aac output.mov
-
channel_layout=stereo:sample_rate=44100
по умолчанию, но я включил его как пример использования этих параметров.
Игнорирование существующего аудио
Если в вашем видеовходе есть звук, который вы хотите игнорировать, используйте параметр -map
, чтобы переопределить значение по умолчанию поведение потока:
ffmpeg -f lavfi -i anullsrc -i video.mov -shortest -c:v copy -c:a aac \
-map 0:a -map 1:v output.mov
-
-map 0:a -map 1:v
можно перевести как: от первого входа (0
) использовать аудио (a
), а со второго входа (1
) использовать видео (v
).
Примечания
-
В этих примерах будет поток копировать видео, чтобы он не перекодировался (например, "копировать и вставлять" ).
-
Рекомендуется использовать недавний ffmpeg
. Ссылки на последние сборки находятся на странице FFmpeg Download или вы можете обратиться к пошагово руководство для компиляции ffmpeg
.
-
Если ваш ffmpeg
старый, вам нужно использовать -strict experimental
для использования -c:a aac
.
Ответ 2
В случае, если кто-то заканчивается здесь через "поисковую систему", здесь команда для последняя ffmpeg работает с MP4 (H264/AVC):
ffmpeg -f lavfi -i aevalsrc=0 -i input.mp4 -vcodec copy -acodec aac -map 0:0 -map 1:0 -shortest -strict experimental -y out.mp4
Ответ 3
Порядок вопросов. Я попробовал команду sox выше и команду ffmpeg ниже, и она работает
ffmpeg -shortest -i silence.wav -acodec pcm_s16le -i out.mov -vcodec copy -strict -2 vid_with_sound.mov
Ответ 4
Создайте видео с изображения или конвертируйте изображение в видео, затем добавьте звук с использованием ffmpeg.
Вы можете использовать фильтр источника звука anullsrc в ffmpeg. Пример, чтобы сделать 5.1-канальную частоту дискретизации 48000 Гц, 10-секундный тихий видеофайл с изображения:
ffmpeg -loop 1 -i img002.jpg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 10 -c:v libx264 -t 10 -pix_fmt yuv420p -vf scale=480:320 -y output.mp4
img002.jpg: Файл входного изображения
-i anullsrc: Добавить звук без звука
-t 10: количество секунд
масштаб = 480: 320: ширина разрешения видео = 420 и высота = 320
-y: перезаписать существующий выходной файл
output.mp4: выходной файл