Couper,coller de la vidéo HD issue des box ADSL

mtcubix

Membre actif
14 Janvier 2010
338
12
Ce fil fait suite à un précédent post qui décrit comment transformer son mac en macnetoscope


Concernant Free, les canaux TV sont diffusés dans 3 définitions bien distinctes
HD = haut débit= haute définition (High Definition)
SD = débit standard = définition standard (Standard Definition)
LD = bas débit = basse définition (Low Definition)

Quand on regarde d'un peu plus près avec un logiciel tel que VideoScript ou MediaInfo ..., on retrouve les trois types définition:

HD :
- Débit total : 4 755 Kbps
- Occupation disque : 2 GO/Heure
- Format : H.264/MPEG-4 AVC
- Profil d'encodage : [email protected]
- Largeurx Hauteur: 1440 x 1080 ou 1920 x 1080
- Paramètres supplémentaires : CABAC : oui Image(s) de référence : 4
SD
- Débit total : 3 082 Kbps
- Occupation disque : 1.4 GO/Heure
- Format : MPEG-2 Video
- Largeur x Hauteur : 544 x 576
LD
- Débit total : 1 866 Kbps
- Occupation disque : 840 MO/Heure
- Format : H.264/MPEG-4 AVC
- Profil d'encodage : [email protected]
- Largeur x Hauteur: 720 x 576
- Paramètres supplémentaires : CABAC : oui Image(s) de référence : 4
Les enregistrements HD et LD ne sont pas lisibles avec Quicktime à cause des profils d'encodage choisis ([email protected] et de la présence du paramètre CABAC non supporté par Apple).

Ici un peu de lecture pour mieux comprendre la video HD et le codec H264

Quant aux flux SD (mpeg2video), pour le lire avec Quicktime et les logiciels non Apple basé sur cette technologie, il faut acheter un module complémentaire (19.99 €) mpeg.component.

Sinon, il existe un certain nombre de lecteurs open source qui peuvent le faire sans cette extension.

Lecteurs basés (ou dépendants) de Quictime

lectuer quickTime lui-même
MpegStreamclip
cellulo
NicePlayer

etc ...

Lecteurs indépendants de Quictime

VLC
movist
xineplayer
mplayerx
mplayerosx
MPlayer OSX Extended
..


En fait, ce n'est pas seulement la lecture des flux enregistrés qui pose problème , mais plutôt le "conditionnement" des séquences enregistrées à partir de sa box.

soit en clair :

- Découper les parties superflues d'un enregistrement qu'on souhaite conserver, début, fin, pubs

- Recoller les morceaux pour avoir un fichier unique

Ces deux opérations sont faciles à réaliser avec des outils professionnels, mais quand on veut le faire avec des outils "gratuits", il faut chercher sur le web...

J'ai moi-même cherché longtemps un outil de "coupe" vidéo HD, je voulais conserver la qualité initiale ainsi que la synchronisation A-V. J'ai testé différentes solutions avant de constater que le seul outil actuellement capable de remplir ces conditions est ffmpeg

---> A suivre
 
En quoi est-ce compliqué de "couper", "copier" de la vidéo HD ?

Pour situer le problème, voici une figure qui montre la structure d'un groupe d'images MPEG =(GOP = Groupe Of Pictures)

GOP.jpg


cette figure est issue de Wikipédia inter-frame

I = Image I ou IDR en français (image de référence), le décodeur n'a pas besoin de références supplémentaires pour reconstruire cette image (toutes les données nécessaires sont stockées dans le champs I).

P = Predicted frame = image reconstruite avec les données dans le champs P ET en tenant compte de l'image de référence I

B = image Bidirectionnelle, elle est calculée à l'aide des images P et I.


Un film MPEG est une succession de groupes d'images (GOP) qui se présente ainsi en numérotant les images à partir de 0 :

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17.....
I B B B P B B B P I B P B B P B I B .....


Imaginons qu'on veuille copier une séquence à partir de l'image numéro 7

7 8 9 10 11 12 13 14 15 16 17.....
B P I B P B B P B I B .....

Les images 7 et 8 ne seront pas affichées, car elles dépendent de l'Image I en 0 absente dans la nouvelle séquence. Les images seront correctement rendues à partir de l'Image I en position 9. Le son par contre est codé de façon continu et ne dépend pas des positions des images I P ou B.

La conclusion est la suivante. Un enregistrement MPEG ne peut être copié de façon correcte qu'à partir des positions des images I, toute copie qui ne commence pas par une image I introduit une perte de synchronisation entre l'audio et la vidéo.

L'illustration suivante montre 3 pistes son de 3 copies d'un enregistrement HD de 10 secondes (copies effectuées avec ffmpeg).

Séquence_1 : Copie à partir de l'image numéro 20 du fichier source.
Seems stream 1 codec frame rate differs from container frame rate: 50.00 (50/1) -> 25.00 (50/2)
Input #0, mpegts, from '/Volumes/Imac/test.ts':

Stream #0.0[0x44](fra): Audio: aac, 48000 Hz, stereo, s16, 122 kb/s
Stream #0.1[0x45]: Video: h264, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Output #0, mp4, to '/Volumes/Imac/keyframes_mp4/TOTO1.mp4':
Metadata:
encoder : Lavf52.76.0
Stream #0.0: Video: libx264, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], q=2-31, 25 tbn, 25 tbc
Stream #0.1(fra): Audio: libfaac, 48000 Hz, stereo, 122 kb/s
Stream mapping:
Stream #0.1 -> #0.0
Stream #0.0 -> #0.1
Press [q] to stop encoding
frame= 227 fps= 0 q=-1.0 Lsize= 5192kB time=10.00 bitrate=4253.4kbits/s
video:5028kB audio:157kB global headers:0kB muxing overhead 0.142396%
250-227=23 images sont manquantes pour faire 10 secondes de Vidéo. time=10.00 indique qu'on dispoe de 10 s en Audio. Donc, on aura une perte de synchro A-V = 920 ms
Position de la prochaine IDR=20+23=43

Séquence_2 : Copie à partir de l'image numéro 30 du fichier source..
Seems stream 1 codec frame rate differs from container frame rate: 50.00 (50/1) -> 25.00 (50/2)
Input #0, mpegts, from '/Volumes/Imac/test.ts':
Duration: 01:04:59.15, start: 33751.342144, bitrate: 4784 kb/s
Program 1
Stream #0.0[0x44](fra): Audio: aac, 48000 Hz, stereo, s16, 122 kb/s
Stream #0.1[0x45]: Video: h264, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Output #0, mp4, to '/Volumes/Imac/keyframes_mp4/TOTO2.mp4':
Metadata:
encoder : Lavf52.76.0
Stream #0.0: Video: libx264, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], q=2-31, 25 tbn, 25 tbc
Stream #0.1(fra): Audio: libfaac, 48000 Hz, stereo, 122 kb/s
Stream mapping:
Stream #0.1 -> #0.0
Stream #0.0 -> #0.1
Press [q] to stop encoding

frame= 237 fps= 0 q=-1.0 Lsize= 5467kB time=10.00 bitrate=4478.4kbits/s
video:5303kB audio:157kB global headers:0kB muxing overhead 0.137309%
250-237=13 images sont manquantes. perte de synchro= 520 ms
Position de la prochaine IDR=30+13=43

Séquence_3 : Copie à partir de l'image numéro 43 du fichier source..

Seems stream 1 codec frame rate differs from container frame rate: 50.00 (50/1) -> 25.00 (50/2)
Input #0, mpegts, from '/Volumes/Imac/test.ts':

Stream #0.0[0x44](fra): Audio: aac, 48000 Hz, stereo, s16, 122 kb/s
Stream #0.1[0x45]: Video: h264, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Output #0, mp4, to '/Volumes/Imac/keyframes_mp4/TOTO2.mp4':
Metadata:
encoder : Lavf52.76.0
Stream #0.0: Video: libx264, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], q=2-31, 25 tbn, 25 tbc
Stream #0.1(fra): Audio: libfaac, 48000 Hz, stereo, 122 kb/s
Stream mapping:
Stream #0.1 -> #0.0
Stream #0.0 -> #0.1
Press [q] to stop encoding

frame= 250 fps= 0 q=-1.0 Lsize= 5733kB time=10.00 bitrate=4696.3kbits/s
video:5569kB audio:156kB global headers:0kB muxing overhead 0.132978%
250 images = 10 s Vidéo à 25 images/s, 10 s Audio ==> Audio et Vidéo en phase



---> A suivre
 
Tout d'abord bravo,très très bon article. :up:

Je me permet de juste de chipoter sur un point:



Quicktime gère le CABAC depuis quelque temps. Mais pas encore tous les paramètres du high profile.

DEpuis le temps qu'on l'attend, c'est une bonne chose, merci pour la rectification :cool:

---------- Nouveau message ajouté à 23h10 ---------- Le message précédent a été envoyé à 23h04 ----------

procédure pour une découpe sans perte (de qualité ou de synchro)


1- On souhaite couper un enregistrement entre deux points t1 et t2. t1 et t2 sont exprimés en secondes. Les images correspondantes sont situées en position p1 et p2 respectivement. Pour un film PAL à 25 images/sec

p1=25*t1
p2=25*t2

Pour que la coupe soit synchrone, il faut que la première Image soit une image I. On copie 10 secondes de film avec ffmpeg (qu'on envoie dans le vide pour ne pas encombrer le disque inutilement)

Bloc de code:
ffmpeg -threads 1 -i $film -ss t1 -t 10.00 -acodec copy -vcodec copy -f null /dev/null
-i pour input, précède le nom du fichier origine $film
-acodec codec audio à utiliser, copy signifie copie de la piste audio à partir de $film
-vcodec codec vidéo à utiliser, copy signifie copie de la piste vidéo à partir de $film
-copyts copier les timestamp
-f pour format de sortie, null , signifie aucun et /dev/null est la destination choisie, cad nulle part.

2- Soit delta, le nombre d'images qui sépare la position t1 de la prochaine Image I.


delta=250-frame

frame est le nombre d'images retourné par ffmpeg ( lu sur la sortie Terminal comme indiqué sur les trois exemples situés plus haut)


3- On recalcule les temps de début de coupe et la durée de la copie en secondes

debut=(25*t1+250-frame)/25
duree=t2-debut

4- On coupe avec ffmpeg

Bloc de code:
ffmpeg -threads 1 -i $film -ss $debut -t $duree -acodec copy -vcodec copy -copyts -y $video_finale
Pour finir, deux scripts qui permettent de réaliser ces opérations
nextKeyFrame
Bloc de code:
#!/bin/bash
#nextKeyFrame
# ----------------------------------------------------------------------------
# --------- Recherche des images de reference (IDR) ou keyFrame --------------
# ----------------------------------------------------------------------------

# Images par seconde du format video (ici PAL)
IPS=25
time_start=$(date "+%s")
# arguments en entree
# $1   = --> nom du fichier 
fichier=$1
# $2   = --> numero de l_image a partir de laquelle chercher la prochaine image I
frame=$2
# fichier temporaire pour stocker le log du terminal
user=$(whoami)
flog="/Users/$user/Movies/flog"

# convertit un nombre d'images en temps au format hh:mm:ss.cc 
function frame2time ()
{
    let seconds=$1/$IPS
    cents=$(echo "($1 % $IPS) * 100/$IPS " | bc )
    cc=$( printf %02d  $cents)
    tt=$(date -u -r $seconds "+%H:%M:%S")
    echo $tt"."$cc
}

# trouve le nombre de frame retournees par ffmpeg
function find_frame ()
{
    user=$(whoami)
    temp="/Users/$user/Movies/temp"
    awk ' {{gsub(/frame=/,"\nframe=")};print}' $1 > $temp
    ff=$(awk '$0 ~ /frame=/ {frame=$2} ; END {print(frame)}' $temp)
    echo $ff
}

bis=0
frames=250
pas_encore_trouvee="pas-du-tout"

while [ $pas_encore_trouvee ]; do
ssx=$( frame2time $frame )

# encodage vers /dev/null  et sync_determination
/usr/local/bin/ffmpeg -threads 1 -i $fichier -ss $ssx -t 10.00 -acodec copy -vcodec copy -copyts -f null /dev/null 2>$flog

ff=$(find_frame $flog )
difference=$((frames-ff))
        if (( $difference == 0 )) ; then
        echo "$frame $difference" 
        pas_encore_trouvee=""
        else
            case $bis in
            0)  # on ajoute la difference et on refait une recherche
            let frame=$frame+$difference
            bis=1
            ;;
            1)
            # on a deja ajoute la difference une fois, on tombe sur une image qui n'est pas une image I 
            # cela signifie qu'on a un desynchronisation systematique.
            echo "$frame $difference "
            pas_encore_trouvee=""
            ;;
            esac
        fi    
done
cherche la position de la prochaine image I dans un fichier vidéo après une position temporelle t.


ffmpeg_cut
Bloc de code:
#! /bin/sh 
# ffmpeg_cut

# On inclut nextKeyFrame pour utiliser les fonctions qu_il contient
# ----------------------------------------------------------------------------
# ------------Script pour copier une partie de video entre deux temps t1 et t2
# ----------------------------------------------------------------------------
# Images par seconde du format video (ici PAL)
IPS=25
# convertit un nombre d'images en temps au format hh:mm:ss.cc 
function frame2time ()
{
    let seconds=$1/$IPS
    cents=$(echo "($1 % $IPS) * 100/$IPS " | bc )
    cc=$( printf %02d  $cents)
    tt=$(date -u -r $seconds "+%H:%M:%S")
    echo $tt"."$cc
}

echo "\n\nEntrer le chemin complet du fichier source "
echo "Cela fonctionne aussi par glisser - deposer "
read fichier
echo "\n Entrer les temps t1 et t2 en secondes (separes par un espace)"
read t1 t2

echo "\n\n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°"
echo "Recherche de la première image I apres t= $t1 s"

frame=$((t1*IPS))
ifram=($(nextKeyFrame $fichier $frame))

if (( ${ifram[1]} == 0 )); then
    format="mp4"
    source=${fichier%.*}
    start=${ifram[0]}
    ffend=$((IPS*t2))
    copie=$source"_copie_"$start"_"$ffend"."$format
    echo "le temps $t1 correspond a l_image numero : $frame"
    echo "le temps $t2 correspond a l_image numero : $ffend"
    echo "la premiere image I se trouve en position: $start"
    echo "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°"
    echo "\nLa copie sera enregistree au format mp4"
    echo "copie = $copie"

    ssx=$(frame2time $start )
    duree=$((ffend-start))
    ddx=$(frame2time $duree )

    ffmpeg  -threads 1 -i $fichier -ss $ssx -t $ddx -vcodec copy -acodec copy -copyts -y $copie
else
    echo "\n\n***********************************************"
    echo "Image IDR non trouvee, zone probablement perturbee "
    echo "changer de zone et recommencer"
fi
Copie vidéo entre deux positions t1 et t2 à partir d'un fichier source.

Et voici en exemple la sortie Terminal quand on lance ffmpeg_cut

iMac:~ mt$ /Users/mt/bin/ffmpeg_cut ; exit;

Entrer le chemin complet du fichier source
Cela fonctionne aussi par glisser - deposer
/Users/mt/Movies/test.ts

Entrer les temps t1 et t2 en secondes (separes par un espace)
34 765


°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Recherche de la première image I apres t= 34 s
le temps 34 correspond a l_image numero : 850
le temps 765 correspond a l_image numero : 19125
la premiere image I se trouve en position: 857
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

La copie sera enregistree au format mp4
copie = /Users/mt/Movies/test_copie_857_19125.mp4
FFmpeg version SVN-r24374, Copyright (c) 2000-2010...

Seems stream 1 codec frame rate differs from container frame rate: 50.00 (50/1) -> 25.00 (50/2)
Input #0, mpegts, from '/Users/mt/Movies/test.ts':
Duration: 01:39:59.25, start: 48128.688356, bitrate: 4785 kb/s
Program 1
Stream #0.0[0x44](fra): Audio: aac, 48000 Hz, stereo, s16, 126 kb/s
Stream #0.1[0x45]: Video: h264, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Output #0, mp4, to '/Users/mt/Movies/test_copie_857_19125.mp4':
Metadata:
encoder : Lavf52.76.0
Stream #0.0: Video: libx264, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], q=2-31, 25 tbn, 25 tbc
Stream #0.1(fra): Audio: libfaac, 48000 Hz, stereo, 126 kb/s
Stream mapping:
Stream #0.1 -> #0.0
Stream #0.0 -> #0.1
Press [q] to stop encoding
frame= 3946 fps=3946 q=-1.0 size= 89183kB time=157.88 bitrate=4627.5kbits/s
frame= 5768 fps=3845 q=-1.0 size= 130433kB time=230.76 bitrate=4630.4kbits/s
frame= 7255 fps=3547 q=-1.0 size= 163948kB time=290.24 bitrate=4627.4kbits/s
[NULL @ 0x101831600] non-existing PPS referenced
frame= 9527 fps=3743 q=-1.0 size= 215321kB time=381.12 bitrate=4628.2kbits/s
frame=11600 fps=3803 q=-1.0 size= 262180kB time=464.04 bitrate=4628.4kbits/s
frame=13412 fps=3675 q=-1.0 size= 303110kB time=536.52 bitrate=4628.1kbits/s
frame=15592 fps=3730 q=-1.0 size= 352282kB time=623.72 bitrate=4626.9kbits/s
frame=17765 fps=3791 q=-1.0 size= 401425kB time=710.64 bitrate=4627.5kbits/s
frame=18268 fps=3771 q=-1.0 Lsize= 413201kB time=730.73 bitrate=4632.3kbits/s
video:401347kB audio:11418kB global headers:0kB muxing overhead 0.105776%
logout

[Opération terminée]
Remarquez la vitesse de copie extrêmemnt élevée > 3500 fps cela correspond à la copie de 2 GO en moins d'une minute.

Bonnes copies HD :)
 
Ce fil fait suite à un précédent post qui décrit comment transformer son mac en macnetoscope


- Découper les parties superflues d'un enregistrement qu'on souhaite conserver, début, fin, pubs

- Recoller les morceaux pour avoir un fichier unique

Ces deux opérations sont faciles à réaliser avec des outils professionnels, mais quand on veut le faire avec des outils "gratuits", il faut chercher sur le web...

J'ai moi-même cherché longtemps un outil de "coupe" vidéo HD, je voulais conserver la qualité initiale ainsi que la synchronisation A-V. J'ai testé différentes solutions avant de constater que le seul outil actuellement capable de remplir ces conditions est ffmpeg

---> A suivre


Bonjour,

Pouvez-vous me donner le lien exact de ce logiciel car je n'arrive pas à le télécharger.
Est-ce bien un logiciel simple de découpe de vidéo HD? et gratuit?

Pouvez-vous m'en conseiller un autre?

PS : je travaille sous FinalcutPRO X et je souhaite donc faire quelques coupes sur mes fichiers comme décrit précédemment avant de les envoyer dans FINALCUT PRO.

Merci pour votre aide.;)
 
Après un malentendu entre les développeurs du projet, une scission a eu lieu pour donner deux branches :
-ffmpeg (nouveau), il a gardé l'ancien nom "FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec - the leading audio/video codec library. See the documentation for a complete feature list and the Changelog for recent changes. "
--> http://ffmpeg.org/

-Libav : "Libav is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec - the leading audio/video codec library. See the documentation for a complete feature list and the Changelog for recent changes."
--> http://libav.org/

les deux environnements reposent sur la même librairie audio-vidéo créée par Fabrice Bellard en 2000 : http://fr.wikipedia.org/wiki/FFmpeg

On peut donc installer l'un ou l'autre environnement, je ne m'avancerai pas à conseiller l'un ou l'autre, chacun peut se faire son opinion en visitant les deux sites.
 
Pour finir, deux scripts qui permettent de réaliser ces opérations
nextKeyFrame
Bloc de code:
#!/bin/bash
#nextKeyFrame
# ----------------------------------------------------------------------------
# --------- Recherche des images de reference (IDR) ou keyFrame --------------
# ----------------------------------------------------------------------------

# Images par seconde du format video (ici PAL)
IPS=25
time_start=$(date "+%s")
# arguments en entree
# $1   = --> nom du fichier 
fichier=$1
# $2   = --> numero de l_image a partir de laquelle chercher la prochaine image I
frame=$2
# fichier temporaire pour stocker le log du terminal
user=$(whoami)
flog="/Users/$user/Movies/flog"

# convertit un nombre d'images en temps au format hh:mm:ss.cc 
function frame2time ()
{
    let seconds=$1/$IPS
    cents=$(echo "($1 % $IPS) * 100/$IPS " | bc )
    cc=$( printf %02d  $cents)
    tt=$(date -u -r $seconds "+%H:%M:%S")
    echo $tt"."$cc
}

# trouve le nombre de frame retournees par ffmpeg
function find_frame ()
{
    user=$(whoami)
    temp="/Users/$user/Movies/temp"
    awk ' {{gsub(/frame=/,"\nframe=")};print}' $1 > $temp
    ff=$(awk '$0 ~ /frame=/ {frame=$2} ; END {print(frame)}' $temp)
    echo $ff
}

bis=0
frames=250
pas_encore_trouvee="pas-du-tout"

while [ $pas_encore_trouvee ]; do
ssx=$( frame2time $frame )

# encodage vers /dev/null  et sync_determination
/usr/local/bin/ffmpeg -threads 1 -i $fichier -ss $ssx -t 10.00 -acodec copy -vcodec copy -copyts -f null /dev/null 2>$flog

ff=$(find_frame $flog )
difference=$((frames-ff))
        if (( $difference == 0 )) ; then
        echo "$frame $difference" 
        pas_encore_trouvee=""
        else
            case $bis in
            0)  # on ajoute la difference et on refait une recherche
            let frame=$frame+$difference
            bis=1
            ;;
            1)
            # on a deja ajoute la difference une fois, on tombe sur une image qui n'est pas une image I 
            # cela signifie qu'on a un desynchronisation systematique.
            echo "$frame $difference "
            pas_encore_trouvee=""
            ;;
            esac
        fi    
done
cherche la position de la prochaine image I dans un fichier vidéo après une position temporelle t.


ffmpeg_cut
Bloc de code:
#! /bin/sh 
# ffmpeg_cut

# On inclut nextKeyFrame pour utiliser les fonctions qu_il contient
# ----------------------------------------------------------------------------
# ------------Script pour copier une partie de video entre deux temps t1 et t2
# ----------------------------------------------------------------------------
# Images par seconde du format video (ici PAL)
IPS=25
# convertit un nombre d'images en temps au format hh:mm:ss.cc 
function frame2time ()
{
    let seconds=$1/$IPS
    cents=$(echo "($1 % $IPS) * 100/$IPS " | bc )
    cc=$( printf %02d  $cents)
    tt=$(date -u -r $seconds "+%H:%M:%S")
    echo $tt"."$cc
}

echo "\n\nEntrer le chemin complet du fichier source "
echo "Cela fonctionne aussi par glisser - deposer "
read fichier
echo "\n Entrer les temps t1 et t2 en secondes (separes par un espace)"
read t1 t2

echo "\n\n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°"
echo "Recherche de la première image I apres t= $t1 s"

frame=$((t1*IPS))
ifram=($(nextKeyFrame $fichier $frame))

if (( ${ifram[1]} == 0 )); then
    format="mp4"
    source=${fichier%.*}
    start=${ifram[0]}
    ffend=$((IPS*t2))
    copie=$source"_copie_"$start"_"$ffend"."$format
    echo "le temps $t1 correspond a l_image numero : $frame"
    echo "le temps $t2 correspond a l_image numero : $ffend"
    echo "la premiere image I se trouve en position: $start"
    echo "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°"
    echo "\nLa copie sera enregistree au format mp4"
    echo "copie = $copie"

    ssx=$(frame2time $start )
    duree=$((ffend-start))
    ddx=$(frame2time $duree )

    ffmpeg  -threads 1 -i $fichier -ss $ssx -t $ddx -vcodec copy -acodec copy -copyts -y $copie
else
    echo "\n\n***********************************************"
    echo "Image IDR non trouvee, zone probablement perturbee "
    echo "changer de zone et recommencer"
fi
Copie vidéo entre deux positions t1 et t2 à partir d'un fichier source.

Et voici en exemple la sortie Terminal quand on lance ffmpeg_cut

Remarquez la vitesse de copie extrêmemnt élevée > 3500 fps cela correspond à la copie de 2 GO en moins d'une minute.

Bonnes copies HD :)

Bonjour,

J'ai créé un fichier ffmpeg_cut.command et un fichier nextKeyFrame.command, qui sont tous les deux sur le bureau. Mais quand je lance ffmpeg_cut il ne trouve pas nextKeyFrame et plante. Comment faire ? Merci.