Encodage vidéo. De FLV vers MP4.
Gratuit, et vidéo lisible sous android.

Logo indiquant que la page est valide XHTML par le W3C Validator

Article rédigé sans vraiment être relu... Comme les précédants articles, je vais rédiger le rédiger d'une seule traite avec un minimum de relecture. A la base cet article est pour ma réutilisation personnelle.

Présentation: vous avez un site où vous avez un lecteur Flash qui permets de voir des vidéos. Ces fichiers se préchargent et n'ont pas de dispositif anticopie spécifique (Serveur RTMPE).

Téléchargement de la vidéo

Copie d'écran du logiciel videocacheviewComme d'habitude en informatique il y a plusieurs manière d'arriver à ses fins. Une vidéo FLV peux souvent se télécharger avec VideoDownloadHelper. Dans mon cas non, il ont mis un système où le player flash fourni un id de session qui n'est valable qu'une fois à priori... Pour la télécharger mon principe; je lance la vidéo, la mets en pause et je la recopie. Vous le savez peut être les vidéos / musiques flash se mettent dans votre dossier temporaire. Vous pouvez ensuite copier ce fichier... J'utilise VideoCacheView pour faire la manipulation de recopie.

Que faire avec le FLV ?

Là vous avez la vidéo FLV lisible avec VLC. Cela peut déjà vous suffire... Mais je veux le voir sur un lecteur qui ne lit pas le FLV. Option: réencoder le FLV. Problème le FLV n'est pas standard et Handbrake ou VLC vont souvent bloquer lors de l'encodage. Solution convertir le FLV en MP4 en recopiant les flux puis ensuite le réencoder.

Passer le FLV en MP4 sans le réencoder

J'utilise FLVExtract pour obtenir un fichier mp3 (son) + H264 (vidéo). Ensuite j'utilise MP4Box pour obtenir un fichier MP4.

Fichier batch nommé remux.bat. On clic dépose ensuite le FLV sur le batch et à partir d'un toto.flv on aura un toto.mp4 a supposer que le flux audio est bien en MP3...

flvextract.exe -a -v %1
mp4box.exe -add "%~n1.264" -fps 30 -add "%~n1.mp3" "%~n1.mp4"
del "%~n1.264"
del "%~n1.mp3"

J'ai donc une vidéo compatible MP4 avec les flux audio et vidéo recopiés tel quels du FLV. Cela me pose un problème car le flux audio est en MP3, et les décodeurs hardwares MP4 ne le lisent pas. Seule solution que j'ai trouvée réencoder le tout.

Réencoder le MP4 (audio mp3 et vidéo en H264) pour devenir un MP4 (audio AAC et vidéo H264).

Maintenant que j'ai un fichier MP4 handbrake est capable de l'utiliser comme source. Parfait il suffit de réencoder en basse vitesse, et en respectant a peu près le flux vidéo source...

start "ENCODING %~n1" /LOW "C:\Program Files (x86)\Handbrake\HandBrakeCLI.exe" -i %1 -o "%~n1.m4v" --rate 30 --ab 128 --vb 1100 --encopts vbv-maxrate=1200

Je laisse tourner et j'ai le MP4 réencodé en un MP4 qui pourra être décodé par le hardware d'un lecteur MP4 android.

Téléchargement

Téléchargement des scripts utilisés.

Téléchargement des scripts ainsi que des logiciels Videocacheview et flvextract. Handbrake est necessaire.

Scriptage complet

Ces deux fichiers VBS vous permettent de convertir un dossier de FLV en M4V.

Etape 1 - Conversion des FLV en MP4.vbs

Dim Debug
Debug = False
Dim objFSO, objShell, strSource, strTarget, strOldName, strNewName
set objFSO = CreateObject("Scripting.FileSystemObject")
'
' Les dossiers : à adapter
'
strSource = "E:\Videos\GSL"
strTarget = "E:\Videos\GSL\Transcode"

call RecurseDir(strSource, strTarget)
'
' // Travail récursif
'
Sub RecurseDir(strSource, strTarget)
	If (Debug) Then wscript.echo "source: " & strSource & " target: "& strTarget End if
	Dim strTempSource, strTempTarget
	Set strTempSource = objFSO.GetFolder(strSource)
	If (Debug) Then Wscript.Echo "Begin Value: " & strTarget end if
    
	If Not objFSO.FolderExists(strTarget) Then
        If (Debug) Then Wscript.Echo "No Folder! Creating folder [" & strTarget & "]" end if
		objFSO.CreateFolder(strTarget)
	Else
		If (Debug) Then Wscript.Echo "Folder exists! " & strTempSource end if
	End If

	Set strTempTarget = objFSO.GetFolder(strTarget)
	' Pour chaque fichier
	For each file in strTempSource.files
		'On cherche les fichiers nommé FLV et on les passe en argument pour devenir MP4
		strOldName = strSource & "\" & file.name
		strNewName = strTempTarget & "\" & Mid(file.name, 1, InstrRev(file.name, ".")) & "mp4"

		If Not objFSO.FileExists(strNewName) Then
			Set objShell = CreateObject("WScript.Shell")

			If (Debug) Then Wscript.Echo "Transcoding file: " & strOldName & " to " & strNewName End if
			Select Case Right(strOldName, 3) 
				Case "flv" 
					 objShell.Run """" & strSource & "\remux.bat"" """ & strOldName & """", 1, False
			End Select 

			Set objShell = Nothing
		End If
	Next
	'On pourrai faire avec les sous dossiers.
	'For each subdir in strTempSource.subfolders
	'Wscript.Echo subdir.path
	'Call RecurseDir(subdir.path, strTempTarget & "\" & subdir.name)
	'Next
End Sub

Etape 2 - Conversion des MP4 en M4V.vbs

Dim Debug
Debug = False
Dim objFSO, objShell, strSource, strTarget, strOldName, strNewName
set objFSO = CreateObject("Scripting.FileSystemObject")
'
' Les dossiers : à adapter
'
strSource = "E:\Videos\GSL"
strTarget = "E:\Videos\GSL\Transcode"

call RecurseDir(strSource, strTarget)
'
' // Travail récursif
'
Sub RecurseDir(strSource, strTarget)
	If (Debug) Then wscript.echo "source: " & strSource & " target: "& strTarget End if
	Dim strTempSource, strTempTarget
	Set strTempSource = objFSO.GetFolder(strSource)
	If (Debug) Then Wscript.Echo "Begin Value: " & strTarget end if
    
	If Not objFSO.FolderExists(strTarget) Then
        If (Debug) Then Wscript.Echo "No Folder! Creating folder [" & strTarget & "]" end if
		objFSO.CreateFolder(strTarget)
	Else
		If (Debug) Then Wscript.Echo "Folder exists! " & strTempSource end if
	End If

	Set strTempTarget = objFSO.GetFolder(strTarget)
	' Pour chaque fichier
	For each file in strTempSource.files
		strOldName = strSource & "\" & file.name
		strNewName = strTempTarget & "\" & Mid(file.name, 1, InstrRev(file.name, ".")) & "mp4"
		strMP4Name = Mid(file.name, 1, InstrRev(file.name, ".")) & "mp4"

		If Not objFSO.FileExists(strNewName) Then
			Set objShell = CreateObject("WScript.Shell")

			If (Debug) Then Wscript.Echo "Transcoding file: " & strOldName & " to " & strNewName End if
			Select Case Right(strOldName, 3) 
				Case "mp4" 
					  objShell.Run  """" & strSource & "\handbrake.bat"" """ & strMP4Name & """", 1, False

			End Select 

			Set objShell = Nothing
		End If
	Next