Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

recordscreen : ameliorer ce script de capture video

+1 vote

Ce script permet d'enregistrer le bureau mais il saccade et n'est pas interactif. Il faudrait le declencher et l' arreter ( touche F1 et Espace/echap par exemple).
je l' ai trouvé ici : http://www.davidrevoy.com/article65/recordscreen-py-video-and-audio-capture-from-terminal-for-ubuntu-12-04

source github : https://github.com/cessen/recordscreen/blob/master/recordscreen.py

je ne peux poster le script il fait 448 lignes. Des idées ?

demandé 18-Mai-2016 par buffalo974 (2,632 points)

3 Réponses

+2 votes

Pour avoir un flux vidéo plus fluide, tu peux augmenter le nombre d'images que le script/ffmpeg capture par seconde en incrémentant la variable DEFAULT_FPS. Voici un tableau explicatif assez bien fait, perso j'essayerai de set 23.976FPS ou 25FPS (qui correspond au standard européen PAL).

Le déclenchement ainsi que l'arret du script est gérable avec la méthode bind() de Tkinter. Voici un exemple:

from Tkinter import *

root = Tk()

def key(event):
    print "pressed", repr(event.char)

def callback(event):
    frame.focus_set()
    print "clicked at", event.x, event.y

frame = Frame(root, width=100, height=100)
frame.bind("<Key>", key)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()
répondu 18-Mai-2016 par barnumbirr (2,750 points)
edité 18-Mai-2016 par barnumbirr
0 votes

Le code n'est pas l'enregistreur lui-même, mais juste une interface pour lancer l'enregistreur, via une commande générée par une des fonctions capture_line, video_capture_line, ou audio_capture_line.

De fait, je doute que les saccades et les raccourcis soient contrôlables directement depuis ce script.

Néanmoins, puisque ffmpeg est lancé via subprocess, il est possible de jouer avec son stdin, donc peut-être de lui envoyer des commandes, donc peut-être de stopper/continuer l'enregistrement.

Pour les saccades, c'est plus compliqué. Si ffmpeg ne réussis pas à enregistrer sans saccade, c'est peut-être parce que le disque dur sur lequel est enregistré les données n'est pas suffisant pour le débit demandé, ou parce que ffmpeg lui-même gère mal l'enregistrement, ou c'est encore autre chose, ou un patchwork de plusieurs causes qui dépendent de la machine, des options, des formats utilisés,…

répondu 18-Mai-2016 par lucas (2,292 points)

Je doute que ffmpeg soit le problème: il est utilisé dans l'encodage d'un tas de films p2p/scene et n'a jamais posé problème.

Est-ce que ça peux venir du processeur / carte graphique ?
Dois-je changer la qualité du codec et si oui comment ?

Le processeur a effectivement un impact, tu devrais clairement le voir avec top/htop. Le x264 est le meilleure codec disponible pour l'instant avec un bien meilleur rapport qualité/poids du fichier que le XviD par exemple.

+1 vote

Je n'ai pas verifie mais je doute que tu puisses faire de l'encodage en temps reel avec ffmepg. Ca depend des parametres d'encodage, de la resolution d'enregistrement (un tres grand ecran ou du dual screen risque de poser probleme ) et de la puissance de la machine.

Le mieux est sans doute d'enregistrer en image brute sans compression et de reencoder ensuite, mais ca demande beaucoup d'espace disque. A verifier aussi si ffmpeg n'a pas des options dans ce sens. Encoder une image video et un bureau ce n'est pas du tout pareil, a une epoque les tools dedies sous windows proposaient leurs propres codecs.

répondu 18-Mai-2016 par blue (176 points)

que changer dans le script pour faire ainsi ?

Si dans ton cas le bottleneck est vraiment le CPU, tu peux toujours capturer le flux et le reencoder par la suite comme explique ici. Si tu veux la "meilleure" qualité possible lors de la capture, utilises la fonction lossless recording comme expliqué ici.

si vous obtenez ffmpeg : commande introuvale, faire ceci :

sudo apt-get remove --purge ffmpeg

sudo apt-add-repository ppa:mc3man/trusty-media

sudo apt-get update

sudo apt-get install ffmpeg

et tester avec ça:

ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264 -qp 0 -preset ultrafast capture.mkv

je pense qu'il est possible de decouper et de fusionner des bouts de videos.

...