Все видео будет перекодировано, если вы наложите изображение на часть его. Один из способов, вы можете избежать повторного кодирования всей вещи будет выстригать часть вы хотите наложить, и только перекодировать, что часть (см -t duration
переключателя и переключатель -ss position
в documentation
Вы хотите сохранить . текущие параметры кодирования на протяжении всего процесса Это легко сделать при разделении, как вы можете использовать параметр копирования для кодека коммутатора (ов), таких как -c:a copy -c:v copy
осмыслять (обратите внимание, что это не полные команды):
Часть 1: Начало фильма (первые 10 секунд, которые вы не хотите накладывать) (полученные с помощью ffmpeg -i SourceFileName -t 10 -c:a copy -c:v copy SourceFileNameP1.mkv
где SourceFileName - это ваше видео для обработки. Ч.2: Часть фильма от 10 до 20 секунд, которые вы хотите наложить (полученный с ffmpeg -i SourceFileName -ss 10 -t 10 -c:a copy -c:v copy SourceFileNameP2
) Part3: Конец фильма (полученного с помощью `FFmpeg -ss 20 -c: копия -c: v копия)
Бонусный наконечник: вы можете получить более медленную, но точную резку, перемещая параметр `-ss до выходного файла. Это приведет к потере кадров из выходных данных, а не к поиску правильной позиции на входе до создания вывода.
Если вы не знаете деталей кодирования исходного файла, вы можете получить их с ffprobe SourceFileName
или моим любимым mediainfo SourceFileName
Я рекомендую, используя контейнер Matroska, по крайней мере, промежуточный выход из-за его гибкость и низкие накладные расходы.
Вот сценарий, который вы можете использовать (в системах на базе Debian) для получения необходимых параметров для соответствия.
#!/bin/bash
#mknfo.sh
#Written by Elder Geek for the Stack Exchange network
# 1/1/2018
####################################################################################################
#bash script to create an nfo file which includes information to help joining video clips #
####################################################################################################
# This function will create an nfo file including the tech specs for a specified media file #
####################################################################################################
function shortinfo {
echo [email protected]
mediainfo --Inform="General;Duration=%Duration/String2%\nFile size=%FileSize/String1%\nBit Rate=%OverallBitRate/String% " "[email protected]"
echo -n "Video: "
mediainfo --Inform="Video;FrameRate=%FrameRate/String% BitRate=%BitRate/String% Resolution=%Width%x%Height% Codec=%CodecID%" "[email protected]";
echo -n "Audio: "
mediainfo --Inform="Audio;Mode=%BitRate_Mode/String% BitRate=%BitRate/String% Format=%Format%" "[email protected]";
echo "-----------------------------------------------------------------------------"
}
####################################################################################################
# This function will check for the existence of mediainfo and attempt installation if not found #
####################################################################################################
function getmi {
echo "mediainfo is required and not found. Attempt install Y/N"
read -n 1 solve
if [ $solve=={Yy} ]
then sudo apt-get -y install mediainfo
else echo "Cannot continue"
exit 1
fi
}
####################################################################################################
# Main program #
####################################################################################################
if [ $# -ne 1 ]
then
echo Error
echo "$0" requires a single filename argument. Example: "$0" Videofile
exit 2
fi
exist=$(which mediainfo)
if [ "$exist" == "" ];
then getmi
fi
target=$(pwd)"/"$1".nfo"
if [ -e $target ]
then
echo Error: "$1.nfo" already exists
exit 3
fi
echo "Creating $target"
shortinfo "$1" > "$target"
exit 0
Now you'll want to re-encode the overlay section (Part2) of the video to exactly match the parameters (same audio and video codecs and same bitrate and sample rate as the original of Part1 and Part3 to allow for joining.
Как только это будет возможно, вы сможете объединить все части.
mkvmerge -o joined.mkv Part1 + Part2Reencoded + Part3
Обратите внимание, что повторное кодирование всегда приводит к некоторой потере качества, так стыки между частями может показать видимые дефекты. Это может быть или не быть заметным с отвлечением, вызванным появлением и исчезновением на одинаковых кодах времени.
Это может значительно сократить время повторного кодирования в зависимости от длины материала и имеет дополнительное преимущество только для повторного кодирования, которое должно быть перекодировано.
Как наложить ваш перекодированный сегмент покрыт here, и вы можете настроить принятый ответ в соответствии с вашим материалом.
При фильтрации происходит перекодирование всего видео. – aergistal
Ох .. и нет параметров, которые я могу настроить, чтобы улучшить его даже abit? ОК, я понимаю .. спасибо. BTW Если вы написали это ниже в ответах, я мог бы нажать «Принять» на нем. – spaceman
Вы * можете * иметь возможность разбивать без повторного кодирования, добавлять наложение только к соответствующему сегменту и затем конкатенировать все обратно. В зависимости от ваших ключевых кадров вы, возможно, не сможете точно отрезать отметки от 10 до 20 секунд. Попробуйте http://video.stackexchange.com/ – aergistal