commit bb471c24ae61fa06c68dc34371285a17a606884a
Author: phantomjinx <[email protected]>
Date: Sat Dec 11 23:35:21 2010 +0000
Adds support for converting videos to ipod spec mp4s
* video filetype uses generic convert-2mp4.sh script to convert videos to
mp4s.
* convert-2mp4.sh
* Uses ffmpeg for the conversion
* Adds tag information using ffmpeg's metadata options.
* Log file added for debugging problems
libgtkpod/prefs.c | 7 ++++-
plugins/core_preferences/core_prefs.c | 2 +
plugins/filetype_video/plugin.c | 4 +-
plugins/filetype_video/videofile.c | 9 ++++++
plugins/filetype_video/videofile.h | 2 +
scripts/Makefile.am | 1 +
scripts/convert-2mp4.sh | 49 +++++++++++++++++++++++++++++++++
scripts/gtkpod-convert-common.sh | 4 +-
8 files changed, 73 insertions(+), 5 deletions(-)
---
diff --git a/libgtkpod/prefs.c b/libgtkpod/prefs.c
index b38dd25..bfd769d 100644
--- a/libgtkpod/prefs.c
+++ b/libgtkpod/prefs.c
@@ -188,6 +188,11 @@ static void set_default_preferences() {
g_free(str);
prefs_set_int("convert_wav", FALSE);
+ str = g_build_filename(get_script_dir(), "convert-2mp4.sh", NULL);
+ prefs_set_string("path_conv_mp4", str);
+ g_free(str);
+ prefs_set_int("convert_mp4", TRUE);
+
/* Set colum preferences */
for (i = 0; i < TM_NUM_COLUMNS; i++) {
prefs_set_int_index("col_order", i, i);
@@ -879,7 +884,7 @@ static void cleanup_keys() {
const gchar **keyp;
const gchar *keys[] =
- { "path_conv_m4a", "path_conv_wav", "path_conv_mp3",
"path_conv_ogg", "path_conv_flac", NULL };
+ { "path_conv_m4a", "path_conv_wav", "path_conv_mp3",
"path_conv_ogg", "path_conv_flac", "path_conv_mp4", NULL };
for (keyp = keys; *keyp; ++keyp) {
buf = prefs_get_string(*keyp);
diff --git a/plugins/core_preferences/core_prefs.c
b/plugins/core_preferences/core_prefs.c
index 0a98de6..0cc6bd9 100644
--- a/plugins/core_preferences/core_prefs.c
+++ b/plugins/core_preferences/core_prefs.c
@@ -95,6 +95,7 @@ const gchar *conv_checkbox_map[][3] = {
{ "convert_mp3", "convert_mp3", NULL },
{ "convert_aac", "convert_m4a", NULL },
{ "convert_wav", "convert_wav", NULL },
+ { "convert_mp4", "convert_mp4", NULL },
{ "display_conversion_log", "", NULL },
};
@@ -117,6 +118,7 @@ ind_string conv_paths[] = {
{ TARGET_FORMAT_AAC, "path_conv_m4a" },
{ TARGET_FORMAT_MP3, "path_conv_mp3" },
{ -1, "path_conv_wav" },
+ { -1, "path_conv_mp4" }
};
static TempPrefs *temp_prefs = NULL;
diff --git a/plugins/filetype_video/plugin.c b/plugins/filetype_video/plugin.c
index 2dd448d..01b5a99 100644
--- a/plugins/filetype_video/plugin.c
+++ b/plugins/filetype_video/plugin.c
@@ -87,8 +87,8 @@ static void video_filetype_iface_init(FileTypeInterface
*iface) {
iface->read_lyrics = filetype_no_read_lyrics; /* FIXME */
iface->write_lyrics = filetype_no_write_lyrics; /* FIXME */
iface->read_gapless = filetype_no_read_gapless; /* FIXME ?? */
- iface->can_convert = filetype_no_convert;
- iface->get_conversion_cmd = filetype_no_conversion_cmd;
+ iface->can_convert = video_can_convert;
+ iface->get_conversion_cmd = video_get_conversion_cmd;
iface->get_gain_cmd = filetype_no_gain_cmd;
}
diff --git a/plugins/filetype_video/videofile.c
b/plugins/filetype_video/videofile.c
index 8afd0f0..a3fcc65 100644
--- a/plugins/filetype_video/videofile.c
+++ b/plugins/filetype_video/videofile.c
@@ -48,3 +48,12 @@ Track *video_get_file_info(const gchar *filename) {
return track;
}
+
+gboolean video_can_convert() {
+ gchar *cmd = video_get_conversion_cmd();
+ return cmd && cmd[0] && prefs_get_int("convert_mp4");
+}
+
+gchar *video_get_conversion_cmd() {
+ return prefs_get_string("path_conv_mp4");
+}
diff --git a/plugins/filetype_video/videofile.h
b/plugins/filetype_video/videofile.h
index 5ba30a9..dcc2381 100644
--- a/plugins/filetype_video/videofile.h
+++ b/plugins/filetype_video/videofile.h
@@ -33,5 +33,7 @@
#include "libgtkpod/itdb.h"
Track *video_get_file_info(const gchar *name);
+gboolean video_can_convert();
+gchar *video_get_conversion_cmd();
#endif
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 563e0bb..51c98cd 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -7,6 +7,7 @@ scriptdir = $(pkgdatadir)/scripts
script_SCRIPTS = \
convert-2m4a.sh \
convert-2mp3.sh \
+ convert-2mp4.sh \
gtkpod-convert-common.sh \
ldif2vcf.sh \
mab2vcard \
diff --git a/scripts/convert-2mp4.sh b/scripts/convert-2mp4.sh
new file mode 100755
index 0000000..acfb803
--- /dev/null
+++ b/scripts/convert-2mp4.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# Script that converts a file into an mp4 file
+#
+# USAGE:
+#
+# convert-2mp4.sh [options] inputfile
+#
+# For a list of allowed options please consult gtkpod-convert-common.sh
+#
+# STDOUT's last line is the converted filename.
+# Return Codes:
+# 0 ok
+# 1 input file not found
+# 2 output file cannot be created
+# 3 cannot get info
+# 4 cannot exec decoding
+# 5 cannot exec encoding
+# 6 conversion failed
+# 7 unknown option
+#
+
+# Constants
+extension="mp4"
+ENCODER_OPTS="-y -sameq -acodec aac -ab 160k -b 1100k -s 640x480 -aspect 4:3"
+ENCODER="ffmpeg"
+
+echo "Attempting to convert file" >> $LOG
+
+. ${0%/*}/gtkpod-convert-common.sh
+
+LOG=`dirname "$outfile"`
+LOG=${LOG%.log}
+
+"$encoder" -i "$infile" $ENCODER_OPTS -metadata author="$artist" -metadata
title="$title" -metadata album="$album" -metadata year="$year" -metadata
track="$track" -metadata genre="$genre" -metadata comment="$comment" "$outfile"
>> $LOG 2>&1
+
+# Check result
+if [ "x$?" != "x0" ]; then
+ echo "Failed with status 6" >> $LOG
+ exit 6
+fi
+
+if [ ! -f "$outfile" ]; then
+ echo "Failed with status 6" >> $LOG
+ exit 8
+fi
+
+# Seems to be ok: display filename for gtkpod
+echo $outfile
+exit 0
diff --git a/scripts/gtkpod-convert-common.sh b/scripts/gtkpod-convert-common.sh
index f62456f..33b87e2 100755
--- a/scripts/gtkpod-convert-common.sh
+++ b/scripts/gtkpod-convert-common.sh
@@ -3,7 +3,7 @@
#
# USAGE:
#
-# Called by convert-2mp3.sh and convert-2m4a.sh.
+# Called by convert-2mp3.sh, convert-2m4a.sh, convert-2mp4.sh.
#
# The following command line arguments are being used
#
@@ -96,7 +96,7 @@ case "$filetype" in
decoder="oggdec" ; options="--quiet --output - --" ;;
m4a) decoder="faad" ; options="-o -" ;;
wav) decoder="" ;;
- *) exit 4 ;;
+ *) decoder="ffmpeg" ;;
esac
# Check for the existence of decoder
------------------------------------------------------------------------------
Oracle to DB2 Conversion Guide: Learn learn about native support for PL/SQL,
new data types, scalar functions, improved concurrency, built-in packages,
OCI, SQL*Plus, data movement tools, best practices and more.
http://p.sf.net/sfu/oracle-sfdev2dev
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2