2015-12-09 2 views
3

FFMPEG действительно полезен для резки части видео без перекодирования видео.Добавление наложения с использованием FFMPEG с минимальным повторным кодированием

Я знаю, что также возможно использовать FFMPEG для добавления изображения Overlay к видео в определенной части видео (например, от 10 секунд до 20 секунд).

Мой вопрос: если я сделаю это наложение изображения, из-за этого будет перекодировано все видео? Или только соответствующая продолжительность будет закодирована?

Есть ли какие-либо опции, которые я могу использовать для минимального перекодирования?
Цель, если, конечно, сохранить качество видео, как оригинальное.
(я бы попросил не перекодировать вообще, но я не вижу, как это возможно ...)

Спасибо

+3

При фильтрации происходит перекодирование всего видео. – aergistal

+0

Ох .. и нет параметров, которые я могу настроить, чтобы улучшить его даже abit? ОК, я понимаю .. спасибо. BTW Если вы написали это ниже в ответах, я мог бы нажать «Принять» на нем. – spaceman

+2

Вы * можете * иметь возможность разбивать без повторного кодирования, добавлять наложение только к соответствующему сегменту и затем конкатенировать все обратно. В зависимости от ваших ключевых кадров вы, возможно, не сможете точно отрезать отметки от 10 до 20 секунд. Попробуйте http://video.stackexchange.com/ – aergistal

ответ

0

Все видео будет перекодировано, если вы наложите изображение на часть его. Один из способов, вы можете избежать повторного кодирования всей вещи будет выстригать часть вы хотите наложить, и только перекодировать, что часть (см -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, и вы можете настроить принятый ответ в соответствии с вашим материалом.

 Смежные вопросы

  • Нет связанных вопросов^_^