вставка аудио из одного видеофайла в другой с известным смещением времени

584
Tal Darom

У меня есть два видеофайла, в которых также есть звуковые дорожки. Я хотел бы скопировать звуковую дорожку одного файла в другой со смещением времени 5000 мсек.

Единственная проблема заключается в том, что видеофайлы не имеют одинаковую длительность, поэтому я хотел бы, чтобы полученные видеофайлы имели пустые кадры в начале / конце, если аудио начинается до или заканчивается после видео.

Я ищу решение командной строки, которое может быть использовано в Linux, таких как ffmpeg, mencoder и т. Д.

РЕДАКТИРОВАТЬ: запустить ffmpeg -i 1.mp4 -i 2.mp4

ffmpeg version 0.8.9-4:0.8.9-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers built on Nov 9 2013 19:08:00 with gcc 4.6.3 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2013-06-15 03:58:00 Duration: 00:06:49.29, start: 0.000000, bitrate: 3009 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720, 2814 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 192 kb/s Metadata: creation_time : 2013-06-15 03:58:05 Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2013-06-15 17:25:15 Duration: 00:06:59.09, start: 0.000000, bitrate: 3159 kb/s Stream #1.0(und): Video: h264 (High), yuv420p, 1280x720, 2965 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc Stream #1.1(und): Audio: aac, 44100 Hz, stereo, s16, 192 kb/s Metadata: creation_time : 2013-06-15 17:25:21 At least one output file must be specified 
1
Можете ли вы показать некоторую информацию о входных файлах и вашей сборке ffmpeg? Полный вывод консоли `ffmpeg -i input1 -i input2` будет достаточным. Какое точное время смещения вы хотите для каждого файла? LordNeckbeard 10 лет назад 1
@LordNeckbeard посмотреть мое редактирование. Tal Darom 10 лет назад 0
Просто указываю - вы используете avconv / libav (не настоящий ffmpeg). Когда вы говорите офсет, вы хотите, чтобы звук начинался через 5000 миллисекунд после видео? Тогда это противоречит пустым кадрам перед началом аудио. Здесь один 00: 06: 49.29, а другой 00: 06: 59.09. Как именно вы хотите, чтобы аудио и видео сочетались? Не могли бы вы уточнить немного больше? Rajib 10 лет назад 0
@ Rajib Я не против, какой инструмент использовать, если он будет выполнять свою работу. В настоящее время я использую "ffmpeg", который был стандартным пакетом ubuntu 12.04. Если я найду решение, которое работает только с реальным ffmpeg, я буду его использовать. Что касается пустых кадров, если (из-за смещения) звук должен начинаться до видео или заканчиваться после того, как видео закончилось, я хочу, чтобы были пустые кадры и только звук. Tal Darom 10 лет назад 0
Как правило, вы должны использовать граф фильтра с фильтрами trim, atrim и concat. А для пустого экрана вы можете использовать ввод lavfi. Вы не ответили на вопрос Раджиба, поэтому я не могу дать вам пример команды. ptQa 10 лет назад 0
да, я хочу, чтобы звук начинался после видео. Таким образом, это также закончится после того, как видео закончится, я хочу, чтобы пустые кадры были добавлены после того, как видео закончилось, а аудио нет. Tal Darom 10 лет назад 0

1 ответ на вопрос

3
ptQa

Хорошо. Предположим, у вас есть 1.mp4видео продолжительностью 30 секунд, 2.mp4видео продолжительностью 30 секунд, и вы хотите вставить аудио 2.mp4в 1.mp4видео со смещением 5 секунд. А также вам нужны черные видеокадры, когда видеопоток 1.mp4заканчивается. Таким образом, команда должна быть такой:

ffmpeg -i 1.mp4 -i 2.mp4 -f lavfi -i "color=black:size=1920x1080:duration=5" \ -filter_complex \ "[0:v][2:v]concat[video_out]; \ [0:a]atrim=duration=5[a1]; \ [a1][1:a]concat=v=0:a=1[audio_out]" \ -map [video_out] -map [audio_out] out.mp4 

Эта команда делает следующее - мы берем 1.mp4и в 2.mp4качестве входных данных, а также генерируем 5 секунд видео с черными рамками, используя lavfi. У вас может быть другой размер входных видео, поэтому используйте тот же самый, что 1.mp4и 2.mp4для lavfi (измените 1920x1080на любой размер входных данных).

Затем мы объединяем 1.mp4черные кадры из lavfi с concat, затем вырезаем первые 5 секунд аудио из 1.mp4с atrimи объединяем его с аудиопотоком из 2.mp4( concatснова). Затем просто укажите, что мы хотим выходные потоки в out.mp4.

Надеюсь, поможет.

Благодарю. Это было не совсем то, что я хотел, но достаточно близко, чтобы я мог внести необходимые изменения самостоятельно. Tal Darom 10 лет назад 0