#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# avi2mp4.py
#
# Copyright 2010 Javier Rovegno Campos <tatadeluxe<at>gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
"""
Script para transformar videos compatibles con reproductor MP4:
MP4 2GB FUJITEL 80MP4TV2 MP4-TV (AVIConverter_320X240_20FPS_EN Setup.exe)
Requiere:
- ffmpeg - mencoder
Extras:
Divide video en partes de 10 min
Agrega subtítulos si existe el archivo file_name.srt
Uso:
avi2mp4 file_name.avi
"""
import sys
import os
import getopt
import commands
# Variables
mp4dir = '' # Directorio destino videos convertidos
# por ejemplo /home/tu_usuario/mp4/
seg_part = 10 * 60 # Tamaño partes: 10 min = 600 seg
def main():
# parse command line options
try:
opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
except getopt.error, msg:
print msg
print "for help use --help"
sys.exit(2)
# process options
for o, a in opts:
if o in ("-h", "--help"):
print __doc__
sys.exit(0)
# process arguments
for arg in args:
process(arg) # process() is defined elsewhere
def process(arg):
basename, extension = os.path.splitext(arg)
filename = os.path.basename(basename)
##print basename, extension, filename
##video_info = commands.getoutput('avidemux2_cli --nogui --load "%s" --autoindex --info --quit'%(arg)).split()
video_info = commands.getoutput('ffmpeg -i "%s"'%(arg)).split() # Agrega "" para evitar
try: # problema ruta con espacios
# Cálculo duración del video, -1 Saca la coma final
duracion = video_info[video_info.index('Duration:')+1][:-1]
except ValueError:
raise ValueError, "Imposible determinar duración video"
hr, min, seg = duracion.split(':')
##print duracion
seg_total = float(hr)*3600 + float(min)*60 + float(seg)
##print seg_total
npart = int(seg_total / seg_part) # Número de partes
seg_part_final = seg_total - seg_part * npart # Parte final tamaño restante
##print npart, seg_part_final
is_ok = 0
end_seg = str(seg_part)
for i in range(npart+1):
init_seg = str(i * seg_part)
if is_ok != 0: # Si hay un error al generar una parte del video
break
elif i == npart: # Parte final
end_seg = str(seg_part_final)
##print init_seg, end_seg, i
is_ok = os.system('mencoder "%s" -really-quiet \
-oac copy \
-ovc xvid -xvidencopts bitrate=687 \
-ss %s -endpos %s \
-sub "%s.srt" \
-ofps 20 \
-vf scale=320:240 \
-o "%s%s-0%s.avi"'
%(arg, init_seg, end_seg, basename, mp4dir, filename, i))
if is_ok == 0:
print 'Conversión realizada con éxito!\nRevisar archivos en %s'%(mp4dir)
else:
print 'Conversión fallida!\nRevisar archivos en %s'%(mp4dir)
if __name__ == "__main__":
main()
Diff to Previous Revision
--- revision 2 2010-04-30 03:48:45
+++ revision 3 2010-04-30 18:23:39
@@ -29,7 +29,7 @@
Divide video en partes de 10 min
Agrega subtítulos si existe el archivo file_name.srt
Uso:
- $ avi2mp4.py file_name.avi
+ avi2mp4 file_name.avi
"""
import sys
import os
@@ -79,23 +79,12 @@
##print npart, seg_part_final
is_ok = 0
end_seg = str(seg_part)
- for i in range(npart):
- if is_ok == 0: # Si hay un error al generar una parte retorna 1
- init_seg = str(i * seg_part)
- ##print init_seg, end_seg, i
- is_ok = os.system('mencoder "%s" -really-quiet \
- -oac copy \
- -ovc xvid -xvidencopts bitrate=687 \
- -ss %s -endpos %s \
- -sub "%s.srt" \
- -ofps 20 \
- -vf scale=320:240 \
- -o "%s%s-0%s.avi"'
- %(arg, init_seg, end_seg, basename, mp4dir, filename, i))
- if is_ok == 0: # Parte final
- init_seg = str(npart * seg_part)
- end_seg = str(seg_part_final)
- i = npart
+ for i in range(npart+1):
+ init_seg = str(i * seg_part)
+ if is_ok != 0: # Si hay un error al generar una parte del video
+ break
+ elif i == npart: # Parte final
+ end_seg = str(seg_part_final)
##print init_seg, end_seg, i
is_ok = os.system('mencoder "%s" -really-quiet \
-oac copy \
@@ -105,7 +94,7 @@
-ofps 20 \
-vf scale=320:240 \
-o "%s%s-0%s.avi"'
- %(arg, init_seg, seg_total, basename, mp4dir, filename, i))
+ %(arg, init_seg, end_seg, basename, mp4dir, filename, i))
if is_ok == 0:
print 'Conversión realizada con éxito!\nRevisar archivos en %s'%(mp4dir)
else: