J'ai des besoins d'édition assez simples - j'ai besoin de découper des vidéos, peut-être d'insérer des fichiers PNG entre eux, et de rejoindre ces vidéos (pas besoin de transitions, d'effets, etc.). Fondamentalement, pitivi
ferait ce que je veux - sauf que j'utilise des AVI 640x480 30 ips à partir d'un appareil photo, et dès que je mets plus de quelques minutes de ce type de matériel, pitivi
commence à se figer sur l'aperçu et devient donc inutilisable.
J'ai donc commencé à chercher un outil de ligne de commande pour Linux; Je suppose que seuls ffmpeg
( ligne de commande - Utilisation de ffmpeg pour couper la vidéo - Super User ) et mplayer
( Sam - Édition du fichier vidéo avec mencoder sous linux ) sont à ce jour des candidats, mais je ne trouve pas d'exemples d'utilisation que j'ai en tête.
Fondamentalement, j'imagine qu'il existe un encodeur et des outils de lecture (comme ffmpeg
vs ffplay
; ou mencoder
vs mplayer
) - tels que, pour commencer, la séquence d'édition pourrait être spécifiée directement sur la ligne de commande, de préférence avec une résolution d'image - un pseudocode ressemblerait à:
videnctool -compose --file=vid1.avi --start=00:00:30:12 --end=00:01:45:00 --file=vid2.avi --start=00:05:00:00 --end=00:07:12:25 --file=mypicture.png --duration=00:00:02:00 --file=vid3.avi --start=00:02:00:00 --end=00:02:45:10 --output=editedvid.avi
... ou, il pourrait avoir un fichier texte "playlist", comme:
vid1.avi 00:00:30:12 00:01:45:00
vid2.avi 00:05:00:00 00:07:12:25
mypicture.png - 00:00:02:00
vid3.avi 00:02:00:00 00:02:45:10
... donc on pourrait l'appeler avec
videnctool -compose --playlist=playlist.txt --output=editedvid.avi
L'idée ici serait que toutes les vidéos soient dans le même format - permettant à l'outil d'éviter le transcodage, et de faire juste une "copie brute" à la place (comme dans mencoder
le codec de copie de : " -oac copy -ovc copy
") - ou à défaut, l'audio / vidéo non compressé serait OK (même s'il consommerait un peu d'espace). Dans le cas de l'image fixe, l'outil utiliserait l'encodage défini par les fichiers vidéo.
Le fait est que je peux le voir jusqu'à présent mencoder
et que je ffmpeg
peux opérer sur des fichiers individuels; par exemple couper une seule section à partir d'un seul fichier, ou joindre des fichiers (a mencoder
également Modifier les listes de décision (EDL) , qui peuvent être utilisées pour effectuer une découpe exacte du cadre - de sorte que vous pouvez définir plusieurs régions de découpe, mais elles sont à nouveau attribuées à un seul fichier ). Ce qui implique que je dois d'abord travailler sur la découpe de morceaux à partir de fichiers individuels (dont chacun exigerait son propre fichier temporaire sur le disque), puis les joindre dans un fichier vidéo final.
J'imagine alors qu'il existe un outil de lecture correspondant, qui peut lire le même fichier de format / playlist d'option de ligne de commande que l'outil de codage - sauf qu'il ne générera pas de fichier de sortie, mais lira à la place la vidéo; par exemple en pseudocode:
vidplaytool --playlist=playlist.txt --start=00:01:14 --end=00:03:13
... et, étant donné qu'il y a suffisamment de mémoire, il générerait un aperçu vidéo basse résolution dans la RAM, et le lireait dans une fenêtre, tout en offrant une interaction limitée (comme mplayer
les raccourcis clavier pour la lecture, la pause, le rembobinage, la trame pas à pas) ). Bien sûr, j'imagine les heures de début et de fin pour faire référence à la liste de lecture entière et inclure tout fichier pouvant se retrouver dans cette région dans la liste de lecture.
Ainsi, le résultat final de tout cela serait: opération en ligne de commande; pas de fichiers temporaires lors de l'édition - et aussi pas de fichiers temporaires (ni de transcodage) lors du rendu de la sortie finale ... ce que je pense moi-même serait bien.
Donc, même si je pense que tout ce qui précède peut être un peu exagéré - existe-t-il quelque chose qui se rapprocherait du flux de travail décrit ci-dessus?
mkvmerge
je n'en avais jamais entendu parler auparavant, je m'assurerai de le vérifier .. Santé!Réponses:
Oui il y a. Essayez d'utiliser l'application appelée "Melt". Voir la documentation ici:
https://www.mltframework.org/docs/melt/
Si vous utilisez une distribution dérivée de Debian:
la source
brew install mlt
Ok, puisque je ne peux pas trouver grand-chose sur l'
melt
utilisation de la ligne de commande, voici quelques notes .. (et après cela, voir cette réponse Utiliser la substitution de processus pour tromper les programmes qui attendent des fichiers, avec des extensions spécifiques comme argument? - Unix & Linux Stack Exchange pour un script exemple viabash
)Pour commencer - il y a un paquet Ubuntu / Debian pour
melt
(j'ai Ubuntu 11.04 avec MLT melt 0.6.2); le lien donné par @Ielton est pour le wiki "Media Lovin 'Toolkit" (MLT), quimelt
fait partie (mais aussiopenshot
etkdenlive
). Voici le lien vers les fichiers texte de documentation de leur git: mltframework.org/mlt.git/tree - docs / ; notez que le wiki a une page sur BuildScripts .Pour l'instant, le plus gros (seul) problème que j'ai avec cela, c'est que je ne trouve pas un moyen d'exporter une composition vidéo non compressée (soit sous forme d'
png
images, soit sous un format vidéo non compressé).Tout d'abord, en ligne de commande,
melt
vous pouvez contrôler la lecture à travers des images; par exemple, pour "créer" un blanc long de 15 images et le visualiser avec lemelt
lecteur intégré, utilisezLorsque vous visualisez avec
melt
, vous obtiendrez également une information de ligne de commandestderr
pour le lecteur intégré:Une fois la
melt
lecture terminée, il ne se fermera pas - vous devez donc taperq
pour le quitter.Il convient de noter qu'il existe des soi-disant «producteurs» et «consommateurs» en
melt
. Si rien n'est spécifié, le "consommateur" par défaut est une fenêtre SDL (Simple DirectMedia Layer) lisant la vidéo; donc la commande ci-dessus est la même que:Ainsi, si nous voulons enregistrer ce qui
melt
s'affiche, nous devons changer le consommateur en quelque chose qui prendra en charge un format de fichier. Pour obtenir une liste de consommateurs:Le
libdv
consommateur sortira directement des données au format DVstdout
, donc pour enregistrer la vidéo dans un.dv
fichier que vous feriez:Notez que parmi les consommateurs répertoriés, le seul format que j'ai essayé, qui peut également être ouvert dans une autre application est
libdv
(j'ai utilisévlc
comme autre application); cependant, cela peut échouer pour un autre type de transcodage ( par exemple, si au lieu d'un blanc, j'essaie de convertir un extrait d'un.flv
fichier, le fichier .dv résultant s'ouvre et jouevlc
, mais est corrompu ).Maintenant pour la partie édition ; essentiellement, vous pouvez spécifier une série de strophes nom de fichier / entrée / sortie directement sur la ligne de commande; dites que vous avez un fichier,
video.avi
- alors vous pourriez faire:ou légèrement mieux formaté:
Cela signifie que
video.avi
de sa trame 30 à sa trame 79 sera joué; puis un flan de 15 images; puis lavideo.avi
séquence de l'image 30 à l'image 79 à nouveau.Pour utiliser des images (disons
.png
) dans une composition de montage vidéo:Notez que pour
test.png
, lein=
paramètre n'a pas besoin d'être 0 - cependant, l'image sera affichée pendantout
-in
temps; dans ce cas, il serait plus simple de laisser tout simplement lein=0
paramètre complètement.La bonne chose est que cette séquence d'édition peut être enregistrée - ou comme l'
melt
appelle, sérialisée - dans un fichier; notez qu'il existe deux manières de procéder à une telle sérialisation: "simple" ou XML. Par exemple, pour enregistrer la commande ci-dessus en tant que fichier sérialisé "simple", nous pouvons simplement ajouter le-serialise [filename]
commutateur à la commande:Maintenant, le
file.melt
contient:Apparemment, ce format de fichier sérialisé "simple" ne contient pas de caractère "commentant" - si j'essaye d'ajouter une
# comment
ligne " ", il semelt
plaint de: " Impossible de charger" # commentaire " '(mais à part cela, il semble que une ligne est ignorée et la lecture continue quand même). ".melt
" semble être une extension quimelt
reconnaît comme un simple fichier sérialisé.Maintenant, pour rejouer ce fichier sérialisé, nous pourrions en principe simplement appeler
melt file.melt
- cependant, une ligne de commande plus complète serait:... ce qui signifierait: utiliser le
melt_file
"producteur" pour ouvrirfile.melt
et rendre ses cadres sur le "consommateur"sdl
(fenêtre).Notez que j'ai l'expérience, que (disons) les
.flv
vidéos sont lues sans problème sur la ligne de commande - cependant, provoquent une erreur de segmentation lorsqu'elles sont spécifiées dans lefile.melt
fichier sérialisé!.dv
les vidéos produites par elles-melt
mêmes semblent bien fonctionner enfile.melt
...Le type XML de sérialisation peut être obtenu en utilisant le
-consumer xml:
commutateur ( au lieu de-serialise
) - donc l'exemple ci-dessus serait maintenant:Pour "lire" le
file.mlt
fichier XML nouvellement généré , on peut maintenant le faire directementmelt file.mlt
- ou, une ligne de commande plus complète serait:... ce qui signifierait: utiliser le
xml
"producteur" ( notez, auparavant c'était un consommateur ) pour ouvrirfile.mlt
, et rendre ses frames sur le "consommateur"sdl
(fenêtre).Notez que dans ce cas, j'ai expérimenté que les mêmes
.flv
vidéos qui ont causé une erreur de segmentation avec un simple fichier de sérialisation - fonctionnent très bien avec un fichier de sérialisation XML!Dans ce cas, le
file.mlt
fichier XML résultant a beaucoup plus de paramètres, tels que la résolution, la fréquence d'images, les informations de codec, etc. - mais il est également plus difficile de travailler directement dans un éditeur de texte:la source
La solution ffmpeg à ce problème ressemble à ceci:
Il utilise des canaux nommés, il n'y a donc pas de création de fichiers temporaires sur le disque et vous permet de découper des morceaux des clips vidéo et d'ajouter des images.
Cet exemple utilise le temps 30-60 de la première entrée, puis ajoute la première minute de la deuxième entrée, puis insère un fichier image, puis la troisième vidéo entière.
Code retiré de:
page de concaténation ffmpeg: https://trac.ffmpeg.org/wiki/Concatenate
page du superutilisateur Utilisation de ffmpeg pour couper une vidéo
page du superutilisateur /video/12105/add-an-image-in-front-of-video-using-ffmpeg
la source
npm
installer), alors j'ai pensé le mentionnerMoi aussi, je cherchais un tel outil et il semble que la fonte soit l'outil pour le travail, mais la documentation est presque impossible à comprendre / manquante. Vous pouvez effectuer presque n'importe quelle combinaison d'édition. J'avais quelques images de "caméra d'action" ... le son était cependant inutilisable. J'ai rejoint la vidéo (h264) ensemble, ajouté un fondu de 60 images et remplacé le son par une piste sonore en utilisant:
Vous pouvez en lire plus ici . Le site Web principal est ici .
la source