"Я ожидаю, что звук начнет воспроизводиться сразу же, а видео начнет воспроизводиться через 4 секунды,
(поиск через 3 секунды в видео).
Как это можно сделать без перекодирования ? "
Попробуйте использовать как:
ffmpeg -ss 00:00:03 -itsoffset 4 -i video.mp4 -ss 00:00:00 -i audio.mp3 -c:v copy output.mp4
Что означают команды (и их запись / порядок также важен) ...
-ss 00:00:03
= поиск в течение 3 секунд ввода video.mp4
для установки в качестве начальной точки вывода видео дорожка.
-itsoffset 4
= установить задержку перед воспроизведением входа как выхода. Дает неподвижный кадр в течение 4 секунд.
-i video.mp4
= установить видео вход в этот момент.
-ss 00:00:00
= поиск по 0 секундам ввода audio.mp4
в качестве начальной точки вывода аудио дорожка.
-i audio.mp3
= установить аудио вход на этом этапе ... ( см. Примечание к аудио ниже ).
-c:v copy
= ( позволяет избежать перекодирования видео дорожки ).
output.mp4
= установить вывод a / v контейнер .
Примечания:
о видео:
MPEG видео может только искать ключевые кадры (также называемые i-frames
). Все может работать не так, как ожидалось, если вы установили -ss 3
, в то же время используя -c:v copy
, а ключевой кадр не был найден во время -ss
.
Возможное отсутствие ключевого кадра в 3 секунды может объяснить ваше:
"Когда я играю input.mp4
, видео начинается только на одну секунду позже, чем аудио
(в отличие от 4 секунд)"
Это даже предупреждение о в документах (см .: Страница вики FFmpeg - Ищу ).
Поиск при копировании кодека
Использование -ss
в качестве опции ввода вместе с -c:v
копирование может быть неточным, поскольку ffmpeg вынужден использовать / разбивать только на i-кадрах. Хотя, если возможно, можно скорректировать время начала потока на отрицательное значение, чтобы компенсировать это.
В основном, если вы укажете «второй 157», а ключевой кадр не будет до второго 159, он будет включать в себя две секунды звука (без видео) в начале, а затем начнется с первого ключевого кадра.
So be careful when splitting and doing codec copy
.
Единственное решение - продолжать тестировать / корректировать значение видео -ss
, чтобы найти следующий лучший компромисс.
- Рассмотрите возможность использования формата времени
HOURS:MM:SS.MILLISECONDS
, чтобы приблизиться к ожидаемому 3 секунд. пример: -ss 00:00:02.895
об аудио:
MP4 обычно имеет звуковую дорожку AAC. Обратите внимание, что, поскольку ваш входящий звук имеет формат MP3, он будет автоматически перекодирован в формат AAC с помощью FFmpeg.
- Чтобы избежать перекодирования аудиоформата: принудительно вставьте MP3 с помощью
-c:a copy
(может быть добавлено после вышеуказанного -c:v copy
).