Batch Video Converter

Search This thread

Budius

Senior Member
May 1, 2010
229
58
Copy/Move feature V2.1.0
move/copy file to output folder if the file doesn't need conversion

Minor Bug Fix V2.0.1
All the command line executions were being reported as seconds, but it was dividing milisecond by 100 instead of 1000

Major Release V2.0

Higher quality, faster conversions, more efficient checking, and super important: works with normal FFMPEG, no need to compile it yourself.

Changes:
- dropped GUI because aint nobody got time for that
- major re-write, better structured code all together
- properly checks available audio codecs and applies accordingly
- due to the above audio changes, it works fine with FFMPEG static builds
- yeah, normal builds you can simply download from ffmpeg.org
- drop 2-pass video because aint nobody got time for that
- moved code to gradle, all dependencies now come from mavenCentral(), no more downloaded **** on or folder
- independently handle audio or video conversion or copy (greater efficiency)
- separate warning and error log files

Update V1.1.1 (minor crash fix)

it's with great pleasure that I share with you guys my batch video converter for Chromecast.

it's made to be a simple as possible, select a file or a whole folder, and Go.

I did that to convert my terabyte of movies on my DLNA-NAS to be able to cast all of it without problems.
Because of this main reason the application it DELETES THE ORIGINAL VIDEO FILE AFTER CONVERSION COMPLETION.
So then the option `-d` can be used to delete the original after successful conversion.

The app analyses the video stream of your files, compare with what Chromecast accepts and only converts what's necessary, keeping great quality, and avoiding unnecessary encoding.

I also noticed that A LOT of apps does not play embedded subtitles, so in the process it extracts subtitle files so you can separately inject it into Chromecast.

changelog:
- v1.0.0 - initial release
- v1.1.0 - re-worked FFMPEG script for better quality, new layout with settings for speed, quality, delete file, output folder.
- v1.1.1 - Fix app not properly closing. Fix crash on subtitle stream without language tag.
- V2.0 - check above
- V2.1 - move/copy file to output folder if the file doesn't need conversion


Downloads:
- zip installation: Simply unzip the file on the location. Execute with ./cc_converter (linux/mac) or cc_converter (windows) from the command line
- open source project: GitHub link (contribute!)

Before starting:
This tool is just a thin wrapper on FFMPEG, so if your PC doesn't have a working version of FFMPEG, the tool won't work.
So make sure to download a build (recommended V3.0 or later) and have it available on your PATH
On the official website you can find all the detailed instructions on how to compile FFMPEG on your PC https://trac.ffmpeg.org/wiki/CompilationGuide

Yes, unfortunately you have to compile it yourself because, to keep great quality, the tool uses the non-free parts of FFMPEG.
That means, when compiling, make sure to include libx264 and libfdk-aac and keep the enable-nonfree flag.


Settings explanations:

as per request a few explanations on options:

the speed and quality options are directly related to x264 encoding options found here: https://trac.ffmpeg.org/wiki/x264EncodingGuide

- the speed is exactly what they explain there. The faster the conversion the crappier the job.
- the quality uses CRF (constant rate factor) and defaults to good quality for both audio and video.

high quality = video CRF 18, audio 80kb/s per channel
normal quality = video CRF 23, audio 64kb/s per channel
low quality = video CRF 26, audio 48kb/s per channel

On all my tests I ended up settling with Speed SLOW and quality HIGH as the Default because those will rarely increase the file size much and it will keep same quality.
Those test were based on both converting 1994 Friends episode (pretty crappy quality) all the way to Full-HD 5.1 movies.

So unless, you have a really good reason for it, I wouldn't change any of the defaults.
 
Last edited:

nigelhealy

Senior Member
Aug 3, 2012
1,537
444
Preston
it's with great pleasure that I share with you guys my batch video converter for Chromecast.

it's made to be a simple as possible, select a file or a whole folder, and click Go.

I did that to convert my terabyte of movies on my DLNA-NAS to be able to cast all of it without problems.
Because of this main reason the application it DELETES THE ORIGINAL VIDEO FILE AFTER CONVERSION COMPLETION.

The app analyses the video stream of your files, compare with what Chromecast accepts and only converts what's necessary, keeping great quality.

I also noticed that A LOT of apps does not play embedded subtitles, so in the process it extracts subtitle files so you can separately inject it into Chromecast.

Downloads:
- executable jar: Jar file download (execute it with java -jar chromecastconverter.jar)
- open source project: GitHub link (for whoever feels like contributing)

Can I run this on a headless Linux server like a Raspberry Pi running Rasbian?
 
  • Like
Reactions: paracha3

Budius

Senior Member
May 1, 2010
229
58
Can I run this on a headless Linux server like a Raspberry Pi running Rasbian?


It was build as a Java UI (using JavaFX), so I reckon the code it's not good for a headless server (although the objects in the code are quite modular and should be totally possible with minimum modification to do it)

BUT,
I urge anyone to not use it with a RaspberryPi, I have one myself and tried some FFMPEG on it and it's just so painfully slow!!! So so slow!
Like a 20 seconds video would take 5 min to process.

ps.: If anyone find a way to build FFMPEG on a raspPi that properly uses the GPU and makes stuff runs at proper speed, please let us know. :laugh:
 
  • Like
Reactions: DaniPhii

nigelhealy

Senior Member
Aug 3, 2012
1,537
444
Preston
It was build as a Java UI (using JavaFX), so I reckon the code it's not good for a headless server (although the objects in the code are quite modular and should be totally possible with minimum modification to do it)

BUT,
I urge anyone to not use it with a RaspberryPi, I have one myself and tried some FFMPEG on it and it's just so painfully slow!!! So so slow!
Like a 20 seconds video would take 5 min to process.

ps.: If anyone find a way to build FFMPEG on a raspPi that properly uses the GPU and makes stuff runs at proper speed, please let us know. :laugh:

Hmm ok. I been using a quad-core desktop and it just about does real-time. I been using get-iplayer it does something with ffmpeg to make an mp4 (which casts fine).

So your script it.... must have read-write access to the path presumably, so I'd have to have a CIFs mount? I'm Windows-less here on Ubuntu desktop so I can give it a SSFS folder, will that work? It is its delete function which scares me from simply trying it...

(edited) I'm running on my desktop it is only seeing local files folders, no CIFs mounts no SSH mounts. Means I'd have to copy all my videos to local first.

(double edit) on 2nd thoughts, I'm being dumb, I just move the external USB drive from my NAS (Raspberry) to my desktop, let it convert all needs it and then move it back.
 
Last edited:

Budius

Senior Member
May 1, 2010
229
58
yeah, as you can see it's a very basic software. Specially the GUI.
I focused more on the conversion bits and hopeful that ppl from the OpenSource community can help a bit on the GUI.

(double edit) on 2nd thoughts, I'm being dumb, I just move the external USB drive from my NAS (Raspberry) to my desktop, let it convert all needs it and then move it back.

Yeah, that's exactly what I've done here. My main PC is on the table there for the past 10 hours processing 1127 files of series I have. Next it will be the Movies folder.

I'm running on Linux too, and Linux is beautiful and there's all different ways you can mount a NAS folder locally but that means that all those tera-bytes of data will have to flow through the network, and that will certainly slow down the process even more.

ps.: any file that it doesn't manage to convert for whatever reason will be listed on a ChromecastConverterError.log on the folder location.


It is its delete function which scares me from simply trying it...

I know the feeling. I promise you that I tried on every way I could think of to only delete if it's sure it was a successful conversion (checks for success flag, then checks if the generated file exist and its size is greater than zero)
At the moment my stuff I'm running on local copy on my machine, but I'm really confident.

ps.: that's another thing I wanted someone from the OpenSource community to help out, to have options to save to different folder and not delete the original.
 
Last edited:

nigelhealy

Senior Member
Aug 3, 2012
1,537
444
Preston
(moving here, you're right keep bug tracking in this thread)

Quote:
Originally Posted by Budius View Post
what does say in the LOG tab?

Try running from the terminal: ffprobe <video_path>.mp4 Does it work or does it say "can't find command ffprobe" ?

at the end of this https://trac.ffmpeg.org/wiki/UbuntuCompilationGuide it shows how to add the ffmpeg to the path
Your tool says
[ERROR] Failed to get FFPROBE for /mnt/320gb/TEMP/Downloads/Lakes Sep 2013/VID_20130926_112924.mp4

Command line just works

ffprobe VID_20130926_112924.mp4
avprobe version 0.8.10-4:0.8.10-0ubuntu0.12.04.1, Copyright (c) 2007-2013 the Libav developers
built on Feb 6 2014 20:56:59 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'VID_20130926_112924.mp4':
Metadata:
major_brand : isom
minor_version : 0
compatible_brands: isom3gp4
creation_time : 2013-09-26 10:29:58
Duration: 00:00:32.57, start: 0.000000, bitrate: 5109 kb/s
Stream #0.0(eng): Video: h264 (Constrained Baseline), yuv420p, 720x480, 5056 kb/s, PAR 65536:65536 DAR 3:2, 30.31 fps, 90k tbr, 90k tbn, 180k tbc
Metadata:
creation_time : 2013-09-26 10:29:58
Stream #0.1(eng): Audio: aac, 48000 Hz, mono, s16, 96 kb/s
Metadata:
creation_time : 2013-09-26 10:29:58
 

Budius

Senior Member
May 1, 2010
229
58
Command line just works

ffprobe VID_20130926_112924.mp4
avprobe version 0.8.10-4:0.8.10-0

well, I can see that it's a different version of the ffprobe I'm using, so let's try the exact same command the software is doing, try this:

Code:
ffprobe -v quiet -print_format json -show_format -show_streams VID_20130926_112924.mp4

it should give a Json string, something similar to this (but with the information about your video):

Code:
{
  "streams": [{
    "index": 0,
    "codec_name": "wmv3",
    "codec_long_name": "Windows Media Video 9",
    "codec_type": "video",
    "codec_time_base": "1/1000",
    "codec_tag_string": "WMV3",
    "codec_tag": "0x33564d57",
    "width": 320,
    "height": 240,
    "has_b_frames": 0,
    "pix_fmt": "yuv420p",
    "level": -99,
    "r_frame_rate": "30000/1001",
    "avg_frame_rate": "0/0",
    "time_base": "1/1000",
    "start_time": "0.000",
    "duration": "300.066",
    "tags": {
        "language": "eng"
    }
  }],
  "format": {
    "filename": "somefile.asf",
    "nb_streams": 1,
    "format_name": "asf",
    "format_long_name": "ASF format",
    "start_time": "0.000",
    "duration": "300.066",
    "tags": {
        "WMFSDKVersion": "10.00.00.3646",
        "WMFSDKNeeded": "0.0.0.0000",
        "IsVBR": "0"
    }
  }
}
 

nigelhealy

Senior Member
Aug 3, 2012
1,537
444
Preston
well, I can see that it's a different version of the ffprobe I'm using, so let's try the exact same command the software is doing, try this:

Code:
ffprobe -v quiet -print_format json -show_format -show_streams VID_20130926_112924.mp4

it should give a Json string, something similar to this (but with the information about your video):

Code:
{
  "streams": [{
    "index": 0,
    "codec_name": "wmv3",
    "codec_long_name": "Windows Media Video 9",
    "codec_type": "video",
    "codec_time_base": "1/1000",
    "codec_tag_string": "WMV3",
    "codec_tag": "0x33564d57",
    "width": 320,
    "height": 240,
    "has_b_frames": 0,
    "pix_fmt": "yuv420p",
    "level": -99,
    "r_frame_rate": "30000/1001",
    "avg_frame_rate": "0/0",
    "time_base": "1/1000",
    "start_time": "0.000",
    "duration": "300.066",
    "tags": {
        "language": "eng"
    }
  }],
  "format": {
    "filename": "somefile.asf",
    "nb_streams": 1,
    "format_name": "asf",
    "format_long_name": "ASF format",
    "start_time": "0.000",
    "duration": "300.066",
    "tags": {
        "WMFSDKVersion": "10.00.00.3646",
        "WMFSDKNeeded": "0.0.0.0000",
        "IsVBR": "0"
    }
  }
}


Nope it just gives nothing, like it worked

Code:
ls -l VID_20130926_112924.mp4
-rwxrwxrwx 1 root root 20805982 Sep 26  2013 VID_20130926_112924.mp4
ffprobe -v quiet -print_format json -show_format -show_streams VID_20130926_112924.mp4
$

other info

Code:
whereis ffprobe
ffprobe: /usr/bin/ffprobe /usr/bin/X11/ffprobe

ffprobe -version
avprobe version 0.8.10-4:0.8.10-0ubuntu0.12.04.1, Copyright (c) 2007-2013 the Libav developers
  built on Feb  6 2014 20:56:59 with gcc 4.6.3
avprobe 0.8.10-4:0.8.10-0ubuntu0.12.04.1
libavutil    51. 22. 2 / 51. 22. 2
libavcodec   53. 35. 0 / 53. 35. 0
libavformat  53. 21. 1 / 53. 21. 1
libavdevice  53.  2. 0 / 53.  2. 0
libavfilter   2. 15. 0 /  2. 15. 0
libswscale    2.  1. 0 /  2.  1. 0
libpostproc  52.  0. 0 / 52.  0. 0


---------- Post added at 12:24 PM ---------- Previous post was at 12:21 PM ----------

command line syntax error in what you asked? If I remove the -quiet it says

Code:
Unrecognized option 'print_format'
Failed to set value 'json' for option 'print_format'
 

Budius

Senior Member
May 1, 2010
229
58


---------- Post added at 12:24 PM ---------- Previous post was at 12:21 PM ----------

command line syntax error in what you asked? If I remove the -quiet it says

Code:
Unrecognized option 'print_format'
Failed to set value 'json' for option 'print_format'

well that's the problem then. Somehow your version of FFPROBE does not understand to give a Json output.
The ffmpeg and ffprobe I'm using here are brand new compilations I did last week using that guide.

I should remove the -quiet option so whenever it fails it gives a more descriptive error in the app.

That's what my -version looks like
Code:
ffprobe version 2.2.git
built on Mar 22 2014 15:55:09 with gcc 4.7 (Ubuntu/Linaro 4.7.3-1ubuntu1)
configuration: --prefix=/home/budius/ffmpeg_build --extra-cflags=-I/home/budius/ffmpeg_build/include --extra-ldflags=-L/home/budius/ffmpeg_build/lib --bindir=/home/budius/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-x11grab
libavutil      52. 67.100 / 52. 67.100
libavcodec     55. 52.102 / 55. 52.102
libavformat    55. 34.101 / 55. 34.101
libavdevice    55. 11.100 / 55. 11.100
libavfilter     4.  3.100 /  4.  3.100
libswscale      2.  5.102 /  2.  5.102
libswresample   0. 18.100 /  0. 18.100
libpostproc    52.  3.100 / 52.  3.100

so my best advice if you want to use the tool is to, remove/delete your current version of FFMPEG/FFPROBE and re-compile it using the guide =]
 

nigelhealy

Senior Member
Aug 3, 2012
1,537
444
Preston
so my best advice if you want to use the tool is to, remove/delete your current version of FFMPEG/FFPROBE and re-compile it using the guide =]

I have

It is now running but an opposite problem, it is converting files which ALREADY work on Chromecast, like MP4 files which work just fine.

It is improving them how?

The Chromecast log is empty this is what was showing in the console from which the Java command ran

Code:
ffprobe parsing file: /mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default.mp4
ffprobe version 2.2.git Copyright (c) 2007-2014 the FFmpeg developers
  built on Mar 31 2014 13:10:45 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --prefix=/home/nigel/ffmpeg_build --extra-cflags=-I/home/nigel/ffmpeg_build/include --extra-ldflags=-L/home/nigel/ffmpeg_build/lib --bindir=/home/nigel/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
  libavutil      52. 70.100 / 52. 70.100
  libavcodec     55. 55.106 / 55. 55.106
  libavformat    55. 36.100 / 55. 36.100
  libavdevice    55. 11.100 / 55. 11.100
  libavfilter     4.  3.100 /  4.  3.100
  libswscale      2.  5.102 /  2.  5.102
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.111.0
  Duration: 00:44:05.59, start: 0.000000, bitrate: 1501 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 832x468 [SAR 117:117 DAR 16:9], 1401 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 94 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
Runtime execution finished with success
Runtime execution finished with success
Starting first pass for file: /mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default.mp4
Executing [ffmpeg -i /mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default.mp4 -c:v libx264 -profile:v high -level 5 -preset slow -b:v 1401533 -an -pass 1 /mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default_1_temp.mp4]
ffmpeg version 2.2.git Copyright (c) 2000-2014 the FFmpeg developers
  built on Mar 31 2014 13:10:45 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --prefix=/home/nigel/ffmpeg_build --extra-cflags=-I/home/nigel/ffmpeg_build/include --extra-ldflags=-L/home/nigel/ffmpeg_build/lib --bindir=/home/nigel/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
  libavutil      52. 70.100 / 52. 70.100
  libavcodec     55. 55.106 / 55. 55.106
  libavformat    55. 36.100 / 55. 36.100
  libavdevice    55. 11.100 / 55. 11.100
  libavfilter     4.  3.100 /  4.  3.100
  libswscale      2.  5.102 /  2.  5.102
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.111.0
  Duration: 00:44:05.59, start: 0.000000, bitrate: 1501 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 832x468 [SAR 117:117 DAR 16:9], 1401 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 94 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
[libx264 @ 0x3ca32e0] using SAR=1/1
[libx264 @ 0x3ca32e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x3ca32e0] profile Main, level 5.0
[libx264 @ 0x3ca32e0] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0 me=dia subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=abr mbtree=1 bitrate=1401 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default_1_temp.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.36.100
    Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 832x468 [SAR 117:117 DAR 16:9], q=-1--1, pass 1, 1401 kb/s, 12800 tbn, 25 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
Press [q] to stop, [?] for help
frame=   67 fps=0.0 q=26.0 size=       1kB time=00:00:00.20 bitrate=  50.5kbits/s dup=2 drop=0    
frame=  112 fps=111 q=29.0 size=    1239kB time=00:00:02.00 bitrate=5073.3kbits/s dup=2 drop=0    
frame=  159 fps=105 q=34.0 size=    1555kB time=00:00:03.88 bitrate=3283.6kbits/s dup=2 drop=0    
frame=  216 fps=106 q=35.0 size=    1825kB time=00:00:06.16 bitrate=2427.6kbits/s dup=2 drop=0    
frame=  283 fps=111 q=32.0 size=    1970kB time=00:00:08.84 bitrate=1825.7kbits/s dup=2 drop=0    
frame=  354 fps=116 q=28.0 size=    2142kB time=00:00:11.68 bitrate=1502.1kbits/s dup=2 drop=0    
frame=  422 fps=118 q=26.0 size=    2377kB time=00:00:14.40 bitrate=1352.0kbits/s dup=2 drop=0    
frame=  486 fps=119 q=24.0 size=    2677kB time=00:00:16.96 bitrate=1293.0kbits/s dup=2 drop=0    
frame=  550 fps=120 q=23.0 size=    3020kB time=00:00:19.52 bitrate=1267.3kbits/s dup=2 drop=0    
frame=  625 fps=122 q=21.0 size=    3301kB time=00:00:22.52 bitrate=1200.8kbits/s dup=2 drop=0    
frame=  691 fps=123 q=20.0 size=    3651kB time=00:00:25.16 bitrate=1188.6kbits/s dup=2 drop=0    
frame=  749 fps=123 q=20.0 size=    4082kB time=00:00:27.48 bitrate=1217.0kbits/s dup=2 drop=0    
frame=  804 fps=122 q=19.0 size=    4406kB time=00:00:29.68 bitrate=1216.1kbits/s dup=2 drop=0    
^Cnigel@T420ubuntu:~/Downloads$
 

Budius

Senior Member
May 1, 2010
229
58
Code:
ffprobe parsing file: /mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default.mp4
ffprobe version 2.2.git Copyright (c) 2007-2014 the FFmpeg developers
  built on Mar 31 2014 13:10:45 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --prefix=/home/nigel/ffmpeg_build --extra-cflags=-I/home/nigel/ffmpeg_build/include --extra-ldflags=-L/home/nigel/ffmpeg_build/lib --bindir=/home/nigel/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
  libavutil      52. 70.100 / 52. 70.100
  libavcodec     55. 55.106 / 55. 55.106
  libavformat    55. 36.100 / 55. 36.100
  libavdevice    55. 11.100 / 55. 11.100
  libavfilter     4.  3.100 /  4.  3.100
  libswscale      2.  5.102 /  2.  5.102
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.111.0
  Duration: 00:44:05.59, start: 0.000000, bitrate: 1501 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 832x468 [SAR 117:117 DAR 16:9], 1401 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 94 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
Runtime execution finished with success
Runtime execution finished with success
Starting first pass for file: /mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default.mp4
Executing [ffmpeg -i /mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default.mp4 -c:v libx264 -profile:v high -level 5 -preset slow -b:v 1401533 -an -pass 1 /mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default_1_temp.mp4]
ffmpeg version 2.2.git Copyright (c) 2000-2014 the FFmpeg developers
  built on Mar 31 2014 13:10:45 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --prefix=/home/nigel/ffmpeg_build --extra-cflags=-I/home/nigel/ffmpeg_build/include --extra-ldflags=-L/home/nigel/ffmpeg_build/lib --bindir=/home/nigel/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
  libavutil      52. 70.100 / 52. 70.100
  libavcodec     55. 55.106 / 55. 55.106
  libavformat    55. 36.100 / 55. 36.100
  libavdevice    55. 11.100 / 55. 11.100
  libavfilter     4.  3.100 /  4.  3.100
  libswscale      2.  5.102 /  2.  5.102
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.111.0
  Duration: 00:44:05.59, start: 0.000000, bitrate: 1501 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 832x468 [SAR 117:117 DAR 16:9], 1401 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 94 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
[libx264 @ 0x3ca32e0] using SAR=1/1
[libx264 @ 0x3ca32e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x3ca32e0] profile Main, level 5.0
[libx264 @ 0x3ca32e0] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0 me=dia subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=abr mbtree=1 bitrate=1401 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/mnt/320gb/TEMP/Downloads/Natural_World_-_2013-2014_Giant_Squid_2._Filming_the_Impossible_-_Natural_World_Special_b0377t15_default_1_temp.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.36.100
    Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 832x468 [SAR 117:117 DAR 16:9], q=-1--1, pass 1, 1401 kb/s, 12800 tbn, 25 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
Press [q] to stop, [?] for help
frame=   67 fps=0.0 q=26.0 size=       1kB time=00:00:00.20 bitrate=  50.5kbits/s dup=2 drop=0    
frame=  112 fps=111 q=29.0 size=    1239kB time=00:00:02.00 bitrate=5073.3kbits/s dup=2 drop=0    
frame=  159 fps=105 q=34.0 size=    1555kB time=00:00:03.88 bitrate=3283.6kbits/s dup=2 drop=0    
frame=  216 fps=106 q=35.0 size=    1825kB time=00:00:06.16 bitrate=2427.6kbits/s dup=2 drop=0    
frame=  283 fps=111 q=32.0 size=    1970kB time=00:00:08.84 bitrate=1825.7kbits/s dup=2 drop=0    
frame=  354 fps=116 q=28.0 size=    2142kB time=00:00:11.68 bitrate=1502.1kbits/s dup=2 drop=0    
frame=  422 fps=118 q=26.0 size=    2377kB time=00:00:14.40 bitrate=1352.0kbits/s dup=2 drop=0    
frame=  486 fps=119 q=24.0 size=    2677kB time=00:00:16.96 bitrate=1293.0kbits/s dup=2 drop=0    
frame=  550 fps=120 q=23.0 size=    3020kB time=00:00:19.52 bitrate=1267.3kbits/s dup=2 drop=0    
frame=  625 fps=122 q=21.0 size=    3301kB time=00:00:22.52 bitrate=1200.8kbits/s dup=2 drop=0    
frame=  691 fps=123 q=20.0 size=    3651kB time=00:00:25.16 bitrate=1188.6kbits/s dup=2 drop=0    
frame=  749 fps=123 q=20.0 size=    4082kB time=00:00:27.48 bitrate=1217.0kbits/s dup=2 drop=0    
frame=  804 fps=122 q=19.0 size=    4406kB time=00:00:29.68 bitrate=1216.1kbits/s dup=2 drop=0    
^Cnigel@T420ubuntu:~/Downloads$

First of all, I'm very happy that you got it working :highfive: . I wish I could just pack FFMPEG with the software so it would be more user friendly, but because it uses the "-non-free" stuff I don't want to get in trouble for helping others.

I don't believe it's improving in any way, but I'll tell your what is happening.
Those are the format officially supported by the Chromecast https://developers.google.com/cast/docs/media

I did noticed that in reality it can run some little variations, for example, your video is h264 Profile: Main avc1 and it works.
Another example, it will cast without issues .MKV files with an appropriate h264 stream.

But for correctness the software converts anything that is not exactly as shown in the official website. I mean, I gotta follow the official stuff.

I just think it's very weird that the log is not showing as it's supposed to show the same thing from your console output.
 

Budius

Senior Member
May 1, 2010
229
58
regarding raspberry Pi.

I just found the official compilation guide and I'll give it a try.
https://trac.ffmpeg.org/wiki/How to compile FFmpeg for Raspberry Pi (Raspbian)

I'll see how the performance is etc.
It will obviously be worse than in a full PC, but maybe the pre-build bins I used before were not very well done, and if it can achieve a bare minimum it could be a good running as a daemon so every new file added to a certain folder gets auto-converted.

I mean, if 1 off, 2 hous movie takes 5-6 hours to convert, it's ok. I still believe that tera-bytes conversion would be too slow, but as daemon.
 

nigelhealy

Senior Member
Aug 3, 2012
1,537
444
Preston
First of all, I'm very happy that you got it working :highfive: . ...

But for correctness the software converts anything that is not exactly as shown in the official website. I mean, I gotta follow the official stuff.

.

Well that is your feedback, make it remove re-coding that which actually works on Chromecast, it will save hours of recoding.
 
  • Like
Reactions: Budius

Budius

Senior Member
May 1, 2010
229
58
Well that is your feedback, make it remove re-coding that which actually works on Chromecast, it will save hours of recoding.

it does make sense, but also means I have to go ahead and test a bunch of variations to see what works and what doesn't.
I mean, I agree with you, it's a improvement, and I'll put in the TODO list, it might just take a bit to happen :silly:
 

paracha3

Senior Member
Jan 13, 2008
199
16
Phoenix
Dear OP,

I tried converting a mkv file using your converter and at the end of conversion it created a mp4 file but message said that it failed. When i played the converted mp4 file on my PC, it plays video but no audio? any idea whey the audio is not playing back? I did not try on chromecast yet but i assume the audio wont play on it either.
Thoughts? Thanks
 

Budius

Senior Member
May 1, 2010
229
58
Dear OP,

I tried converting a mkv file using your converter and at the end of conversion it created a mp4 file but message said that it failed. When i played the converted mp4 file on my PC, it plays video but no audio? any idea whey the audio is not playing back? I did not try on chromecast yet but i assume the audio wont play on it either.
Thoughts? Thanks

the conversion uses a two-pass method for best quality.
1st pass is only processing the video and doesn't even look at the audio. On the 2nd pass the audio is added/processed.

The video you got without audio is the result of the 1st pass, and the 2nd pass never executed because it failed.

My guess is that your compilation of FFMPEG does not have libfdk_aac (the audio library used for conversion keeping the best quality possible).
Unfortunately this library is tagged as "-non-free" so you can't just download from somewhere. It's illegal to do so. You have to follow the guide here https://trac.ffmpeg.org/wiki/CompilationGuide to compile the library yourself on your PC..

As I said before, I really wished it would be more user-friendly. But that's out of my control.

Probably in a future version I'll try to detect if this library is available and if it's not use the native one, that renders a not so great quality, but at least works in all cases.
 
  • Like
Reactions: paracha3

paracha3

Senior Member
Jan 13, 2008
199
16
Phoenix
the conversion uses a two-pass method for best quality.
1st pass is only processing the video and doesn't even look at the audio. On the 2nd pass the audio is added/processed.

The video you got without audio is the result of the 1st pass, and the 2nd pass never executed because it failed.

My guess is that your compilation of FFMPEG does not have libfdk_aac (the audio library used for conversion keeping the best quality possible).
Unfortunately this library is tagged as "-non-free" so you can't just download from somewhere. It's illegal to do so. You have to follow the guide here https://trac.ffmpeg.org/wiki/CompilationGuide to compile the library yourself on your PC..

As I said before, I really wished it would be more user-friendly. But that's out of my control.

Probably in a future version I'll try to detect if this library is available and if it's not use the native one, that renders a not so great quality, but at least works in all cases.

Thanks. Is there a compiled binary for windows 7 available? so i dont have to go through self compilation step?

Update: Just read "License restrictions prohibit distribution of already compiled FFmpeg with libfdk-aac, so if I want to use it I must make my own build of FFmpeg."
 

Budius

Senior Member
May 1, 2010
229
58
Thanks. Is there a compiled binary for windows 7 available? so i dont have to go through self compilation step?

as I said. The libfdk_aac is proprietary (a.k.a.: -non-free), so it's illegal for people to distribute it pre-compiled.
It's probably possible to Google and find it, but the compilation guides are very well explained in my opinion.

Just remember to compile with libfdk_aac and with x264 codecs.
 

Budius

Senior Member
May 1, 2010
229
58
Update: Just read "License restrictions prohibit distribution of already compiled FFmpeg with libfdk-aac, so if I want to use it I must make my own build of FFmpeg."

Although it seems to be working very reliably, the software is still a bit rough around the edges. I'll try in a future version to check for what is available, for example, if libfdk_aac is not there I can use MP3 instead.
 

Top Liked Posts

  • There are no posts matching your filters.
  • 8
    Copy/Move feature V2.1.0
    move/copy file to output folder if the file doesn't need conversion

    Minor Bug Fix V2.0.1
    All the command line executions were being reported as seconds, but it was dividing milisecond by 100 instead of 1000

    Major Release V2.0

    Higher quality, faster conversions, more efficient checking, and super important: works with normal FFMPEG, no need to compile it yourself.

    Changes:
    - dropped GUI because aint nobody got time for that
    - major re-write, better structured code all together
    - properly checks available audio codecs and applies accordingly
    - due to the above audio changes, it works fine with FFMPEG static builds
    - yeah, normal builds you can simply download from ffmpeg.org
    - drop 2-pass video because aint nobody got time for that
    - moved code to gradle, all dependencies now come from mavenCentral(), no more downloaded **** on or folder
    - independently handle audio or video conversion or copy (greater efficiency)
    - separate warning and error log files

    Update V1.1.1 (minor crash fix)

    it's with great pleasure that I share with you guys my batch video converter for Chromecast.

    it's made to be a simple as possible, select a file or a whole folder, and Go.

    I did that to convert my terabyte of movies on my DLNA-NAS to be able to cast all of it without problems.
    Because of this main reason the application it DELETES THE ORIGINAL VIDEO FILE AFTER CONVERSION COMPLETION.
    So then the option `-d` can be used to delete the original after successful conversion.

    The app analyses the video stream of your files, compare with what Chromecast accepts and only converts what's necessary, keeping great quality, and avoiding unnecessary encoding.

    I also noticed that A LOT of apps does not play embedded subtitles, so in the process it extracts subtitle files so you can separately inject it into Chromecast.

    changelog:
    - v1.0.0 - initial release
    - v1.1.0 - re-worked FFMPEG script for better quality, new layout with settings for speed, quality, delete file, output folder.
    - v1.1.1 - Fix app not properly closing. Fix crash on subtitle stream without language tag.
    - V2.0 - check above
    - V2.1 - move/copy file to output folder if the file doesn't need conversion


    Downloads:
    - zip installation: Simply unzip the file on the location. Execute with ./cc_converter (linux/mac) or cc_converter (windows) from the command line
    - open source project: GitHub link (contribute!)

    Before starting:
    This tool is just a thin wrapper on FFMPEG, so if your PC doesn't have a working version of FFMPEG, the tool won't work.
    So make sure to download a build (recommended V3.0 or later) and have it available on your PATH
    On the official website you can find all the detailed instructions on how to compile FFMPEG on your PC https://trac.ffmpeg.org/wiki/CompilationGuide

    Yes, unfortunately you have to compile it yourself because, to keep great quality, the tool uses the non-free parts of FFMPEG.
    That means, when compiling, make sure to include libx264 and libfdk-aac and keep the enable-nonfree flag.


    Settings explanations:

    as per request a few explanations on options:

    the speed and quality options are directly related to x264 encoding options found here: https://trac.ffmpeg.org/wiki/x264EncodingGuide

    - the speed is exactly what they explain there. The faster the conversion the crappier the job.
    - the quality uses CRF (constant rate factor) and defaults to good quality for both audio and video.

    high quality = video CRF 18, audio 80kb/s per channel
    normal quality = video CRF 23, audio 64kb/s per channel
    low quality = video CRF 26, audio 48kb/s per channel

    On all my tests I ended up settling with Speed SLOW and quality HIGH as the Default because those will rarely increase the file size much and it will keep same quality.
    Those test were based on both converting 1994 Friends episode (pretty crappy quality) all the way to Full-HD 5.1 movies.

    So unless, you have a really good reason for it, I wouldn't change any of the defaults.
    1
    it's with great pleasure that I share with you guys my batch video converter for Chromecast.

    it's made to be a simple as possible, select a file or a whole folder, and click Go.

    I did that to convert my terabyte of movies on my DLNA-NAS to be able to cast all of it without problems.
    Because of this main reason the application it DELETES THE ORIGINAL VIDEO FILE AFTER CONVERSION COMPLETION.

    The app analyses the video stream of your files, compare with what Chromecast accepts and only converts what's necessary, keeping great quality.

    I also noticed that A LOT of apps does not play embedded subtitles, so in the process it extracts subtitle files so you can separately inject it into Chromecast.

    Downloads:
    - executable jar: Jar file download (execute it with java -jar chromecastconverter.jar)
    - open source project: GitHub link (for whoever feels like contributing)

    Can I run this on a headless Linux server like a Raspberry Pi running Rasbian?
    1
    Can I run this on a headless Linux server like a Raspberry Pi running Rasbian?


    It was build as a Java UI (using JavaFX), so I reckon the code it's not good for a headless server (although the objects in the code are quite modular and should be totally possible with minimum modification to do it)

    BUT,
    I urge anyone to not use it with a RaspberryPi, I have one myself and tried some FFMPEG on it and it's just so painfully slow!!! So so slow!
    Like a 20 seconds video would take 5 min to process.

    ps.: If anyone find a way to build FFMPEG on a raspPi that properly uses the GPU and makes stuff runs at proper speed, please let us know. :laugh:
    1
    First of all, I'm very happy that you got it working :highfive: . ...

    But for correctness the software converts anything that is not exactly as shown in the official website. I mean, I gotta follow the official stuff.

    .

    Well that is your feedback, make it remove re-coding that which actually works on Chromecast, it will save hours of recoding.
    1
    Dear OP,

    I tried converting a mkv file using your converter and at the end of conversion it created a mp4 file but message said that it failed. When i played the converted mp4 file on my PC, it plays video but no audio? any idea whey the audio is not playing back? I did not try on chromecast yet but i assume the audio wont play on it either.
    Thoughts? Thanks

    the conversion uses a two-pass method for best quality.
    1st pass is only processing the video and doesn't even look at the audio. On the 2nd pass the audio is added/processed.

    The video you got without audio is the result of the 1st pass, and the 2nd pass never executed because it failed.

    My guess is that your compilation of FFMPEG does not have libfdk_aac (the audio library used for conversion keeping the best quality possible).
    Unfortunately this library is tagged as "-non-free" so you can't just download from somewhere. It's illegal to do so. You have to follow the guide here https://trac.ffmpeg.org/wiki/CompilationGuide to compile the library yourself on your PC..

    As I said before, I really wished it would be more user-friendly. But that's out of my control.

    Probably in a future version I'll try to detect if this library is available and if it's not use the native one, that renders a not so great quality, but at least works in all cases.