Ajout D'une superposition à L'aide de FFMPEG avec un ré-encodage Minimal

FFMPEG est vraiment utile pour découper une partie d'une vidéo, sans ré-encoder la vidéo.

je sais qu'il est également possible d'utiliser FFMPEG pour ajouter une image de superposition à une vidéo, dans une certaine partie de la vidéo (par exemple de 10secs à 20secs).

ma question Est: Si je fais cette superposition d'une image, toute la vidéo sera-t-elle réencodée à cause de cela? Ou simplement les durée sera codé?

sont également il y a des options que je peux utiliser pour rendre le ré-encodage minimal?

L'objectif de cours à maintenir la qualité de la vidéo comme l'originale..

(Je demande pas de ré-encodage, mais je ne vois pas comment cela pourrait être possible...)

Merci

4
demandé sur spaceman 2015-12-09 17:00:24

1 réponses

toute la vidéo sera ré-encodée si vous superposez une image sur une partie de celle-ci. Une façon d'éviter de réencoder le tout serait de découper la partie que vous voulez superposer et de réencoder seulement cette pièce (voir le commutateur -t duration et le commutateur -ss position dans la documentation

"

vous voudrez maintenir les paramètres d'encodage actuels tout au long du processus. Cela est facile à faire lors de la séparation que vous pouvez utiliser paramètre de copie pour le ou les commutateurs codec tels que -c:a copy -c:v copy

pour conceptualiser (notez que ce ne sont pas des commandes complètes):

Part1: début du film (Les 10 premières secondes que vous ne souhaitez pas superposer) (obtenu avec ffmpeg -i SourceFileName -t 10 -c:a copy -c:v copy SourceFileNameP1.mkv où SourceFileName est votre vidéo à traiter. Partie 2: PARTIE DU FILM entre 10 et 20 secondes que vous voulez superposer (obtenu avec ffmpeg -i SourceFileName -ss 10 -t 10 -c:a copy -c:v copy SourceFileNameP2 ) Partie 3: fin du film (obtenu avec ' ffmpeg-ss 20-C: une copie -c:v la copie)

astuce Bonus: vous pouvez obtenir une coupe plus lente mais plus exacte en déplaçant le paramètre `-ss avant le fichier de sortie. Cela permettra de supprimer les cadres de la sortie plutôt que de tenter de chercher à la bonne position sur l'entrée avant de créer la sortie.

si vous ne connaissez pas les détails d'encodage du fichier source, vous pouvez les obtenir avec ffprobe SourceFileName ou mon préféré mediainfo SourceFileName

je suis recommander l'utilisation D'un conteneur Matroska pour au moins la production intermédiaire en raison de sa flexibilité et de faible hauteur.

Voici un script que vous pouvez utiliser (sur les systèmes basés sur Debian) pour obtenir les paramètres nécessaires pour correspondre.

#!/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 $@
      mediainfo --Inform="General;Duration=%Duration/String2%\nFile size=%FileSize/String1%\nBit Rate=%OverallBitRate/String% " "$@"
   echo -n "Video: "
   mediainfo --Inform="Video;FrameRate=%FrameRate/String% BitRate=%BitRate/String% Resolution=%Width%x%Height% Codec=%CodecID%" "$@";
    echo -n "Audio: "
   mediainfo --Inform="Audio;Mode=%BitRate_Mode/String% BitRate=%BitRate/String% Format=%Format%" "$@";
   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 ""151900920"" requires a single filename argument. Example: ""151900920"" Videofile
    exit 2
fi
exist=$(which mediainfo)
    if [ "$exist" == "" ];
    then getmi
    fi
target=$(pwd)"/"".nfo"
    if [ -e $target ] 
    then 
    echo Error: ".nfo" already exists
    exit 3
    fi
echo "Creating $target"
        shortinfo "" > "$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.

une fois que cela est terminé, vous pouvez joindre tous les morceaux ensemble.

mkvmerge -o joined.mkv Part1 + Part2Reencoded + Part3

notez que ré-encodage entraîne toujours une perte de qualité de sorte que les jointures entre les pièces peuvent présenter des défauts visibles. Cela peut être ou ne pas être perceptible avec la distraction causée par la superposition apparaissant et disparaissant en même temps des codes.

cela peut réduire votre temps de réencodage de manière significative en fonction de la longueur du matériel et a l'avantage supplémentaire de réencoder seulement ce qui doit être réencodé.

comment superposer votre segment ré-encodé est couvert ici et vous pouvez ajuster le réponse acceptée pour correspondre à votre matériel.

1
répondu Elder Geek 2018-01-01 22:17:01