1

У меня есть два видеофайла, в которых также есть аудио дорожки. Я хотел бы скопировать звуковую дорожку одного файла в другой со смещением времени 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 ответ1

3

Хорошо. Предположим, у вас есть 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 .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .