When transcoding tracks, amarok adds "-n" option to the ffmpeg call. This causes transcoding job to fail when using a ffmpeg coming from the libav-tools:
amarok: ffmpeg: ffmpeg version 0.8.1-4:0.8.1-1really0u1, Copyright (c) 2000-2011 the Libav developers
amarok: ffmpeg: built on Mar 22 2012 20:42:48 with gcc 4.6.1
amarok: ffmpeg: This program is not developed anymore and is only provided for compatibility. Use avconv instead (see Changelog for the list of incompatible changes).
amarok: ffmpeg: Unrecognized option 'n'
amarok: ffmpeg: Failed to set value '-i' for option 'n'
amarok: NAY, transcoding fail!
Steps to Reproduce:
1. Install the libav-tools instead of the traditional ffmpeg.
2. Attempt to transcode a track.
Transcoding fails without a meaningful message ("copying tracks failed").
Amarok copies transcoded tracks.
Using amarok from git, 2012-05-23 on a Ubuntu 12.04. This will most probably affect all the distros switching from traditional ffmpeg to libav.
A trivial proof-of-concept patch fixes the problem here:
diff --git a/src/transcoding/TranscodingJob.cpp b/src/transcoding/TranscodingJob.cpp
index fba1446..24552dc 100644
@@ -67,7 +67,7 @@ Job::init()
//First the executable...
m_transcoder->setProgram( "ffmpeg" );
- //... no not overwrite output files but exit if file exists, otherwise ffmpeg is interactive and hangs
- *m_transcoder << QString( "-n" );
//... then we'd have the infile configuration followed by "-i" and the infile path...
*m_transcoder << QString( "-i" )
Obviously amarok could try to use avconv directly and fall back to ffmpeg when necessary.
Gosh, another ffmpeg incopatibility. The lines
//... no not overwrite output files but exit if file exists, otherwise ffmpeg is interactive and hangs
*m_transcoder << QString( "-n" );
are there for purpose! Piotr, is there another option to make libav's ffmpeg non-interactive? (especially when the target file already exists)
That would be:
-y Overwrite output files.
(In reply to comment #2)
> That would be: -y Overwrite output files.
Hmm, we probably don't want this, but at least something. There's no equivalent of the -n option that does the contrary?
No, there isn't: http://libav.org/ffmpeg.html#Main-options
I suppose -n was added to ffmpeg only recently. Indeed avconv/ffmpeg drops to interactive mode, when the output file exists:
$ ffmpeg -i 01.m4a 01.mp3
File '01.mp3' already exists. Overwrite ? [y/N]
We don't want to release 2.6 wihout fix to this bug. I'll have a look at it after beta tagging.
Git commit b1dfac7932bc89127b4ea1098a143efe9e068f99 by Matěj Laitl.
Committed on 26/05/2012 at 18:05.
Pushed by laitl into branch 'master'.
TranscodingJob: don't pass -n to ffmpeg, check file existence manually
* Transcoding: fix compatibility with libav's ffmpeg
M +1 -0 ChangeLog
M +19 -5 src/transcoding/TranscodingJob.cpp
M +5 -1 src/transcoding/TranscodingJob.h